Why do they need a special OS X build? Shouldn't it build the same way it does on any UNIX?
Because Apple's video and GUI APIs are different then what KDE and Gnome use.
You really can only do "write once, compile everywhere" for libraries, console apps, and X. Once you're tying into the look and feel of an operating system and its core IO systems, you need to have platform specific code.
We serve lunch on-site -- so people have good opportunities to be engaged.
Careful here: You don't need to go gormet, but make sure to avoid the mistake of only serving hot dogs drenched in ketchup or ham sandwiches loaded with mayo.
Make sure there is enough variety so that vegetarians, picky eaters, people with food allergies, and religious restrictions can still have a good meal. Buffets are good. Having to choose between a mayo-drenched ham sandwich or a bag of sour cream potato chips is a great way to make someone's afternoon miserable.
The parent couldn't have said it better, but may I add:
Make sure your speakers aren't giving blatant advertisements for commercial products. While this is less likely to happen at academic conferences; some speakers at industry conferences will spend the entire time promoting their product or services. I'm okay with a speaker plugging a book or services, but when the topic is "adjusted" to be an infomercial; I walk out.
If you have less experienced speakers, (the parent has the luxury of picking the cream of the crop,) don't be afraid to "moderate." Make sure the speaker keeps good time so he/she doesn't spend 75% of his or her time on the beginning of the subject matter, and don't be afraid to remind a speaker that his/her time is running out.
Likewise, if you have less experienced speakers, don't be afraid to moderate questions from the audience if they tend to drift off topic or aren't timed well. (I can't tell you how aggravating it is to wait one hour while some doofus fields stupid questions that should wait until the end.)
That's their problem. The cost-benefit ratio of supporting those ancient systems (and enabling the defective IT departments that stick with them) just isn't worth it anymore. Let them have their Geocities-era sites and funky rendering while the rest of us enjoy the last decade's worth of progress.
Have you played with Google's Chrome Frame? It's a plugin that lets sites specify that IE should render them using Google's HTML-5 compliant rendering engine. You can even stick up a Flash-era "This site requires Chrome Frame" for IE users, but let all of the modern browsers go through.
I've been working on a web server that exposes a file manipulation API via AJAX with an automatically-generated JavaScript wrapper. What I found is that some kinds of operations really need some form of server-side business logic; so I added server-side JavaScript with automatic generation of an AJAX wrapper. In essence, I have a form of server-side JavaScript with a transparent RPC system for in-browser JavaScript.
What I've found is that server-side JavaScript is still in its infancy. (My Alpha Server likes crash a bit too much...) The point, however, is that server-side JavaScript allows for rapid development of applications because it lends itself naturally to a JSON-based RPC system that practically eliminates the complexities of serialization from languages like C, C#, Java, PHP, ect. This is especially useful because things like database queries can be pumped directly to the browser without having to write lots of data access code. Likewise, server-side JavaScript lets me quickly write glue code where my server's API would require too many back-and-forth calls; or where extending my server's API is a poor design choice.
Yes, I'm with you now. Only, I would say that C++ does provide the facilities to work around the field issue - you could, for example, send both the shared_ptr and a reference to the inner variable, and you hold both - provide them with a template class which constructs with both, and it drops away to almost nothing.
Which ultimately proves my point: That's too *&*^% complicated unless you're writing something that's CPU or RAM bound. If you're writing something that's disk-bound, or just isn't CPU / RAM intense, what you describe takes too much time to have a real ROI.
Now I'm confused - C++ shared_ptr most definitely does solve that - *providing* you hold a reference to the shared_ptr where you need it. In fact, it's really a non-issue - the memory is cleared up as soon as the last referrer falls out of scope. Not seeing where your problem lies with that behaviour.
That's fine for pointers on the stack, but I don't think that addresses pointers in fields (on the heap.) I also think it has issues with circular references and memory fragmentation. That's ultimately why some environments choose garbage collection over reference counting: to handle circular references that reference counting won't pick up, and to allow memory defragmentation that would "break" pointers.
This all comes down to one faulty but cherished premise (one of many held by today's business community, I might add): that complex, reliable applications can be built by minimally-skilled developers if we can, somehow, just put enough power into the tools. The problem is, the tools aren't the problem, it's the people. In the end, software development is as much an art as it is a science, and there really aren't enough artists to go around.
So I say to give great developers great tools. IMO, It's cheaper to buy $3-4k worth of tools for a handful of great developers instead of hiring 20 idiots.
So you had no experience with memory management and compiling of code, and you're surprised it took so much time?
Actually, I have plenty of experience with memory management and compiling. It's an order of magnitude slower in C/C++ then with compiled languages.
The project that I ran from had a 20-60 minute compile time. That's absurd given that a Python / Java / C# / Whatever version of the product would be just as fast yet have a much shorter compile time (and still require memory management.) It's kind of silly to pay expensive programmers to wait behind a long compile time when there isn't any tangible benefit to it.
Well, I won't dispute that you should always use the language that is best suited to you especially if it meets the requirements, and while I too have no love for the . and -> distinction, it's hardly a blocker to use.
Which now lets me describe my biggest pet peeve with Garbage Collected languages... (And which C / C++ doesn't solve.)
I often get to a point were I *know* a large chunk of memory should be collected; yet there's no good way to reliably check that the memory can be collected without a profiler. I really want something that I can put into Debug builds that throws some kind of error or warning if the memory is still in use.
When speed is a problem, Python programmers tend to try to optimize bottlenecks by algorithm improvements or data structure changes, using a JIT compiler such as Psyco, rewriting the time-critical functions in "closer to the metal" languages such as C, or by translating Python code to C code using tools like Cython.
But in the hands of the in-experienced or sloppy coder... they can unleash the most horrendous leak riddled code possible.
The same can happen in a garbage collected environment: Nothing will ever be collected!
There was a bug in version 1.0 of.Net where, if you used a calendar control, your entire window wouldn't be collected. If your window referenced other data, it wouldn't be collected as well.
Cause of the bug: The calendar control "forgot" to unregister its event handler for the "system colors change" event, thus keeping an active reference after the window was closed.
It's also important to understand that garbage collection isn't "magic" memory management. It's just meant to be less time consuming. This is because a poor programmer will still forget to release resources that need to be explicitly released and thus end up "leaking" memory.
Yup, I worked with that when it was appropriate. That's not the issue. The real issue is that, when using boost::shared_ptr, you need to treat memory on the heap and stack differently. It's kind of silly to worry about these things in a thin SOAP wrapper for a database where the database is the real bottleneck and the overhead of garbage collection is negligible.
The other issue that I failed to mention is that compiling C++ is often an order of magnitude slower then newer languages. This slow compile time is much more "expensive" then any lost sales due to requiring a slightly faster CPU and slightly more RAM.
I can give you another example: An AI researcher that I know of re-wrote newer versions of her algorithm in Java instead of C++. Even though garbage collection givers her some visible performance implications, she can program and test her algorithms much faster, which has tangible economic value for her company.
Let dumber people program and you end up with dumber programs. Way back in year 2000 I found that most of the Y2K bugs were actually from more recently written programs in dumbed down languages.
I don't see it that way.
After spending a few years in garbage collected land, I was assigned to work on a C++ application. The C++ application was a mere SOAP wrapper for a database, so it wouldn't have any noticeable performance advantages over an equivalent program written in a garbage collected language.
The problem that quickly became obvious to me, and why I ran away from the project, is that manual memory management is so time consuming; even as an expert programmer, that the "soft and easy" languages are more about letting great programmers get more things done in less time.
This is even the approach taken in Python; the recommendation is to write well-tuned libraries in C for the parts where C will increase performance. For parts where C is a waste of time, Python lets you not worry about silly details.
Facebook is trying to go public. About a month ago, one of their recruiters was trying to get me to sign an NDA for an on-site interview; and he refereed to their impending IPO as the justification for the NDA.
I dunno... Now that I have a cell phone, I have different priorities when I buy a watch. I no longer care about features or accuracy; I just want a watch that is indestructible and will last forever. As a result, my current watch has a metal band and uses no battery.
I also don't get the whole replacing alarm clock thing... Sometimes I use my phone as an alarm clock, but I still prefer my real alarm clock.
The low-budget solution: buy one server (like a Poweredge 2970) with like 16GB RAM, a combination of 15k and 7.2k RAID1 arrays, and 4hr support. Install a free hypervisor like Vmware Server or Xen, and P2V your oldest hardware onto it. Later on you can spend $$$$$ on clustering, HA, SANs, and clouds. But P2V of your old hardware onto new hardware is a cost-effective way to start.
Or, you can use Capacity Planner to determine what you really need.
The HTML control in Silverlight 4 is not a new embedded browser from Microsoft, but uses components from Internet Explorer on Windows, or Safari on the Mac, which means that the same content might render differently.
The only person to get all four tracks right is someone who listens to their headphones at pitifully low volumes and hasn't attended any rock concerts. We can think of two explanations. One, the subject has particularly sensitive ears, so doesn't need to turn the volume up high. Two, the subject hasn't wrecked their hearing through years of listening to a walkman/MP3 player at high volumes and/or seeing Motorhead at the Hammersmith Odeon. Arguably, both apply.
Which of course is at best a stretch and at worst simply untrue. There is no evidence that invention did not exist prior to patents and copyrights, or would cease without it. Its clear our current system goes way beyond protecting first movers, to the clear detriment of society as a whole and an unwarranted power shift to rights holders.
I agree that government should not get involved in petty copyright infringement. I do think there is a "happy medium" that could benefit both consumers and investors.
For example, trademark enforcement where a knock-off handbag manufacturer is allowed to manufacture as long as their bags don't display someone else's trademark could work. (Think of CVS's generic brands that obviously come from the same manufacturer that holds a trademark.) Likewise, government assistance in blocking piracy of new works of information could also work, as long as this protection is limited to the first few days, weeks, or months that a work of information is on the open market.
I couldn't resist: http://xkcd.com/676/
Actually I think that VLC has moved to QT for the interface so the GUI should port
I doubt that QT provides the video and audio abstraction needed. VLC does things like directly use the SPDIF, which is pretty low-level.
Why do they need a special OS X build? Shouldn't it build the same way it does on any UNIX?
Because Apple's video and GUI APIs are different then what KDE and Gnome use.
You really can only do "write once, compile everywhere" for libraries, console apps, and X. Once you're tying into the look and feel of an operating system and its core IO systems, you need to have platform specific code.
We serve lunch on-site -- so people have good opportunities to be engaged.
Careful here: You don't need to go gormet, but make sure to avoid the mistake of only serving hot dogs drenched in ketchup or ham sandwiches loaded with mayo.
Make sure there is enough variety so that vegetarians, picky eaters, people with food allergies, and religious restrictions can still have a good meal. Buffets are good. Having to choose between a mayo-drenched ham sandwich or a bag of sour cream potato chips is a great way to make someone's afternoon miserable.
In hopes of assisting others, I've started my own conference in order to boost the soft skills of computer professionals.
That's why no one is attending.
The parent couldn't have said it better, but may I add:
Make sure your speakers aren't giving blatant advertisements for commercial products. While this is less likely to happen at academic conferences; some speakers at industry conferences will spend the entire time promoting their product or services. I'm okay with a speaker plugging a book or services, but when the topic is "adjusted" to be an infomercial; I walk out.
If you have less experienced speakers, (the parent has the luxury of picking the cream of the crop,) don't be afraid to "moderate." Make sure the speaker keeps good time so he/she doesn't spend 75% of his or her time on the beginning of the subject matter, and don't be afraid to remind a speaker that his/her time is running out.
Likewise, if you have less experienced speakers, don't be afraid to moderate questions from the audience if they tend to drift off topic or aren't timed well. (I can't tell you how aggravating it is to wait one hour while some doofus fields stupid questions that should wait until the end.)
That's their problem. The cost-benefit ratio of supporting those ancient systems (and enabling the defective IT departments that stick with them) just isn't worth it anymore. Let them have their Geocities-era sites and funky rendering while the rest of us enjoy the last decade's worth of progress.
Have you played with Google's Chrome Frame? It's a plugin that lets sites specify that IE should render them using Google's HTML-5 compliant rendering engine. You can even stick up a Flash-era "This site requires Chrome Frame" for IE users, but let all of the modern browsers go through.
Shameless plug
I've been working on a web server that exposes a file manipulation API via AJAX with an automatically-generated JavaScript wrapper. What I found is that some kinds of operations really need some form of server-side business logic; so I added server-side JavaScript with automatic generation of an AJAX wrapper. In essence, I have a form of server-side JavaScript with a transparent RPC system for in-browser JavaScript.
http://objectcloud.com
What I've found is that server-side JavaScript is still in its infancy. (My Alpha Server likes crash a bit too much...) The point, however, is that server-side JavaScript allows for rapid development of applications because it lends itself naturally to a JSON-based RPC system that practically eliminates the complexities of serialization from languages like C, C#, Java, PHP, ect. This is especially useful because things like database queries can be pumped directly to the browser without having to write lots of data access code. Likewise, server-side JavaScript lets me quickly write glue code where my server's API would require too many back-and-forth calls; or where extending my server's API is a poor design choice.
Yes, I'm with you now. Only, I would say that C++ does provide the facilities to work around the field issue - you could, for example, send both the shared_ptr and a reference to the inner variable, and you hold both - provide them with a template class which constructs with both, and it drops away to almost nothing.
Which ultimately proves my point: That's too *&*^% complicated unless you're writing something that's CPU or RAM bound. If you're writing something that's disk-bound, or just isn't CPU / RAM intense, what you describe takes too much time to have a real ROI.
Now I'm confused - C++ shared_ptr most definitely does solve that - *providing* you hold a reference to the shared_ptr where you need it. In fact, it's really a non-issue - the memory is cleared up as soon as the last referrer falls out of scope. Not seeing where your problem lies with that behaviour.
That's fine for pointers on the stack, but I don't think that addresses pointers in fields (on the heap.) I also think it has issues with circular references and memory fragmentation. That's ultimately why some environments choose garbage collection over reference counting: to handle circular references that reference counting won't pick up, and to allow memory defragmentation that would "break" pointers.
This blurb is probably a bit more authoritative then me: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Reference_counting
This all comes down to one faulty but cherished premise (one of many held by today's business community, I might add): that complex, reliable applications can be built by minimally-skilled developers if we can, somehow, just put enough power into the tools. The problem is, the tools aren't the problem, it's the people. In the end, software development is as much an art as it is a science, and there really aren't enough artists to go around.
So I say to give great developers great tools. IMO, It's cheaper to buy $3-4k worth of tools for a handful of great developers instead of hiring 20 idiots.
So you had no experience with memory management and compiling of code, and you're surprised it took so much time?
Actually, I have plenty of experience with memory management and compiling. It's an order of magnitude slower in C/C++ then with compiled languages.
The project that I ran from had a 20-60 minute compile time. That's absurd given that a Python / Java / C# / Whatever version of the product would be just as fast yet have a much shorter compile time (and still require memory management.) It's kind of silly to pay expensive programmers to wait behind a long compile time when there isn't any tangible benefit to it.
Well, I won't dispute that you should always use the language that is best suited to you especially if it meets the requirements, and while I too have no love for the . and -> distinction, it's hardly a blocker to use.
Which now lets me describe my biggest pet peeve with Garbage Collected languages... (And which C / C++ doesn't solve.)
I often get to a point were I *know* a large chunk of memory should be collected; yet there's no good way to reliably check that the memory can be collected without a profiler. I really want something that I can put into Debug builds that throws some kind of error or warning if the memory is still in use.
From http://en.wikipedia.org/wiki/Python_%28programming_language%29:
When speed is a problem, Python programmers tend to try to optimize bottlenecks by algorithm improvements or data structure changes, using a JIT compiler such as Psyco, rewriting the time-critical functions in "closer to the metal" languages such as C, or by translating Python code to C code using tools like Cython.
But in the hands of the in-experienced or sloppy coder ... they can unleash the most horrendous leak riddled code possible.
The same can happen in a garbage collected environment: Nothing will ever be collected!
There was a bug in version 1.0 of .Net where, if you used a calendar control, your entire window wouldn't be collected. If your window referenced other data, it wouldn't be collected as well.
Cause of the bug: The calendar control "forgot" to unregister its event handler for the "system colors change" event, thus keeping an active reference after the window was closed.
It's also important to understand that garbage collection isn't "magic" memory management. It's just meant to be less time consuming. This is because a poor programmer will still forget to release resources that need to be explicitly released and thus end up "leaking" memory.
boost::shared_ptr
Yup, I worked with that when it was appropriate. That's not the issue. The real issue is that, when using boost::shared_ptr, you need to treat memory on the heap and stack differently. It's kind of silly to worry about these things in a thin SOAP wrapper for a database where the database is the real bottleneck and the overhead of garbage collection is negligible.
The other issue that I failed to mention is that compiling C++ is often an order of magnitude slower then newer languages. This slow compile time is much more "expensive" then any lost sales due to requiring a slightly faster CPU and slightly more RAM.
I can give you another example: An AI researcher that I know of re-wrote newer versions of her algorithm in Java instead of C++. Even though garbage collection givers her some visible performance implications, she can program and test her algorithms much faster, which has tangible economic value for her company.
Let dumber people program and you end up with dumber programs. Way back in year 2000 I found that most of the Y2K bugs were actually from more recently written programs in dumbed down languages.
I don't see it that way.
After spending a few years in garbage collected land, I was assigned to work on a C++ application. The C++ application was a mere SOAP wrapper for a database, so it wouldn't have any noticeable performance advantages over an equivalent program written in a garbage collected language.
The problem that quickly became obvious to me, and why I ran away from the project, is that manual memory management is so time consuming; even as an expert programmer, that the "soft and easy" languages are more about letting great programmers get more things done in less time.
This is even the approach taken in Python; the recommendation is to write well-tuned libraries in C for the parts where C will increase performance. For parts where C is a waste of time, Python lets you not worry about silly details.
Huh?
Facebook is trying to go public. About a month ago, one of their recruiters was trying to get me to sign an NDA for an on-site interview; and he refereed to their impending IPO as the justification for the NDA.
I didn't sign the NDA.
I dunno... Now that I have a cell phone, I have different priorities when I buy a watch. I no longer care about features or accuracy; I just want a watch that is indestructible and will last forever. As a result, my current watch has a metal band and uses no battery.
I also don't get the whole replacing alarm clock thing... Sometimes I use my phone as an alarm clock, but I still prefer my real alarm clock.
The low-budget solution: buy one server (like a Poweredge 2970) with like 16GB RAM, a combination of 15k and 7.2k RAID1 arrays, and 4hr support. Install a free hypervisor like Vmware Server or Xen, and P2V your oldest hardware onto it. Later on you can spend $$$$$ on clustering, HA, SANs, and clouds. But P2V of your old hardware onto new hardware is a cost-effective way to start.
Or, you can use Capacity Planner to determine what you really need.
if you really must replicate then get some more cheap boxes and replicate. it's cheaper and faster than virtual anything
Uhm, no. Physical-to-Virtual, also known as P2V, can turn an existing physical box into a VM with minimal or no downtime.
The HTML control in Silverlight 4 is not a new embedded browser from Microsoft, but uses components from Internet Explorer on Windows, or Safari on the Mac, which means that the same content might render differently.
Just use Google's Chrome Frame. Problem solved!
The only person to get all four tracks right is someone who listens to their headphones at pitifully low volumes and hasn't attended any rock concerts. We can think of two explanations. One, the subject has particularly sensitive ears, so doesn't need to turn the volume up high. Two, the subject hasn't wrecked their hearing through years of listening to a walkman/MP3 player at high volumes and/or seeing Motorhead at the Hammersmith Odeon. Arguably, both apply.
Which of course is at best a stretch and at worst simply untrue. There is no evidence that invention did not exist prior to patents and copyrights, or would cease without it. Its clear our current system goes way beyond protecting first movers, to the clear detriment of society as a whole and an unwarranted power shift to rights holders.
I agree that government should not get involved in petty copyright infringement. I do think there is a "happy medium" that could benefit both consumers and investors.
For example, trademark enforcement where a knock-off handbag manufacturer is allowed to manufacture as long as their bags don't display someone else's trademark could work. (Think of CVS's generic brands that obviously come from the same manufacturer that holds a trademark.) Likewise, government assistance in blocking piracy of new works of information could also work, as long as this protection is limited to the first few days, weeks, or months that a work of information is on the open market.