Its neither lightweight or scalable, at least when compared to PostgreSQL. MySQL usually runs somewhat fine until you have databases bigger than the memory defined for buffer_pool_size. At that point, you'll start having odd performance issues (presumably due to I/O). Also, for small databases, it seems (by my empirical experience - never benchmarked this specifically) the sweet spot for buffer_pool_size is about twice the total size of the database in disk. PostgreSQL works quite well even with 256Mb of memory.
Regarding scalability, well, this is a broad subject. At horizontal level, MySQL replication has a ton of issues and oddities (it is getting way better, but still there is a lot of work to be done). At a vertical level, well, if you start using it as a RDMS, you'll quickly find MySQL shortcomings: poor query planner, poor performance in complex join queries, shitty GIS support, no recursive transactions, _no_ "proper" stored procedure support (stored procedures are handled as macros and expanded inline in the queries). MySQL is great for some workloads, but not as a general RDBMS.
PhD is a degree for showing you can create something new, not as an expertise indicator.
I would strongly disagree on that. A PhD is a degree showing that you dominate at least some base concepts needed for the specific field activity, to the point where you can apply them to something vaguely practical/usable. You don't need a PhD in the field, to create something new, and most PhDs I know are actually unable to create something new, "by design" - generically speaking, the education system promotes learning of concepts and (to a certain extent) dogmas instead of touting critical thinking and criativity. Or maybe I just hang out with the wrong crowd.
Someone who doesn't have formal academic degree will regret not having a degree
I regret not having the experience of having a degree - the university, the slow-paced learning, the networking experience.
Graduate students doing research in mathematics are actually encouraged to learn mathematics on their own, in the direction they choose
Shure, pick a high-school dropout, give him a book about Calculus and see how it goes.
some consider teachers to be a hindrance in exploring mathematics.
Do tell, how many self-taught (other than algebra) modern-day matematicians you know of. I actually knew one, and I'd think he's the exception - by a long shot.
Besides, there is no such thing as proper mathematics.
Theoretically, hiring a PhD would give you some guarantee about what the programmer is capable of doing - you can expect him to know not only how 2nd degree equations work, but also the basics of transcendental functions and how to apply base concepts into real-life problems. Theoretically. In practice, shure, maybe most dropouts don't have the basis to understand a lot of stuff - but many PhDs don't understand it either. And some of them, while understanding it, are unable to put in in practice.
I'm one of the few (only?) completely self-taught developers on the company I work for (>100 developers). For most tasks, no "special" knowledge is needed - a monkey could do it. Even so, some academic folks struggle with concepts. For non-trivial, conceptual tasks, I'm usually at the top of the list of the guys to ask stuff. I've done stuff ranging from math coprocessor emulation to signal processing, image processing, 3d programming, embedded systems, compression algorithms, data processing/mining, etc. I'm probably not better than a good PhD (or a guy like me with proper academic background), but I'm way better than *a lot* of median ones.
I would recommend to anyone that wants to be serious either in programming or CS to get a degree - proper mathematics is something that is usually hard to learn without a teacher - but having expectations on a guy just because he has a degree is just stupid. As it is having great expectations regarding a high-school dropout.
Yeah, but the difference is, if something breaks, you need to stop whatever your doing to fix it.
It is not always an advantage... and I do prefer to work with my own resources than to rely on 3rd party "service" providers, but there are a lot of cases when choosing a provider is the sane approach.
I'm pretty sure you mean that, for the salary you wanted to pay you couldn't find any one local who was qualified enough.
Actually, no. Not only the negotiated salary is above average, but also we didn't have an initial cap on it - we wouldn't mind to pay more for talent.
Are you seriously saying that only people from non-industrialized countries have the intellectual and technical background to do certain jobs?
No, I'm saying people from "industrialized" countries (what a bullshit expression, most of the 1st world countries aren't that industrialized anymore) are more lazy and self-apologizing than from other countries. And it reflects on the quality of people coming out of the universities. In contrast, it is usally easier to find above average foreign professionals than local ones - you don't need to go to India. As an example, there are several eastern european countries with lots of talented professionals. And no, it is not always cheaper.
In most civilized countries the government *doesnt* hold a grudge over companies that hire foreign individuals. I do not know about Canada, but I do know about UK - as a foreigner (but as an EU citizen), I could find a job there _tomorrow_ (the actual time would be less than a week, but you get the idea) without their government giving 2 shits about it. If you happen to be living inside a shell, there is no unemployment in development currently - if you think so, you're on the shallow end of the pool, and you'll have problems, regardless of nationality.
Yeah thats their plan all along *sigh*
Thats almost the same as being a german developer and blaming romanians, portugueses, bulgarians, greeks and every other EU european country for being out of a job. Except that actually doesn't happen, because the problem is - there actually isn't enough talented people to meet demand. Both Facebook and Google can hire easily in EU (they do), but you can only go so far. If you're an american, that immigrant that gets the visa will pay taxes in US soil, it will contribute to your country's economy even if doing it at a lower rate. Creating artificial barriers will only drive companies to go overseas. And they will, sooner or later. Sooner than later.
I was involved in hiring several programmers for a specific project in Europe; It is on one of the cities with the lowest unemployment rates in the world. Every hired programmer is a foreigner. They are (usually) cheaper than locals, yes. But none of the locals we interviewed actually passed the technical interviews. Blame it on public education, TV or just family values - the truth is, industrialized countries all suffer the same problem, and its not (only) about cheap salaries - its about talent. And it is sorely lacking in many countries.
This,
Having a teacher that is capable of teaching the inner workings of any given operating system in detail is good. Having a teacher that is capable of doing that and explain the pitfalls on the design, the compromises taken, the optimization process, the decisions taken and why they were taken is gold. Most OS-related courses/classes I've seen are pure and utter crap, even on the rare cases that the teacher knows the stuff. Very few are capable of having both a birds-eye view of the system as a whole and know in detail every major subsystem of it.
On a related subject, my recent experience with hiring tells me that regardless of the quality of an IT-related course, very few students will retain relevant info with them, and most of them who will work on software development will make a career as monkeys on a shakesperean experience. And for those who stand out on the crowd, they will benefit way more from exposure to an enthusiastic guy who actually built something, than some academia fart teaching dogmas.
"Most" websites these days burn cycles on dynamic content just because, and so they're leaving a lot of cycle savings on the table for "developer convenience" that may turn out to not be convenience at all--the logic needs maintenance too.
In quantity, yes. In traffic, not even by a long shot.
But if you have millions of users with not quite the latest in hardware (a statistical inevitability, really) then you really should've made sure to not spend their cycles needlessly.
Scaling out something like you describe to millions of users is also a solved problem. The problem is, when you need millions of simultaneous users, or tens of millions of regular users. And sooner or later, the dataset size. And that's not solvable on the hardware side, you need software. You need smart software - and usually it is simpler to write smart software in higher level languages. And even then, resources are finite, and at that point the weak link is always bandwidth - that won't save you even with static resources.
I'm really saying that the given options suck and that there are better choices available outside the imposed solution space.
It's because performance is not the most important thing in web development.
Usually, performance at language level isn't relevant at all, except in some key components. Flexibility and how well you can translate the business logic into obvious, compact and maintainable code without having to implement trivial stuff over and over again. A good example is multibyte string support, and I'm shure you can easily find others.
that can re-use existing libraries
You _do_ know that every available function in C or C++ is from an existing, external library, right?
to do the trivial things that are needed of them
Preferably without buffer overflows, strange crashes without any useful information whatsoever and without trashing the memory and/or stored data. And delivered on time.
as for sheer speed (and needs to be at least easier than assembly)
Using assembly doesn't mean that the code will be faster. In fact, in the x86/amd64 world it would take a very skilled assembly programmer to generate better code than a modern C compiler.
Scaling out static content or cached dynamic content is a solved problem. Churning out meaningful data from huge datasets by following complex business logic in milisseconds is not - even with complex cache mechanisms. Even smaller-than-memory datasets can be a problem, if the business logic is complex enough. Think about it - a Xeon 5680 has a memory bandwidth of 32GB/s, so if you have a 100GB dataset in memory that requires complex processing, it will take some time - more than a couple of seconds. Since most people doesn't program in assembly, you also get the extra cost of whatever language was chosen to build the business logic. And the operating environment will also eat resources, resulting in delaying of execution. How do you solve that? With smarter algorithms. At this point, stuff stops being trivial - at least as trivial as you put it. And believe it or not, most complex sites are actually not static, but rather static-ish. You receive a (mostly) cached copy of the data you need. Even the resources like css and js (and sometimes js itself also implements business logic, but that's another discussion).
Because it is not a good business decision. That would imply that the whole board would have the shelf life of the (expensive) CPU. That would also imply that for each N board configurations and Y cpus, you'd have N*Y products, instead of a good set of N generics and a small set of Y specifics. The unsold boards that would become obsolete would also have the additional cost of having a valuable, but otherwise useless (because it is soldered in) CPU. Intel's premium market isn't the embedded segment where SbC's are the norm - its highly specialized integrated circuits (such as CPUs) and generic boards. Having them combined by solder would reduce their potential profit, not increase it.
How much room do they have to do that before 'Atom' evolves itself right out of its power envelope
That's why they reduce the gate size (22nm). You get a less power-demanding product, and at the same time you gain additional room for extra features.
or Core ULV parts start hitting the same TDPs as higher-power Atoms; but with much more headroom?
If you consider current Atoms and performance-per-watt, a latest-gen Core is probably more efficient than Atom. But on the other hand, they are way more complex processors, usually with bigger on-die cache, and way more expensive. There may be some overlap over "budget" processors (such as Celeron and the old Pentium D) on the new versions, but even then I don't think they will be direct competitors (as an example, how many easily upgradable Atom boards with ZIF-style socket have you seen?).
It's not easy to allocate memory for new objects and the more you do it the more memory fragmentation becomes an issue.
Its dead easy to allocate memory for new objects in nearly every OOP language I worked with. You're mistaking operating system calls with memory allocation calls - most languages implement their own heap management routines, not only because usually the OS will only give you 4Kb (or 4Mb) blocks, but also because it is way easier to use your own memory heap manager tuned to the specific requirements of your language.
Please don't do that, instead put everything in a single static method, which will only be called once and suffer no performance penalties.
Or just ditch OOP altogether. If you can solve a given problem easily using only/mostly static methods, you probably have no gain in using OO constructs.
Try getting a Director/VP/C-suite to understand why unmaintainable, shitty code sucks and hurts the business. Believe me, I've tried.
Me too. It works. Explain the cost of a business-made decision regarding deadlines in terms of maintenance down the line. How (in some cases) they'll need to re-implement it from scratch because its not a good foundation for a product (not flexible enough, not scalable, not maintainable, etc). If it is an online product, describe how defects caused by poor architectural design can lead to downtime/bad user experience/voiding of marketing efforts. Describe the problems specifically (pick 3 or 4 major blockers/issues your team agree with) and describe them to the management. Do not be condescending, and be prepared to give deadlines - like "we need 2 more weeks to iron out the kinks". Do not use expressions like "this is all pure shit and needs to be reimplemented from the ground up". Ask how much does it cost to lose a customer, how does it cost every hour of downtime because of easily fixed architectural problems. Explain that a flexible design usually shrinks the time to add production-level features. If the guy before you is a moron, explain to him how he is going to be crucified when the product crashes and burn, and remind him you'll send him an email with CC to his boss (if it exists) stating just that.
I've been on the management side for several years (but not currently), and what I can tell you is that most good programmers should learn that there is code that is "good enough". Proposing rewritings of critical/big chunks of an application is generally a bad idea, but sometimes is necessary. If you don't take in to account business requirements (like "what we have is good enough, we dont mind to hire extra programmers to maintain the mess), management will never take you seriously.
Because most projectors are basically a LCD/TFT screen with a stronger backlight (even if using reflection techniques). Imagine having a 35mm 2K/4K TFT screen, able to be used in projectors, plus the lighting for it - because everything else requires complex conversion optics.
The only non off-the-shelf component would be the optical equipment, and couldn't they retrofit the optics of existing 35mm projectors?
Actually, no. To get an actual watchable cinema screen, you need "professional" projector lamps, and those aren't "off the shelf", and they're more akin to vacuum tubes than to actual lamps (Xenon lamps). Keep in mind, color depth and fidelity is dictated by the quality of the lamp, even on a digital projector, and with a lifespan less than 1000 hours, they aren't cheap. Nor is the electricity. And if you use 35mm projectors, you'd need a 4k projector screen of the size of the 35mm frame - or complex optics to perform the upscaling/downscaling adjustment.
A 4k cinema DLP
That itself is very narrow minded. How about an Engineer running CAE software that needs to perform meshing or CAD manipulation at the same time?
Did I say my formula is the right one for everyone? No. I only said it works for me and for other people. But given that you mention CAD, I'd bet you have plenty more case uses with windows than with any other platform combined. And while today is common practice for eg. CNC machines (I had experience with both 3d milling machines and full-blown furniture-making ones, about a decade ago) to come with Linux, this is a recent trend and usually done to save money, not to increase flexibility.
How about people compiling large sets of code that need to work on other code? That's the strength of *nix, in multitasking.
I guess you skipped the part where I actually use *nix. And no, the strength of *nix isn't necessarily multitasking, that's why you have different schedulers on linux. Try CFS with a couple of thousand processes on a dual-core machine and see how fast it gets trashed. However, the choice of different schedulers and the fine tuning of them to specific multitasking requirements is a big strength (In windows this kind of finetuning is somewhat more difficult, and in some cases impossible - thats one of the reasons I don't use Windows on servers).
I run benchmark testing every year with the latest greatest Windows tuned however our windows admins like, against stock RH installs with no tuning.
Except that I'm not talking about server-side tasks. Again, you seem to have skipped the part where I actually use *nix (2 different operating systems, actually - both Linux and BSD). I couldn't care less about X.
For you, why not do what most *nix guys do and run a TS session on Linux?
One of the reasons is that every free/oss TS client for Linux is crappy as hell, and I also don't like the font rendering in X. Other reason is that I sometimes need color management capabilities, and software able to use color workflow - from input to printer. I've had also issues with keyboard handling, and of course, resource mapping (audio, filesystem, printers, etc).
You choose the alternative for some reason. Seems obtuse to me, but then again I run KDevelop more than Eclipse.
I choose what makes me confortable and able to produce more. The same way I don't criticize other's choice in desktop operating systems. OS are a tool, like everything else - a way to get work done.
Back to your first point, the reason for the debate regarding Windows is that people stated *nix was inferior in every way.
I actually never said that. What I said is that X is still a crappy solution for multi-monitor support. Aparently for some reason, everything that runs on Linux cannot have defects. I do find somewhat amusing people getting up in arms because I choose to use windows for desktop, and how *nix is superior because their Linux is magical. Well, I actually use Unix operating systems (FreeBSD and OpenBSD), and not some *nix clone - for more than a decade.
To the second point about marketing, the difference is that MS pays a shitload of money to advertise, threatens vendors and BSA audits when people advertise others,
Yes I buy everything I see on TV. I use Microsoft products because they advertise, not because they allow me to get work done. Guess what? One of the biggest Linux supporters also pays a shitload of money - IBM. Oddly enough, my Unix of choice (FreeBSD) has almost zero value as a buzzword.
It's yet another shitty business practice by MS, which is honestly a big reason that so many people with IT knowledge hate the company.
Many people with IT knowledge use the same references and get the same points of view. Its called herd mentality. It happens in every field of expertise. Microsoft do
Seems fine on Fedora/centos/RHEL/debian/suse/solaris but the majority of stuff here uses the downloaded driver from nvidia
Are you using nvidia funcionality to provide multiple monitor support, or just X-related options? Maybe that is the difference.
Even if the above happens a lot and the ubuntu configuration is a greater mess than I've ever seen you've still got to find a lot more to get that "shit ton of problems".
So, first you complain that there are no issues. I present you a couple of them (off the top of my head), and now you complain they are not enough. I could say that most GUI applications in X suck in multiple monitors (how many times the file open dialog opens on the wrong screen?) But yeah, this kind of "ping-pong" discussion is usually pointless, as you'll try to counter facts with the "works fine here" argument.
Please keep in mind that a lot of readers here are also familiar with flaky multi-monitor problems on other systems. Win7 is pissing me off with that at this point (resolution changes and screen location switches on a 3 head two card system that behaves perfectly when booted into linux)
I could borrow from your tone and say that because I never had issues with it, you're spreading bullshit. I don't know if "a lot of readers" have that problem (only you replied to this specific thread), but I'm not surprised. Problems exist in every platform, and even if Windows was completely broken on multi-monitor support (and it isn't), how does that minimize X's problems?
and the native Win7 multi-monitor support is in some ways inferior to the matrox multi-monitor tools that would run on win2k.
It is also somewhat inferior to a cheap video matrix and an upscaler, if I wanted to build a video wall. I also cannot easily create a "U" shaped desktop with multiple monitors. On the other hand, seems to work quite well in 2 or 3 monitor setup (aparently you do have issues with it, thats fair - I'm not claiming its perfect) without most of the quirks I pointed out in X.
The nvidia tools take away all of the pain on the quatro systems but those options are not available any more on the cheaper cards - so win7 multi-monitor support just suddenly got worse than you could get on the same hardware on XP.
Are you blaming the operating system for lacking a feature available on specific versions of the manufacturer drivers? Wow,
Sometimes the monitor and/or the available resolutions aren't properly detected. If you unplug a working monitor and plug another with different resolution, sometimes it fails to detect the new one. I've seen a strange issue on Ubuntu where, in certain conditions, if you unplug a monitor on a dual setup, you'd lose both screens. Then you have z-index and modal dialogs - sometimes, apps running on secondary displays that generate modal dialogs will display the modal dialog on the wrong monitor, but with a correct Z-index.
Where I work we have probably more than one hundred dual-monitor setups and some of these issues are pretty common.
Not really. Eg. my EEPC 900A (linux version) had a ton of issues with it, specially with video projectors. Only Ubuntu would work out-of-the-box in a satisfactory manner. Even today, where I work, we have more than one hundred dual-monitor setups for developers running mostly Ubuntu and sometimes some weird shit happens (like losing both screens when you unplug something). Not to mention the problems with modal dialogs - modal messages on secondary displays sometimes appear on the primary screen with the same Z-index of the application (more often than not, below another window). So, apparently we have a different definition of "easy".
Every site has had a percentage of their technical staff switch to either Linux or MacOS over Windows
And switched one set of problems by others, because no software is perfect.
The point is, that most people only know Windows. That is not the same thing as Windows being better.
The whole discussion wasn't about "most people". It was about specific flaws and their impact on productivity. I actually use Windows as a desktop because not only X has some issues that make me unconfortable (one of them is font rendering), but also because I have almost no need for *nix GUI programs. Everything I need related to *nix is a terminal away, and with multiple flavors (Linux and BSD). What advantage would I gain in using Linux or whatever instead of windows? In my case, none - I'd lose flexibility, because in addition to the ton of software available for *nix, I can also run windows software.
Average users are ignorant, and media ensures that they stay that way.
One could say that average computer users (regardless of operating systems) are usually pretty narrow minded when it comes to technology. The OS is a tool as any other tool. It has strengths and weaknesses. And while you may argue that one is "better" than the other (at least for the kind of work you do), its a bit like having a hammer specialist laughing at you because you purchased the first one you saw at the store.
You would be amazed at how much people want to learn about alternatives to Windows and how easily they can pick up KDE.
Until they need to do someting non-trivial. Like copying formatted text from eg. the browser and paste it on any given word processing program, in a way it doesn't lose formatting. Or copying a vector drawing from Xsara or Inkscape and paste it on said program without having to think about widget libraries. Or when you install it on a low-res screen (or assumes wrong drivers) and you can't click the buttons on the dialog boxes because they're out of screen. Or having to deal with sub-par generic printer drivers that don't have all the features of your printer (this is also a manufacturers problem, and it also occurs sometimes in OSX). These are problems that exist "forever" and get in the way of getting work done.
If your work is mostly writing code and sometimes using the browser/email, you won't be pleased with windows. But for those tasks, you don't even need a windowmanager. I changed jobs recently, and now my job is mostly writing code. Almost everyone uses linux as their main DE, (except me and some other weird guys). I deliver more, faster and with better quality than most of the other programmers - which is odd, because we actually develop software to be run on linux servers. I use windows coupled with linux virtual machines and filesystem mapping, plus usually half a dozen ssh terminals. Why, you ask? Because it allows me to focus on my work instead of going out of my way trying to figure out why a specific feature isn't working as expected.
MySQL is lightweight and scalable.
Its neither lightweight or scalable, at least when compared to PostgreSQL. MySQL usually runs somewhat fine until you have databases bigger than the memory defined for buffer_pool_size. At that point, you'll start having odd performance issues (presumably due to I/O). Also, for small databases, it seems (by my empirical experience - never benchmarked this specifically) the sweet spot for buffer_pool_size is about twice the total size of the database in disk. PostgreSQL works quite well even with 256Mb of memory. Regarding scalability, well, this is a broad subject. At horizontal level, MySQL replication has a ton of issues and oddities (it is getting way better, but still there is a lot of work to be done). At a vertical level, well, if you start using it as a RDMS, you'll quickly find MySQL shortcomings: poor query planner, poor performance in complex join queries, shitty GIS support, no recursive transactions, _no_ "proper" stored procedure support (stored procedures are handled as macros and expanded inline in the queries). MySQL is great for some workloads, but not as a general RDBMS.
PhD is a degree for showing you can create something new, not as an expertise indicator.
I would strongly disagree on that. A PhD is a degree showing that you dominate at least some base concepts needed for the specific field activity, to the point where you can apply them to something vaguely practical/usable. You don't need a PhD in the field, to create something new, and most PhDs I know are actually unable to create something new, "by design" - generically speaking, the education system promotes learning of concepts and (to a certain extent) dogmas instead of touting critical thinking and criativity. Or maybe I just hang out with the wrong crowd.
Someone who doesn't have formal academic degree will regret not having a degree
I regret not having the experience of having a degree - the university, the slow-paced learning, the networking experience.
Graduate students doing research in mathematics are actually encouraged to learn mathematics on their own, in the direction they choose
Shure, pick a high-school dropout, give him a book about Calculus and see how it goes.
some consider teachers to be a hindrance in exploring mathematics.
Do tell, how many self-taught (other than algebra) modern-day matematicians you know of. I actually knew one, and I'd think he's the exception - by a long shot.
Besides, there is no such thing as proper mathematics.
You understood perfectly my point.
Disclaimer: I'm a high-school dropout.
Theoretically, hiring a PhD would give you some guarantee about what the programmer is capable of doing - you can expect him to know not only how 2nd degree equations work, but also the basics of transcendental functions and how to apply base concepts into real-life problems. Theoretically. In practice, shure, maybe most dropouts don't have the basis to understand a lot of stuff - but many PhDs don't understand it either. And some of them, while understanding it, are unable to put in in practice.
I'm one of the few (only?) completely self-taught developers on the company I work for (>100 developers). For most tasks, no "special" knowledge is needed - a monkey could do it. Even so, some academic folks struggle with concepts. For non-trivial, conceptual tasks, I'm usually at the top of the list of the guys to ask stuff. I've done stuff ranging from math coprocessor emulation to signal processing, image processing, 3d programming, embedded systems, compression algorithms, data processing/mining, etc. I'm probably not better than a good PhD (or a guy like me with proper academic background), but I'm way better than *a lot* of median ones.
I would recommend to anyone that wants to be serious either in programming or CS to get a degree - proper mathematics is something that is usually hard to learn without a teacher - but having expectations on a guy just because he has a degree is just stupid. As it is having great expectations regarding a high-school dropout.
Yeah, but the difference is, if something breaks, you need to stop whatever your doing to fix it.
It is not always an advantage... and I do prefer to work with my own resources than to rely on 3rd party "service" providers, but there are a lot of cases when choosing a provider is the sane approach.
I'm pretty sure you mean that, for the salary you wanted to pay you couldn't find any one local who was qualified enough.
Actually, no. Not only the negotiated salary is above average, but also we didn't have an initial cap on it - we wouldn't mind to pay more for talent.
Are you seriously saying that only people from non-industrialized countries have the intellectual and technical background to do certain jobs?
No, I'm saying people from "industrialized" countries (what a bullshit expression, most of the 1st world countries aren't that industrialized anymore) are more lazy and self-apologizing than from other countries. And it reflects on the quality of people coming out of the universities. In contrast, it is usally easier to find above average foreign professionals than local ones - you don't need to go to India. As an example, there are several eastern european countries with lots of talented professionals. And no, it is not always cheaper.
In most civilized countries the government *doesnt* hold a grudge over companies that hire foreign individuals. I do not know about Canada, but I do know about UK - as a foreigner (but as an EU citizen), I could find a job there _tomorrow_ (the actual time would be less than a week, but you get the idea) without their government giving 2 shits about it. If you happen to be living inside a shell, there is no unemployment in development currently - if you think so, you're on the shallow end of the pool, and you'll have problems, regardless of nationality.
Yeah thats their plan all along *sigh*
Thats almost the same as being a german developer and blaming romanians, portugueses, bulgarians, greeks and every other EU european country for being out of a job. Except that actually doesn't happen, because the problem is - there actually isn't enough talented people to meet demand. Both Facebook and Google can hire easily in EU (they do), but you can only go so far. If you're an american, that immigrant that gets the visa will pay taxes in US soil, it will contribute to your country's economy even if doing it at a lower rate. Creating artificial barriers will only drive companies to go overseas. And they will, sooner or later. Sooner than later.
I was involved in hiring several programmers for a specific project in Europe; It is on one of the cities with the lowest unemployment rates in the world. Every hired programmer is a foreigner. They are (usually) cheaper than locals, yes. But none of the locals we interviewed actually passed the technical interviews. Blame it on public education, TV or just family values - the truth is, industrialized countries all suffer the same problem, and its not (only) about cheap salaries - its about talent. And it is sorely lacking in many countries.
Even more interesting is that the kernel for OSX is FreeBSD - you know, UNIX.
Its not. Its based on Mach. It has some FreeBSD and NetBSD parts, but the kernel is not from FreeBSD. Check http://en.wikipedia.org/wiki/OS_X
This,
Having a teacher that is capable of teaching the inner workings of any given operating system in detail is good. Having a teacher that is capable of doing that and explain the pitfalls on the design, the compromises taken, the optimization process, the decisions taken and why they were taken is gold. Most OS-related courses/classes I've seen are pure and utter crap, even on the rare cases that the teacher knows the stuff. Very few are capable of having both a birds-eye view of the system as a whole and know in detail every major subsystem of it.
On a related subject, my recent experience with hiring tells me that regardless of the quality of an IT-related course, very few students will retain relevant info with them, and most of them who will work on software development will make a career as monkeys on a shakesperean experience. And for those who stand out on the crowd, they will benefit way more from exposure to an enthusiastic guy who actually built something, than some academia fart teaching dogmas.
"Most" websites these days burn cycles on dynamic content just because, and so they're leaving a lot of cycle savings on the table for "developer convenience" that may turn out to not be convenience at all--the logic needs maintenance too.
In quantity, yes. In traffic, not even by a long shot.
But if you have millions of users with not quite the latest in hardware (a statistical inevitability, really) then you really should've made sure to not spend their cycles needlessly.
Scaling out something like you describe to millions of users is also a solved problem. The problem is, when you need millions of simultaneous users, or tens of millions of regular users. And sooner or later, the dataset size. And that's not solvable on the hardware side, you need software. You need smart software - and usually it is simpler to write smart software in higher level languages. And even then, resources are finite, and at that point the weak link is always bandwidth - that won't save you even with static resources.
I'm really saying that the given options suck and that there are better choices available outside the imposed solution space.
Such as?
It's because performance is not the most important thing in web development.
Usually, performance at language level isn't relevant at all, except in some key components. Flexibility and how well you can translate the business logic into obvious, compact and maintainable code without having to implement trivial stuff over and over again. A good example is multibyte string support, and I'm shure you can easily find others.
that can re-use existing libraries
You _do_ know that every available function in C or C++ is from an existing, external library, right?
to do the trivial things that are needed of them
Preferably without buffer overflows, strange crashes without any useful information whatsoever and without trashing the memory and/or stored data. And delivered on time.
as for sheer speed (and needs to be at least easier than assembly)
Using assembly doesn't mean that the code will be faster. In fact, in the x86/amd64 world it would take a very skilled assembly programmer to generate better code than a modern C compiler.
Scaling out static content or cached dynamic content is a solved problem. Churning out meaningful data from huge datasets by following complex business logic in milisseconds is not - even with complex cache mechanisms. Even smaller-than-memory datasets can be a problem, if the business logic is complex enough. Think about it - a Xeon 5680 has a memory bandwidth of 32GB/s, so if you have a 100GB dataset in memory that requires complex processing, it will take some time - more than a couple of seconds. Since most people doesn't program in assembly, you also get the extra cost of whatever language was chosen to build the business logic. And the operating environment will also eat resources, resulting in delaying of execution. How do you solve that? With smarter algorithms. At this point, stuff stops being trivial - at least as trivial as you put it. And believe it or not, most complex sites are actually not static, but rather static-ish. You receive a (mostly) cached copy of the data you need. Even the resources like css and js (and sometimes js itself also implements business logic, but that's another discussion).
Because it is not a good business decision. That would imply that the whole board would have the shelf life of the (expensive) CPU. That would also imply that for each N board configurations and Y cpus, you'd have N*Y products, instead of a good set of N generics and a small set of Y specifics. The unsold boards that would become obsolete would also have the additional cost of having a valuable, but otherwise useless (because it is soldered in) CPU. Intel's premium market isn't the embedded segment where SbC's are the norm - its highly specialized integrated circuits (such as CPUs) and generic boards. Having them combined by solder would reduce their potential profit, not increase it.
How much room do they have to do that before 'Atom' evolves itself right out of its power envelope
That's why they reduce the gate size (22nm). You get a less power-demanding product, and at the same time you gain additional room for extra features.
or Core ULV parts start hitting the same TDPs as higher-power Atoms; but with much more headroom?
If you consider current Atoms and performance-per-watt, a latest-gen Core is probably more efficient than Atom. But on the other hand, they are way more complex processors, usually with bigger on-die cache, and way more expensive. There may be some overlap over "budget" processors (such as Celeron and the old Pentium D) on the new versions, but even then I don't think they will be direct competitors (as an example, how many easily upgradable Atom boards with ZIF-style socket have you seen?).
It's not easy to allocate memory for new objects and the more you do it the more memory fragmentation becomes an issue.
Its dead easy to allocate memory for new objects in nearly every OOP language I worked with. You're mistaking operating system calls with memory allocation calls - most languages implement their own heap management routines, not only because usually the OS will only give you 4Kb (or 4Mb) blocks, but also because it is way easier to use your own memory heap manager tuned to the specific requirements of your language.
Please don't do that, instead put everything in a single static method, which will only be called once and suffer no performance penalties.
Or just ditch OOP altogether. If you can solve a given problem easily using only/mostly static methods, you probably have no gain in using OO constructs.
Try getting a Director/VP/C-suite to understand why unmaintainable, shitty code sucks and hurts the business. Believe me, I've tried.
Me too. It works. Explain the cost of a business-made decision regarding deadlines in terms of maintenance down the line. How (in some cases) they'll need to re-implement it from scratch because its not a good foundation for a product (not flexible enough, not scalable, not maintainable, etc). If it is an online product, describe how defects caused by poor architectural design can lead to downtime/bad user experience/voiding of marketing efforts. Describe the problems specifically (pick 3 or 4 major blockers/issues your team agree with) and describe them to the management. Do not be condescending, and be prepared to give deadlines - like "we need 2 more weeks to iron out the kinks". Do not use expressions like "this is all pure shit and needs to be reimplemented from the ground up". Ask how much does it cost to lose a customer, how does it cost every hour of downtime because of easily fixed architectural problems. Explain that a flexible design usually shrinks the time to add production-level features. If the guy before you is a moron, explain to him how he is going to be crucified when the product crashes and burn, and remind him you'll send him an email with CC to his boss (if it exists) stating just that.
I've been on the management side for several years (but not currently), and what I can tell you is that most good programmers should learn that there is code that is "good enough". Proposing rewritings of critical/big chunks of an application is generally a bad idea, but sometimes is necessary. If you don't take in to account business requirements (like "what we have is good enough, we dont mind to hire extra programmers to maintain the mess), management will never take you seriously.
Because most projectors are basically a LCD/TFT screen with a stronger backlight (even if using reflection techniques). Imagine having a 35mm 2K/4K TFT screen, able to be used in projectors, plus the lighting for it - because everything else requires complex conversion optics.
The only non off-the-shelf component would be the optical equipment, and couldn't they retrofit the optics of existing 35mm projectors?
Actually, no. To get an actual watchable cinema screen, you need "professional" projector lamps, and those aren't "off the shelf", and they're more akin to vacuum tubes than to actual lamps (Xenon lamps). Keep in mind, color depth and fidelity is dictated by the quality of the lamp, even on a digital projector, and with a lifespan less than 1000 hours, they aren't cheap. Nor is the electricity. And if you use 35mm projectors, you'd need a 4k projector screen of the size of the 35mm frame - or complex optics to perform the upscaling/downscaling adjustment. A 4k cinema DLP
That itself is very narrow minded. How about an Engineer running CAE software that needs to perform meshing or CAD manipulation at the same time?
Did I say my formula is the right one for everyone? No. I only said it works for me and for other people. But given that you mention CAD, I'd bet you have plenty more case uses with windows than with any other platform combined. And while today is common practice for eg. CNC machines (I had experience with both 3d milling machines and full-blown furniture-making ones, about a decade ago) to come with Linux, this is a recent trend and usually done to save money, not to increase flexibility.
How about people compiling large sets of code that need to work on other code? That's the strength of *nix, in multitasking.
I guess you skipped the part where I actually use *nix. And no, the strength of *nix isn't necessarily multitasking, that's why you have different schedulers on linux. Try CFS with a couple of thousand processes on a dual-core machine and see how fast it gets trashed. However, the choice of different schedulers and the fine tuning of them to specific multitasking requirements is a big strength (In windows this kind of finetuning is somewhat more difficult, and in some cases impossible - thats one of the reasons I don't use Windows on servers).
I run benchmark testing every year with the latest greatest Windows tuned however our windows admins like, against stock RH installs with no tuning.
Except that I'm not talking about server-side tasks. Again, you seem to have skipped the part where I actually use *nix (2 different operating systems, actually - both Linux and BSD). I couldn't care less about X.
For you, why not do what most *nix guys do and run a TS session on Linux?
One of the reasons is that every free/oss TS client for Linux is crappy as hell, and I also don't like the font rendering in X. Other reason is that I sometimes need color management capabilities, and software able to use color workflow - from input to printer. I've had also issues with keyboard handling, and of course, resource mapping (audio, filesystem, printers, etc).
You choose the alternative for some reason. Seems obtuse to me, but then again I run KDevelop more than Eclipse.
I choose what makes me confortable and able to produce more. The same way I don't criticize other's choice in desktop operating systems. OS are a tool, like everything else - a way to get work done.
Back to your first point, the reason for the debate regarding Windows is that people stated *nix was inferior in every way.
I actually never said that. What I said is that X is still a crappy solution for multi-monitor support. Aparently for some reason, everything that runs on Linux cannot have defects. I do find somewhat amusing people getting up in arms because I choose to use windows for desktop, and how *nix is superior because their Linux is magical. Well, I actually use Unix operating systems (FreeBSD and OpenBSD), and not some *nix clone - for more than a decade.
To the second point about marketing, the difference is that MS pays a shitload of money to advertise, threatens vendors and BSA audits when people advertise others,
Yes I buy everything I see on TV. I use Microsoft products because they advertise, not because they allow me to get work done. Guess what? One of the biggest Linux supporters also pays a shitload of money - IBM. Oddly enough, my Unix of choice (FreeBSD) has almost zero value as a buzzword.
It's yet another shitty business practice by MS, which is honestly a big reason that so many people with IT knowledge hate the company.
Many people with IT knowledge use the same references and get the same points of view. Its called herd mentality. It happens in every field of expertise. Microsoft do
Seems fine on Fedora/centos/RHEL/debian/suse/solaris but the majority of stuff here uses the downloaded driver from nvidia
Are you using nvidia funcionality to provide multiple monitor support, or just X-related options? Maybe that is the difference.
Even if the above happens a lot and the ubuntu configuration is a greater mess than I've ever seen you've still got to find a lot more to get that "shit ton of problems".
So, first you complain that there are no issues. I present you a couple of them (off the top of my head), and now you complain they are not enough. I could say that most GUI applications in X suck in multiple monitors (how many times the file open dialog opens on the wrong screen?) But yeah, this kind of "ping-pong" discussion is usually pointless, as you'll try to counter facts with the "works fine here" argument.
Please keep in mind that a lot of readers here are also familiar with flaky multi-monitor problems on other systems. Win7 is pissing me off with that at this point (resolution changes and screen location switches on a 3 head two card system that behaves perfectly when booted into linux)
I could borrow from your tone and say that because I never had issues with it, you're spreading bullshit. I don't know if "a lot of readers" have that problem (only you replied to this specific thread), but I'm not surprised. Problems exist in every platform, and even if Windows was completely broken on multi-monitor support (and it isn't), how does that minimize X's problems?
and the native Win7 multi-monitor support is in some ways inferior to the matrox multi-monitor tools that would run on win2k.
It is also somewhat inferior to a cheap video matrix and an upscaler, if I wanted to build a video wall. I also cannot easily create a "U" shaped desktop with multiple monitors. On the other hand, seems to work quite well in 2 or 3 monitor setup (aparently you do have issues with it, thats fair - I'm not claiming its perfect) without most of the quirks I pointed out in X.
The nvidia tools take away all of the pain on the quatro systems but those options are not available any more on the cheaper cards - so win7 multi-monitor support just suddenly got worse than you could get on the same hardware on XP.
Are you blaming the operating system for lacking a feature available on specific versions of the manufacturer drivers? Wow,
Sometimes the monitor and/or the available resolutions aren't properly detected. If you unplug a working monitor and plug another with different resolution, sometimes it fails to detect the new one. I've seen a strange issue on Ubuntu where, in certain conditions, if you unplug a monitor on a dual setup, you'd lose both screens. Then you have z-index and modal dialogs - sometimes, apps running on secondary displays that generate modal dialogs will display the modal dialog on the wrong monitor, but with a correct Z-index.
Where I work we have probably more than one hundred dual-monitor setups and some of these issues are pretty common.
Not really. Eg. my EEPC 900A (linux version) had a ton of issues with it, specially with video projectors. Only Ubuntu would work out-of-the-box in a satisfactory manner. Even today, where I work, we have more than one hundred dual-monitor setups for developers running mostly Ubuntu and sometimes some weird shit happens (like losing both screens when you unplug something). Not to mention the problems with modal dialogs - modal messages on secondary displays sometimes appear on the primary screen with the same Z-index of the application (more often than not, below another window). So, apparently we have a different definition of "easy".
Every site has had a percentage of their technical staff switch to either Linux or MacOS over Windows
And switched one set of problems by others, because no software is perfect.
The point is, that most people only know Windows. That is not the same thing as Windows being better.
The whole discussion wasn't about "most people". It was about specific flaws and their impact on productivity. I actually use Windows as a desktop because not only X has some issues that make me unconfortable (one of them is font rendering), but also because I have almost no need for *nix GUI programs. Everything I need related to *nix is a terminal away, and with multiple flavors (Linux and BSD). What advantage would I gain in using Linux or whatever instead of windows? In my case, none - I'd lose flexibility, because in addition to the ton of software available for *nix, I can also run windows software.
Average users are ignorant, and media ensures that they stay that way.
One could say that average computer users (regardless of operating systems) are usually pretty narrow minded when it comes to technology. The OS is a tool as any other tool. It has strengths and weaknesses. And while you may argue that one is "better" than the other (at least for the kind of work you do), its a bit like having a hammer specialist laughing at you because you purchased the first one you saw at the store.
You would be amazed at how much people want to learn about alternatives to Windows and how easily they can pick up KDE.
Until they need to do someting non-trivial. Like copying formatted text from eg. the browser and paste it on any given word processing program, in a way it doesn't lose formatting. Or copying a vector drawing from Xsara or Inkscape and paste it on said program without having to think about widget libraries.
Or when you install it on a low-res screen (or assumes wrong drivers) and you can't click the buttons on the dialog boxes because they're out of screen. Or having to deal with sub-par generic printer drivers that don't have all the features of your printer (this is also a manufacturers problem, and it also occurs sometimes in OSX). These are problems that exist "forever" and get in the way of getting work done.
If your work is mostly writing code and sometimes using the browser/email, you won't be pleased with windows. But for those tasks, you don't even need a windowmanager. I changed jobs recently, and now my job is mostly writing code. Almost everyone uses linux as their main DE, (except me and some other weird guys). I deliver more, faster and with better quality than most of the other programmers - which is odd, because we actually develop software to be run on linux servers. I use windows coupled with linux virtual machines and filesystem mapping, plus usually half a dozen ssh terminals. Why, you ask? Because it allows me to focus on my work instead of going out of my way trying to figure out why a specific feature isn't working as expected.