It's like when your telco, cabelco, or cell phone company offers 50% discount for new customers for the first year just to get them in the door. As for loyal customers who have been paying unjustifiably high bills on a regular basis, they don't get a cut; as a matter of fact they might see price increases to subsidize those new customer discounts.
It's precisely because infrastructure code is not visible to the end user that you have to sell that (supposedly elegant) infrastructure some other way. You need to explain what's going on behind the scenes and why it is important on the long term. Upper management will appreciate simple block diagrams explaining that this kind of infrastructure will give them a lot of flexibility and maintainability down the road, reducing the cost of change and bug fixes.
Documenting the backend is also important for other developers who will maintain this code after you. I've had to deal with hundreds of thousands of lines of code with no documentation whatsoever, and it's not pretty.
Finally, I want to mention that not giving the GUI enough attention from the beginning is not good also. I'm a believer that function and form are closely tied together. You can design the best infrastructure in the world, but slapping a GUI on top of it as an afterthought will result in crappy user experience. Also there are a lot of times where certain UI functions, although may seem trivial, actually translates to significant backend design changes. As you mentioned, the GUI is what the user interacts with, and to them it's actually the GUI that represents the application, so it *is* what the application is about to them.
It behaves like Adobe Reader in that it shows you a warning, unlike Foxit. Given this fact I recommend switching to it from Foxit (at least for the time being).
It's lightweight, fast, and has lots of nice features. It even allows you to save filled forms!
In most enterprise applications you'll be using multiple languages whether you like it or not:
- A multi-purpose high level language for n-tier apps (data access, domain logic, presentation): Java, C#, Ruby, Python - A database language: SQL - Web interface (if it's web-based): JavaScript, DHTML, Flash - Integration and Middleware: XML
As long as you're within one product boundary, one general purpose language is the way to go. Across products (from same vendor or from different vendors): different languages + well standardized protocols (XML or binary serialization) is the way to go. Mixing more than one general-purpose language in the same product is usually a bad idea IMO (unless the languages share a common framework; e.g. C# and VB.NET)
The thing that ties everything together, whether using one or more languages is the development process and tools:
- Source control (SubVersion) -> provides change tracking, branching, merging - Automated build environment (Ant, NAnt) -> can build code, database, tests with the push of a button - Continuous Integration (CruiseControl) -> detect and fix integration errors early - Unit Testing (xUnit) -> ensures predictable behaviour in the face of code changes - Bug tracking (Bugzilla) -> track defects, plan fixes - Documentation (Wiki, DocBook, code comments) -> inform your peers of your public APIs (i.e. how they can use what you have written), and possible extension points (how you can use what they have written); inform stakeholders how the system works (concepts, architecture, business scenarios); inform your users how to use your system properly
A good project manager ties everything together and keeps everyone on schedule.
As a bit of background, the original problem with Maclean's was not because they publish hate articles about Muslims, it's because that they refused to publish a response by the Muslim community to those articles.
From an article that was published in thestar.com:
"In our case, we have filed human rights complaints not because Maclean's published 19 articles about Muslims over two-and-a-half years that we judged to be defamatory, but because it refused to publish an adequate counterview when the Canadian Muslim community asked for one."
Congratulations. You've just proven how useless you are. Care to elaborate with a counter argument?
(Oh, and if every robot has to have an identical progenitor, who built the first 'God' robot?)
Well, that shows just how hung up you are on false premise that everything has to have a predecessor. The notion of a 'God' or a 'Creator' entails the that it's the source of everything, and that it has no predecessors (if it had then it wouldn't be a God).
So my argument to you is: If you cannot prove that everything has a predecessor then you can't claim that there is no single entity (read 'God') started it all. Likewise, I can't prove to you that there is a God who started it all, simply because it was not meant to be proven in the first place; otherwise we wouldn't be asked to have faith in God (lookup the term 'faith') because if it was provable then we wouldn't be having this argument.
And btw, believing in God doesn't necessarily mean I don't believe in science. It's not mutually exclusive. It just happens that I look at it from a different perspective. I also believe that evolution is a science fact, but I also believe that things don't evolve from nothing.
It boggles my mind when guys like you dump their crap on readers like that.
Not believing in something, like creationism, doesn't give you the right to describe all those who believe in the presence of a creator as morons or insane. You can make your point without trashing others, and you'd be well received, but refusing to hear but your own voice makes you completely useless and noisy.
That said, let me try to rectify some of the damage you made.
Assume there's another planet entirely filled with robots. Those robots are programmed to produce new robots through a very specific process and tools. This process and tools they use were defined by an earlier generation of less intelligent robots. That earlier generation was programmed to produce the necessary technology (tools & process) to generate the more sophisticated robots. But wait! That earlier generation must have had a prior generation that produced it as well, right?
Ok, let's keep back tracking where this all started. Do you think that this robotic world started as some atoms molecules gathered themselves and formed the first wire? And that those early wires gathered themselves and made connections to each others? And that diodes and transistors evolved from that? And those transistors decided to arrange themselves into complete circuits? Out of which a robot system eventually formed?
If you believe so, then I guess you know who's the moron.
This looks similar to RapidMind, which is a software development platform that, among other things, "Enables applications to run in a data-parallel way." (I'm not affiliated with them.)
As many people noted in this discussion, it's really hard to get everyone to agree on a standard tagging scheme. There are, however, good schemes for classifying content that can be used to standardize classification. Those include: controlled vocabularies (flat lists), taxonomies (trees) (e.g. Dewey, LC), ontologies, and topic maps[*] (graph-like structures). As you see the tagging model can be as simple as a list, or as complex as a graph of concepts with their associated relationships. Regardless of which scheme you use, you should use it within a metadata standard (e.g. Dublin Core, IEEE LOM), by allowing the subject field of the metadata record to take values only from the used classification scheme.
If a standard classification scheme is used, coupled with a metadata standard, I say we're much closer to having more consistent distributed content classification than with ad-hoc tagging.
[*] Check this article on "Metadata? Thesauri? Taxonomies? Topic Maps! Making sense of it all" by Lars Marius Garshol from Ontopia.
How can I do my thesis now? a university student asked on another Chinese website.
How did all grad students complete their theses before the Wikipedia era? As a matter of fact, grads don't refer to encyclopedias when doing research. They refer more often to the literature (books, scientific journals, conference proceedings, etc.)
Of coures Wikipedia can help a lot when you want to have a quick reference on subject matter, but there are also much more comprehensive avenues of research that can be used.
It's like when your telco, cabelco, or cell phone company offers 50% discount for new customers for the first year just to get them in the door. As for loyal customers who have been paying unjustifiably high bills on a regular basis, they don't get a cut; as a matter of fact they might see price increases to subsidize those new customer discounts.
It's precisely because infrastructure code is not visible to the end user that you have to sell that (supposedly elegant) infrastructure some other way. You need to explain what's going on behind the scenes and why it is important on the long term. Upper management will appreciate simple block diagrams explaining that this kind of infrastructure will give them a lot of flexibility and maintainability down the road, reducing the cost of change and bug fixes.
Documenting the backend is also important for other developers who will maintain this code after you. I've had to deal with hundreds of thousands of lines of code with no documentation whatsoever, and it's not pretty.
Finally, I want to mention that not giving the GUI enough attention from the beginning is not good also. I'm a believer that function and form are closely tied together. You can design the best infrastructure in the world, but slapping a GUI on top of it as an afterthought will result in crappy user experience. Also there are a lot of times where certain UI functions, although may seem trivial, actually translates to significant backend design changes. As you mentioned, the GUI is what the user interacts with, and to them it's actually the GUI that represents the application, so it *is* what the application is about to them.
Another alternative to Adobe Reader and Foxit Reader is PDF-XChange Viewer:
http://www.docu-track.com/product/pdf-xchange-viewer
It behaves like Adobe Reader in that it shows you a warning, unlike Foxit. Given this fact I recommend switching to it from Foxit (at least for the time being).
It's lightweight, fast, and has lots of nice features. It even allows you to save filled forms!
If you avoid using anonymous functions you sacrifice the power of closures.
In most enterprise applications you'll be using multiple languages whether you like it or not:
- A multi-purpose high level language for n-tier apps (data access, domain logic, presentation): Java, C#, Ruby, Python
- A database language: SQL
- Web interface (if it's web-based): JavaScript, DHTML, Flash
- Integration and Middleware: XML
As long as you're within one product boundary, one general purpose language is the way to go. Across products (from same vendor or from different vendors): different languages + well standardized protocols (XML or binary serialization) is the way to go. Mixing more than one general-purpose language in the same product is usually a bad idea IMO (unless the languages share a common framework; e.g. C# and VB.NET)
The thing that ties everything together, whether using one or more languages is the development process and tools:
- Source control (SubVersion) -> provides change tracking, branching, merging
- Automated build environment (Ant, NAnt) -> can build code, database, tests with the push of a button
- Continuous Integration (CruiseControl) -> detect and fix integration errors early
- Unit Testing (xUnit) -> ensures predictable behaviour in the face of code changes
- Bug tracking (Bugzilla) -> track defects, plan fixes
- Documentation (Wiki, DocBook, code comments) -> inform your peers of your public APIs (i.e. how they can use what you have written), and possible extension points (how you can use what they have written); inform stakeholders how the system works (concepts, architecture, business scenarios); inform your users how to use your system properly
A good project manager ties everything together and keeps everyone on schedule.
As a bit of background, the original problem with Maclean's was not because they publish hate articles about Muslims, it's because that they refused to publish a response by the Muslim community to those articles.
From an article that was published in thestar.com:
Congratulations. You've just proven how useless you are. Care to elaborate with a counter argument?
(Oh, and if every robot has to have an identical progenitor, who built the first 'God' robot?)Well, that shows just how hung up you are on false premise that everything has to have a predecessor. The notion of a 'God' or a 'Creator' entails the that it's the source of everything, and that it has no predecessors (if it had then it wouldn't be a God).
So my argument to you is: If you cannot prove that everything has a predecessor then you can't claim that there is no single entity (read 'God') started it all. Likewise, I can't prove to you that there is a God who started it all, simply because it was not meant to be proven in the first place; otherwise we wouldn't be asked to have faith in God (lookup the term 'faith') because if it was provable then we wouldn't be having this argument.
And btw, believing in God doesn't necessarily mean I don't believe in science. It's not mutually exclusive. It just happens that I look at it from a different perspective. I also believe that evolution is a science fact, but I also believe that things don't evolve from nothing.
It boggles my mind when guys like you dump their crap on readers like that.
Not believing in something, like creationism, doesn't give you the right to describe all those who believe in the presence of a creator as morons or insane. You can make your point without trashing others, and you'd be well received, but refusing to hear but your own voice makes you completely useless and noisy.
That said, let me try to rectify some of the damage you made.
Assume there's another planet entirely filled with robots. Those robots are programmed to produce new robots through a very specific process and tools. This process and tools they use were defined by an earlier generation of less intelligent robots. That earlier generation was programmed to produce the necessary technology (tools & process) to generate the more sophisticated robots. But wait! That earlier generation must have had a prior generation that produced it as well, right?
Ok, let's keep back tracking where this all started. Do you think that this robotic world started as some atoms molecules gathered themselves and formed the first wire? And that those early wires gathered themselves and made connections to each others? And that diodes and transistors evolved from that? And those transistors decided to arrange themselves into complete circuits? Out of which a robot system eventually formed?
If you believe so, then I guess you know who's the moron.
This looks similar to RapidMind, which is a software development platform that, among other things, "Enables applications to run in a data-parallel way." (I'm not affiliated with them.)
As many people noted in this discussion, it's really hard to get everyone to agree on a standard tagging scheme. There are, however, good schemes for classifying content that can be used to standardize classification. Those include: controlled vocabularies (flat lists), taxonomies (trees) (e.g. Dewey, LC), ontologies, and topic maps[*] (graph-like structures). As you see the tagging model can be as simple as a list, or as complex as a graph of concepts with their associated relationships. Regardless of which scheme you use, you should use it within a metadata standard (e.g. Dublin Core, IEEE LOM), by allowing the subject field of the metadata record to take values only from the used classification scheme.
If a standard classification scheme is used, coupled with a metadata standard, I say we're much closer to having more consistent distributed content classification than with ad-hoc tagging.
[*] Check this article on "Metadata? Thesauri? Taxonomies? Topic Maps! Making sense of it all" by Lars Marius Garshol from Ontopia.
How did all grad students complete their theses before the Wikipedia era? As a matter of fact, grads don't refer to encyclopedias when doing research. They refer more often to the literature (books, scientific journals, conference proceedings, etc.)
There's even sites dedicated to research literature. Try CiteSeer http://citeseer.ist.psu.edu/, or even Google Scholar http://scholar.google.com/.
Of coures Wikipedia can help a lot when you want to have a quick reference on subject matter, but there are also much more comprehensive avenues of research that can be used.