|
All of them, that's why they're called exceptions. In C++ you can throw objects that do not inherit from Exception , how would the other side react to that if it were implemented in C#?
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Yes, all exceptions are already passed back to the client but the exception names are not standard across different languages. I am trying to come up with a table that will be translated to language-native exceptions.
|
|
|
|
|
johndw94 wrote: the exception names are not standard across different languages
Can you clarify "different languages"?
Different in .NET? The classname of an IndexOutOfRangeException[^] is the same for each .NET language.
Different across all computer-languages, thus including the TIndexOutOfRangeException[^]? In that case, limit yourself to the exceptions that have already been reported.
Different across human languages? Try unlocalize.com[^]
Logging of exception-text in the English language? Set the culture to English when you ToString. You should be able to build that table for .NET by enumerating all the classes that inherit from Exception , using Reflection.
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Current targets are:
.NET (C# and VB.net mainly)
C++ (boost::exception)
Python
Java
MATLAB
Octave
SciLab
Perl
ActionScript
Possible targets are
PHP
TCL
None of them have common exception types.
|
|
|
|
|
The usual way round this is to have your library provide core functionality, and its own set of internal exceptions. You then add a wrapper for each language which maps method/function calls and internal library data to the types required by the language.
[edit]
Alternatively, forget about exceptions and just use return codes to indicate success or failure of client requests. XML offers many possible ways of achieving this.
[/edit]
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
My question was WHICH exceptions to wrap. I already implemented the rest of these comments a long time ago...
|
|
|
|
|
All of them, obviously. There is little point in writing a library that provides communication like .NET remoting or SOAP but is far more flexible in terms of supported languages and platforms, unless it can handle all types, which is, after all, what you claim to be doing.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Yes, all exceptions are already passed back. They just don't have a common name. Passing the name of a C# exception to a Python program won't help much .There are a core set of exceptions that should be handled in a neutral manner. The question is, what are those core exceptions?
|
|
|
|
|
axpnumtheory wrote: The question is, what are those core exceptions? The only way such a question could be answered is to list every exception from every language that you plan to support and exclude any that are not common. I have no idea whether such a list has already been created by anyone else.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
johndw94 wrote: None of them have common exception types.
Correct, and there's no standard or default.
What are you trying to achieve? Building a "unified" store for all application-exceptions? It'd be more appropriate to use an issue-tracker, so that's probably not it.
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
No, the objective is to pass them back to the client. For instance, FileNotFoundException would be passed back to the client if the server couldn't find a file. Unfortunately in C# this would be System.IO.FileNotFoundException, while in python it would be IOError meaning that python will not have any idea what the C# exception is.
There are a huge number of exceptions defined in many languages. What do you think are the most "common" or "important"?
|
|
|
|
|
That sounds like an overarchitecture; exceptions are handled locally by the client, by the language-mechanism that they're created in. Next, you aggregate abstractions to a server.
Your architecture only makes sense if the FileNotFoundException would be handled using PHP when it returns. Again, all exceptions are important.
Can you describe the current exception-handling strategy employed?
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
You can take a look at the project: http://robotraconteur.net. I have not been publicizing it because the API is still in flux. I don't want to have too many people adopt it and then immediately change the API. Right now the "primary" language is C#. It is the language I am most comfortable with, and have been propagating the changes to other languages. Exceptions are handled by catching any exceptions on the service, saving the exception name and message, and passing the information across the boundary. A container exception is then throw (RobotRaconteurRemoteException) containing the name and message (similar to Java RMI exception handling). A set of built-in exceptions are handled differently that throw a more detailed exception class. You can see the error code in Error.cs. The problem is that the exception names are language-specific, and if someone decides to write a service in a different language the exception names will be different, leading to an annoying design for the clients.
|
|
|
|
|
There is no such thing as a common set of errors. The concept does not exist. To make matters worse, people also create their own exceptions.
You can generalize them to a degree, but you can't generalize a solution. That's something that's not only language-specific,.but also platform dependent and even depends on the users' rights. The FileNotFoundException might be uninteresting, or jeopordizing five years worth of data. It might be that I forgot to log on to the remote directory (in which case I'd like to be informed with a message) or I might be a hacker, poking around.
I don't understand what you're trying to achieve, even after reading the introduction.
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Thread is getting confused so I am going to rephrase to what I think has been said.
You have a communications library/protocol. You want to allow 'exceptions' to the 'thrown' via that. And you want to support many languages.
That means your library MUST have the following components.
1. A server component.
2. A client component.
In terms of generality 1 and 2 can be different programming languages withing the same enterprise.
So that means that you MUST do the following.
A. Create your OWN protocol method for transmitting an 'exception'. Note that this does NOT mean nor can it mean that you use a language specific exception. Your protocol must NOT use any such exception.
B. Implement your protocol (1) such that is has some common idioms for supporting communication errors. It does that because communication errors are the only common error type that such a library intrinsically knows about.
C. Optionally you provide a way for an implementer to 'extend' your protocol to add their own 'exception' (again this will NOT be a language specific exception.)
AFTER you complete the above then you do the following.
1. Implement your library server code for a specific language so that it catches ALL language specific exceptions. And then it converts them into your protocol as defined above. That and only that is what is sent to the client library.
2. Implement your client library for a specific language so that it receives the protocol 'exception' and translates it into an appropriate language specific exception.
AFTER you have complete all of the above if you have and specific exceptions for specific languages that you want to implement then you use C above to modify the specific library components, perhaps only on the server side but perhaps both sides as well.
If you are clever then you will find that there are ways to define A such that you can use a configuration (rather than code) to add in new language exceptions both in the server and client.
|
|
|
|
|
I tried to say this earlier, but your explanation is so much more concise and clear. +5.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Continuous Integration with its automated builds and test is often seen as an important process/tool in software development, especially in agile enviroments. In our company, we want to introduce it now.
There are some tools available, some of them even freely. And the respective web sites use to claim that they are easy to use. But in a lecture, I heard that setting up CI is not easy at all, a lot of money could be wasted, and it's better to get a consultant for that...
What are your experiences with introducing CI? What was easy, what was complicated? And: what came first - (manual) processes or the tool?
|
|
|
|
|
Bernhard Hiller wrote: What are your experiences with introducing CI?
Never used that term (which is why I initially skipped the question), but have introduced automated builds[^] and testing in three companies. Nothing fancy, motivated to create it by the Spolsky Test[^].
The batch-file gets the latest version of the source-code, builds it, runs the automated tests, runs FxCop, puts the output in a file and mails that every day. Set up once, easy to maintain, no additional costs (except the CPU-time) - hence, very little reason not to do it.
At first, the batchfile would run around midnight, and we'd read the mails in the morning. Currently, it's running at eight O'clock, with the report coming in an hour later. A short list of benefits;
- The code is never "broken" for more than 12 hours
- Always ready to deliver a "production build"
- More confidence in the code-base (none of the external consultants wrote sh*t that breaks my code)
- Better maintenance of the tests (since they're run every day)
- Statistics on the software; 500+ successful tests every day and the blessing of FxCop are an indication of the quality of your code.
Bernhard Hiller wrote: a lot of money could be wasted, and it's better to get a consultant for that...
..I'm almost considering on playing the consultant and to sell the batchfile with a random cool name from the BuzzWord-forum
Nah, guess it would be better to have some Rent-A-Coder write a GUI for it first
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Thanks for your hints. "Continuous integration" is the common term for that process, see also Wikipedia: http://en.wikipedia.org/wiki/Continuous_integration[^] which lists a number of tools.
The Spolsky test is an interesting idea. Our score is presently about 1. That's the environment where we have to start...
|
|
|
|
|
Bernhard Hiller wrote: which lists a number of tools.
Quite the list; I should be glad I did not waste a Rent-A-Code on that
Bernhard Hiller wrote: Our score is presently about 1. That's the environment where we have to start...
Is the environment willing to change? If yes, then they might be doubling their productiveness soon.
Good luck
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
If you want to setup a free CI solution for yourself then you will have to spend some time on reading its documents for the first 1-2 times. I myself played around with buildbot (python) that I hated, and with Hudson CI (java) that is very nice. A bat file is unfortunately hard to monitor (no web interface to look at with a browser), and hard to setup automatic test on submit to your version control system. Currently we use a custom CI server (written in C++), its pure and simple, knows exactly only those few features I listed below in my other post. Over a year we found out exactly what we need and none of the existing solutions provided all of them plus they had a feature bloat we don't need.
|
|
|
|
|
pasztorpisti wrote: A bat file is unfortunately hard to monitor (no web interface to look at with a browser)
ECHO "Starting unit-test" >/var/www/CIprogress.htm
Custom applications are hard to customize, and a batch-file is easily extended. Anyone who can write a console-application using VB.NET can extend it's functionality. I'll put you a progress-bar in a tray-icon to follow the progress of the batch-file, if required
pasztorpisti wrote: Currently we use a custom CI server (written in C++), its pure and simple, Simpeler than what I suggested?
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
How do you start the script? A CI system can be started from any machine from a browser. You cant start it multiple times by accident. You have a nice page with colors with a list of successful/failed builds. The build starts automatically on submit. You can implement most of these from batch files, but these batch files become uglier then C++ code quickly! Another reason I usually prefer a single binary solution is that script systems (especially heterogeneous ones) are much more error prone.
|
|
|
|
|
pasztorpisti wrote: How do you start the script?
Like any other, although the Windows Task Scheduler might be handy. Or make it a post-build option from the IDE. It's as easy as starting any GUI-less executable.
pasztorpisti wrote: A CI system can be started from any machine from a browser.
The argument that it does builds for multiple platforms would have been better. It's relative easy to start an executable using ASP.NET.
pasztorpisti wrote: but these batch files become uglier then C++ code quickly!
..I do not see how anyone could keep a tree with source-code tidy, if they can't even do so with a simple script.
An off-the shelf product does have advantages, you're right. And yes, it does provide some features that would cost some time (and thus money) to implement if you need them. And yes, for larger teams it is recommended to go for an existing product. Especially since no-one will be responsible for maintaining the script, and it'll grow into a number of hacks from various employees. The most decisive limitation here would be the budget.
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Choose whatever option you like, and please try them before you make suggestions and tell your opinion. We tried scripts, prepackaged product, and the current option and now we are happier than ever. Choose the option that is suitable for you and minimizes the maintenance work you need to invest! Good luck!
|
|
|
|