I mean, he traded in his existing hardware and installs for a Win7+iPad+WP7 combination.
As far as cross-platform open source software goes, there are a lot of rough edges in that vicinity.
If you've tried using Gimp or Pidgin for an extended length of time on Vista or Win7, you might have noticed the app get confused about which window was where in the z order.
If you run Ekiga, you might notice the app mis-registers its system tray icon, so show/hide settings in the system tray don't persist between runs.
If you're a Ruby developer, you probably know that running ruby in a web server context on Windows is much slower than on Linux or Macs.*
If you're a git user, you're probably well aware that git tools on Windows lag far, far behind git tools on other platforms
There's a lot of good open-source software for Windows, but there isn't as much good open-source software that runs well on both Windows and other platforms. If you spend time on a variety of platforms, it becomes tricky to find a comfortable arrangement of software that works well on each. I'm a Linux guy outside work**, but my day job is coding C++ on Windows, and I can speak with experience on the difficulty of finding good client-side software that works in both environments.
It's going to be a bit uncomfortable settling into using Windows as a personal OS if his preferred tools don't run well or at all on it. Discomfort like that leads to bug reports and change.
* Or so I've been told by Ruby developers. I haven't had occasion to write in Ruby myself. ** Three Debian servers (one router and Rosetta Code's two VPS nodes), a Debian desktop (fiancee's), an Ubuntu HTPC(built by fiancee), and fiancee's Ubuntu laptop, my Arch laptop and my Gentoo desktop.
I also haven't followed E development, but if 1.0 means "feature complete", then perhaps they simply reached their target? Or maybe they simply hit a baseline flexible enough that they can tack on whatever they like afterward, akin to how future "versions" of OpenGL use extension/capabilities listings.
Simple description: Out-of-sight costs are out-of-mind. Financial concerns for the professional programmer mean meeting deadlines under project requirement constraints. That means getting it out the door quickly.
Personal concerns for hobbyist programmers include boredom; if it's not slow work and uninteresting, it's not worth their time.
As for write-once, run-once...blame the hyperfocus on app stores. With app stores, you don't want to invest a lot of developer time creating a project, because there's an arbitrary axe ready to come down on something your company spent two months getting perfect. Once past the arbitrary axe, with as much competition as there is, if someone finds your app even the slightest bit unsatisfactory, the barrier to trying something else is slim to none.
That's great for consumers, because out of dozens of options, one of them will be just right, and it'll be cheap; the developer won't have wanted to invest a lot of his time, because he might not have landed single sale in the first place. He'll either have been talented enough to get it right early, or he'll simply have been lucky.
Limited to your local desktop's CPU cores, written in C or C++? You probably want to look at OpenMP, probably combined with some compiler intrinsics for vector math. (Or you can use a third-party library which already does things like that.)
I'll note that, limiting yourself to your desktop's CPU cores cripples even the average web-targeted netbook. You'd be much better off delegating the number crunching to your GPGPUs. (Even my desktop's HD3200 integrated video chipset ought to be able to trounce my Phenom 9650 for a problem like that.)
Efficient use of parallel resources depends a great deal on the nature of the problem you want to solve. As the most demanding consumers of parallel resources push for even more capacity, more tools are developed. The more tools that get developed, the more complicated the problem is discovered to be.
There are efforts to take different approaches on the problem, primarily (from what I've seen) in developing alternate programming languages that try to neatly solve those problems that existing programming languages have difficulty with, but they tend to require thinking about problem solving from a vastly different perspective, and have their own systemic complexities and weaknesses.
In other words, in the area of parallel computation, programming is experiencing an even greater tower-of-Babel event than any other area of programming I'm aware of. This extends from libraries to language extensions, to languages and on through models of programming.
I want some efficient use of multiprocessor systems.
For which processor classes, and which problem domains? The more flexibility you want, the more you'll sacrifice in efficiency/engineer-time or efficiency/computer-time.
I've been playing around with Perl 6 a little this week. Rakudo works well enough that I'll be using Perl 6 where I've previously been using Perl. I find it useful to follow the Perl 6 Planet, as it has a bunch of Perl 6 developers' perspectives and musings as they use the langauge. (For example, one guy wrote his blogging engine in Perl 6, and commented on speed differences between a couple Perl 6 implementations.)
I'm also helped that Larry Wall has been doing active code review of the Perl 6 code over on Rosetta Code, a site I run; it's nice to have an active source of idiomatic code for understanding the language.
Geez, he's right, I've been using things like grep and gcc just because I'm familiar with them and they perform the task at hand. Time to upgrade to the hip and new version that does the same damn thing in a slightly different way!
Not that I'm against progress, but it's a matter of weighing the hassle against the gains. Forcing the new kids to learn the old tools can be annoying, but good for them. Likewise, showing grandpa that there's a diff with side-by-side comparisons is probably a good idea.
Don't forget bitrot. Enough other people move to $new_tech, and those of us who were productive with $old_tech suddenly see things break.
Usually ships within 2 to 6 months. Ships from and sold by Amazon.com. Gift-wrap available.
Also, Slashdot's referral code is broken. I believe they now require the URL to be signed using a private key. "/ref=nosim/?tag=slashdot0c-20" is insufficient.
If these device will accelerate to and beyond the average velocity of the volume of gas it sits in, what prevents it from accelerating from a dead stop in a still volume of air?
This really sounds like a perpetual motion scheme.
Basically the net affect of all this is that you have to be a Wikipedia etiquette expert to hope to make any changes of substance - or you can expect hours of work to be thoughtlessly reverted as part of petty jealousies and personal POV dominions.
One of the principle reasons I prefer to continue running my own wiki, despite the occasional suggestion that I seek to have my content moved to WP.
It's easily arguable, though, that the state of things on my wiki is little better. We have almost no rules. I hate rules. I hate that rules cannot be defined to fully reflect their intent. I hate that there are people who, when handed a framework of rules, will leverage those rules in violating the rules' own intent.
As a result, we have very few rules, and they're not very well documented. I work to maintain site structure and infrastructure, watch wiki activity, and try to step in only when discussion has gone from productive to destructive. Sometimes it's managing a miscommunication. Other times, it's acting as a damper when tempers are high. Still other times, it's making a declarative decision to resolve an impasse.
I've got a couple hundred active users making up an interesting, diverse and vibrant community. I actively encourage advocacy, but I hardly ever see advocates sparking against each other. My wiki is mostly what my users make of it. The biggest problem I face? New users, assuming (or needing) some rule structure, don't always figure out what to do.
So, in contrast to WP, I encourage advocacy, and have a top-down imperative approach to management that I only use on rare occasions. However, I also have a much more constrained problem domain, and the wiki isn't moving so fast that I often miss addressing problems before they're irreperable.
The 'benevolent dictator' isn't a long-term solution in general politics, of course. Even barring other considerations, I won't live forever, so my wiki necessarily can't have me forever.
In the end I guess it is kind of like a cult or religion. We have the weekly bible study, the prayer list, and even show up on college campuses to evangelize and spread the good word.
Heh. That's far more formal than the meetings I run. The meetings I anchor are explicitly Linux-associated only in that the primary attendee draw comes from the local LUG. More or less, if you're interested in learning about or chatting about a technical subject, or want to show-and-tell your latest project, or just want to listen in while a bunch of geeks talk geek, you're gold.:)
The evangelizing, well, that's more the Ubuntu guy's thing.:)
Earlier this year, I started anchoring* a 4-hour social meeting every Saturday for the local LUG. I show up at a coffee shop for a certain time range, and anyone who wants to show up can. No agenda, no rules (except 'don't get us kicked out of the venue'), just socializing among geeks with some common interests. So far, it's been pretty much constructive, and we've had people in the area overhear us and ask us questions. Last week, we chatted about physical computer security, programming, audio encoding, and the passive {VGA|USB|etc}-to-Cat5 media changers one guy built. All in all, a good face for the community.
I highly recommend the format.
* Meaning that even if nobody else shows up, I'll be there, so people won't choose not to go because of a chance that there might not be anyone there.
I love Linux on all my systems at home. I enjoy using Windows 7+Visual Studio at work, and know my registry intimately. I call 'troll' on the PCWorld article. Does that still make me one an ideologue?
By the time I left community college three years ago, encountering non-geeks who use Linux was no longer a surprise. Some time this year, I stopped being surprised at seeing Linux installed on laptops in coffee shops. Does that make me an ideologue?
I've seen support for Linux in commercial games and applications grow to the level Macs were at prior to the iPhone explosion. I've seen the number of non-Linux-compatible websites drop dramatically, thanks to improvements in browser technology. My WoW-playing fiancee was using Linux exclusively before I met her.
I still call 'troll' on the PCWorld article. Does that still make me an ideologue?
That was my thought. Microsoft issued a hotfix for Visual Studio 2008 last year that corrected a security vulnerability in their ATL libraries. (This is the same hotfix that, if you installed it and VS2008's SP1 in a bad sequence, you'd screw over the install. I was up all night on that one. *sigh*)
The problem? This security vulnerability was in a C++ template, which means that the bug is stuck permanently within any program compiled against it. It's not like the CRT or MFC shared libraries which can be replaced via Windows Update or similar.
If I read the git patch correctly, if said root process has a memory-mapped page coincident with a non-root process, and the non-root process can write to said memory mapped region (via having it memory mapped into their own process), then said non-root process can affect the behavior of the root process.
What was broken, and appears to have been corrected, is that an application's *stack* could grow into a memory-mapped page and corrupt the data in the root process while it's at it. (The stack is a piece of memory that hold data about the functions currently executing in a particular thread in your program.)
(enter educated guess section; I spend most of my time coding userland apps on Windows, not Linux.)
The case where this seems most possible to exploit is the loading of shared libraries. I don't know if the same mmap mechanism is used by the kernel, though. While it's entirely probable that writing to that region is protected, so long as the application is doing so under its own memory privilege level, it's possible that there's a syscall into the kernel that expands a thread's stack when the allocated memory for that stack is nearly exhausted. The syscall's operations run with kernel privileges, and it looks like the stack page allocator wasn't sufficiently checking the properties of the userland address it was allocating stack into.
Imagine that the guy who wrote the code is the royal, snobbish jerk who always thinks his code is better than anything else. Realize that, at some point, he's going to make a change that will change the way the component behaves, and will yet again break your code that uses that component. Don't let him get away with it. Let your fingers pound as you write code to check for the smallest fault. Let your lips curl in a snarl as you feed it poisoned data. Relish in the thought that you can catch him in every slightest mistake. Think of all those things that might not think to catch in the future. Not just the important stuff that defines the role of the component, but those little things that some people might call "implementation details".
Also remember that he's the same jerk who wrote those unit tests that screwed you over all those times. Don't just pay it back; pay it forward.
I mean, he traded in his existing hardware and installs for a Win7+iPad+WP7 combination.
As far as cross-platform open source software goes, there are a lot of rough edges in that vicinity.
There's a lot of good open-source software for Windows, but there isn't as much good open-source software that runs well on both Windows and other platforms. If you spend time on a variety of platforms, it becomes tricky to find a comfortable arrangement of software that works well on each. I'm a Linux guy outside work**, but my day job is coding C++ on Windows, and I can speak with experience on the difficulty of finding good client-side software that works in both environments.
It's going to be a bit uncomfortable settling into using Windows as a personal OS if his preferred tools don't run well or at all on it. Discomfort like that leads to bug reports and change.
* Or so I've been told by Ruby developers. I haven't had occasion to write in Ruby myself.
** Three Debian servers (one router and Rosetta Code's two VPS nodes), a Debian desktop (fiancee's), an Ubuntu HTPC(built by fiancee), and fiancee's Ubuntu laptop, my Arch laptop and my Gentoo desktop.
I'm half-tempted to set up a Gentoo VM and set CFLAGS="-Dfoo=bar" in make.conf.
I also haven't followed E development, but if 1.0 means "feature complete", then perhaps they simply reached their target? Or maybe they simply hit a baseline flexible enough that they can tack on whatever they like afterward, akin to how future "versions" of OpenGL use extension/capabilities listings.
Simple description: Out-of-sight costs are out-of-mind. Financial concerns for the professional programmer mean meeting deadlines under project requirement constraints. That means getting it out the door quickly.
Personal concerns for hobbyist programmers include boredom; if it's not slow work and uninteresting, it's not worth their time.
As for write-once, run-once...blame the hyperfocus on app stores. With app stores, you don't want to invest a lot of developer time creating a project, because there's an arbitrary axe ready to come down on something your company spent two months getting perfect. Once past the arbitrary axe, with as much competition as there is, if someone finds your app even the slightest bit unsatisfactory, the barrier to trying something else is slim to none.
That's great for consumers, because out of dozens of options, one of them will be just right, and it'll be cheap; the developer won't have wanted to invest a lot of his time, because he might not have landed single sale in the first place. He'll either have been talented enough to get it right early, or he'll simply have been lucky.
Limited to your local desktop's CPU cores, written in C or C++? You probably want to look at OpenMP, probably combined with some compiler intrinsics for vector math. (Or you can use a third-party library which already does things like that.)
I'll note that, limiting yourself to your desktop's CPU cores cripples even the average web-targeted netbook. You'd be much better off delegating the number crunching to your GPGPUs. (Even my desktop's HD3200 integrated video chipset ought to be able to trounce my Phenom 9650 for a problem like that.)
Efficient use of parallel resources depends a great deal on the nature of the problem you want to solve. As the most demanding consumers of parallel resources push for even more capacity, more tools are developed. The more tools that get developed, the more complicated the problem is discovered to be.
There are efforts to take different approaches on the problem, primarily (from what I've seen) in developing alternate programming languages that try to neatly solve those problems that existing programming languages have difficulty with, but they tend to require thinking about problem solving from a vastly different perspective, and have their own systemic complexities and weaknesses.
In other words, in the area of parallel computation, programming is experiencing an even greater tower-of-Babel event than any other area of programming I'm aware of. This extends from libraries to language extensions, to languages and on through models of programming.
For which processor classes, and which problem domains? The more flexibility you want, the more you'll sacrifice in efficiency/engineer-time or efficiency/computer-time.
If you're looking for Perl 6 coders, you might try their IRC channel, #perl6 on Freenode.
I've been playing around with Perl 6 a little this week. Rakudo works well enough that I'll be using Perl 6 where I've previously been using Perl. I find it useful to follow the Perl 6 Planet, as it has a bunch of Perl 6 developers' perspectives and musings as they use the langauge. (For example, one guy wrote his blogging engine in Perl 6, and commented on speed differences between a couple Perl 6 implementations.)
I'm also helped that Larry Wall has been doing active code review of the Perl 6 code over on Rosetta Code, a site I run; it's nice to have an active source of idiomatic code for understanding the language.
Geez, he's right, I've been using things like grep and gcc just because I'm familiar with them and they perform the task at hand. Time to upgrade to the hip and new version that does the same damn thing in a slightly different way!
Not that I'm against progress, but it's a matter of weighing the hassle against the gains. Forcing the new kids to learn the old tools can be annoying, but good for them. Likewise, showing grandpa that there's a diff with side-by-side comparisons is probably a good idea.
Don't forget bitrot. Enough other people move to $new_tech, and those of us who were productive with $old_tech suddenly see things break.
Wait...this sounds like it's just a couple half-steps shy of an automated, app-specific chrooting system.
Concerns about outdated libs aside, that sounds...awesome.
And then it happens you don't have the 'programname-doc' package installed, so 'info' loads up the man page.
Help! I'm stuck iterating through a self-referential linked-list!
Quoth the Amazon page:
Usually ships within 2 to 6 months.
Ships from and sold by Amazon.com. Gift-wrap available.
Also, Slashdot's referral code is broken. I believe they now require the URL to be signed using a private key. "/ref=nosim/?tag=slashdot0c-20" is insufficient.
If these device will accelerate to and beyond the average velocity of the volume of gas it sits in, what prevents it from accelerating from a dead stop in a still volume of air?
This really sounds like a perpetual motion scheme.
Some companies already do. Java is more popular in the enterprise market, though, while Ada is more popular in the embedded market.
Basically the net affect of all this is that you have to be a Wikipedia etiquette expert to hope to make any changes of substance - or you can expect hours of work to be thoughtlessly reverted as part of petty jealousies and personal POV dominions.
One of the principle reasons I prefer to continue running my own wiki, despite the occasional suggestion that I seek to have my content moved to WP.
It's easily arguable, though, that the state of things on my wiki is little better. We have almost no rules. I hate rules. I hate that rules cannot be defined to fully reflect their intent. I hate that there are people who, when handed a framework of rules, will leverage those rules in violating the rules' own intent.
As a result, we have very few rules, and they're not very well documented. I work to maintain site structure and infrastructure, watch wiki activity, and try to step in only when discussion has gone from productive to destructive. Sometimes it's managing a miscommunication. Other times, it's acting as a damper when tempers are high. Still other times, it's making a declarative decision to resolve an impasse.
I've got a couple hundred active users making up an interesting, diverse and vibrant community. I actively encourage advocacy, but I hardly ever see advocates sparking against each other. My wiki is mostly what my users make of it. The biggest problem I face? New users, assuming (or needing) some rule structure, don't always figure out what to do.
So, in contrast to WP, I encourage advocacy, and have a top-down imperative approach to management that I only use on rare occasions. However, I also have a much more constrained problem domain, and the wiki isn't moving so fast that I often miss addressing problems before they're irreperable.
The 'benevolent dictator' isn't a long-term solution in general politics, of course. Even barring other considerations, I won't live forever, so my wiki necessarily can't have me forever.
I missed articles like these.
In the end I guess it is kind of like a cult or religion. We have the weekly bible study, the prayer list, and even show up on college campuses to evangelize and spread the good word.
Heh. That's far more formal than the meetings I run. The meetings I anchor are explicitly Linux-associated only in that the primary attendee draw comes from the local LUG. More or less, if you're interested in learning about or chatting about a technical subject, or want to show-and-tell your latest project, or just want to listen in while a bunch of geeks talk geek, you're gold. :)
The evangelizing, well, that's more the Ubuntu guy's thing. :)
Earlier this year, I started anchoring* a 4-hour social meeting every Saturday for the local LUG. I show up at a coffee shop for a certain time range, and anyone who wants to show up can. No agenda, no rules (except 'don't get us kicked out of the venue'), just socializing among geeks with some common interests. So far, it's been pretty much constructive, and we've had people in the area overhear us and ask us questions. Last week, we chatted about physical computer security, programming, audio encoding, and the passive {VGA|USB|etc}-to-Cat5 media changers one guy built. All in all, a good face for the community.
I highly recommend the format.
* Meaning that even if nobody else shows up, I'll be there, so people won't choose not to go because of a chance that there might not be anyone there.
I love Linux on all my systems at home. I enjoy using Windows 7+Visual Studio at work, and know my registry intimately. I call 'troll' on the PCWorld article. Does that still make me one an ideologue?
By the time I left community college three years ago, encountering non-geeks who use Linux was no longer a surprise. Some time this year, I stopped being surprised at seeing Linux installed on laptops in coffee shops. Does that make me an ideologue?
I've seen support for Linux in commercial games and applications grow to the level Macs were at prior to the iPhone explosion. I've seen the number of non-Linux-compatible websites drop dramatically, thanks to improvements in browser technology. My WoW-playing fiancee was using Linux exclusively before I met her.
I still call 'troll' on the PCWorld article. Does that still make me an ideologue?
Yeah but the odds of running into BO in real life is slim to none
You've never actually been in a college computer lab, have you? I worked in one for five years, and sometimes I still think I pick up a whiff.
Wait...they didn't already have a guard page? I kinda assumed that was already there. Ow.
*marks self down as "needs improvement" in patch reading comprehension skills*
That was my thought. Microsoft issued a hotfix for Visual Studio 2008 last year that corrected a security vulnerability in their ATL libraries. (This is the same hotfix that, if you installed it and VS2008's SP1 in a bad sequence, you'd screw over the install. I was up all night on that one. *sigh*)
The problem? This security vulnerability was in a C++ template, which means that the bug is stuck permanently within any program compiled against it. It's not like the CRT or MFC shared libraries which can be replaced via Windows Update or similar.
If I read the git patch correctly, if said root process has a memory-mapped page coincident with a non-root process, and the non-root process can write to said memory mapped region (via having it memory mapped into their own process), then said non-root process can affect the behavior of the root process.
What was broken, and appears to have been corrected, is that an application's *stack* could grow into a memory-mapped page and corrupt the data in the root process while it's at it. (The stack is a piece of memory that hold data about the functions currently executing in a particular thread in your program.)
(enter educated guess section; I spend most of my time coding userland apps on Windows, not Linux.)
The case where this seems most possible to exploit is the loading of shared libraries. I don't know if the same mmap mechanism is used by the kernel, though. While it's entirely probable that writing to that region is protected, so long as the application is doing so under its own memory privilege level, it's possible that there's a syscall into the kernel that expands a thread's stack when the allocated memory for that stack is nearly exhausted. The syscall's operations run with kernel privileges, and it looks like the stack page allocator wasn't sufficiently checking the properties of the userland address it was allocating stack into.
(end educated guess section; I'm probably wrong, anyway.)
Imagine that the guy who wrote the code is the royal, snobbish jerk who always thinks his code is better than anything else. Realize that, at some point, he's going to make a change that will change the way the component behaves, and will yet again break your code that uses that component. Don't let him get away with it. Let your fingers pound as you write code to check for the smallest fault. Let your lips curl in a snarl as you feed it poisoned data. Relish in the thought that you can catch him in every slightest mistake. Think of all those things that might not think to catch in the future. Not just the important stuff that defines the role of the component, but those little things that some people might call "implementation details".
Also remember that he's the same jerk who wrote those unit tests that screwed you over all those times. Don't just pay it back; pay it forward.
Why should I care about the scuttlebutt of the internet.
Says the guy commenting on a Slashdot article.