You will find here references (Web sites and books), documents (PhD and MS theses, courses, articles...), source code (C, C++ and Java) concerning various areas of computer science. I did the best I could to class them in categories. Most of the sites referenced here are in English. If not, there is an indication. The categories that propose documents or source code directly in this site are tagged with an * in the table of contents that follows.
This is the thesis of the PhD I made from lately 1998 to early 2003 at the LIMOS Laboratory, under the supervision of Professor Philippe Mahey. This work is oriented around two axes. First, use operations research techniques in order to solve synchronization problems that occur in the conception and the presentation of hypermedia documents. Second, explain the reasons why the design of a library of reusable components for graph problems can not follow the classical rules of software engineering, and propose some conception solutions. The actual formats used to publish documents on the Internet bring, without discussion, new facilities compared to the traditional materials. But needs are still growing and new languages appear regularly, attempting to improve the structure and the interactivity of documents. Among these languages, some offer the possibility of animating and synchronizing media components. But the variety of these components (audio, video, text, image...) makes the animation a difficult problem. The problem studied here consists in finding a good adjustment of the durations of the components so the presentation progresses as close as possible to what the author wants. The problem can be modeled, after some restrictions, as a minimum cost tension problem in a graph. To solve it with piecewise convex costs, we studied different methods (linear programming, out-of-kilter, cost-scaling on the dual). We also propose methods to solve the problem on specific classes of graphs, the series-parallel or almost series-parallel graphs, more representative of the real cases of hypermedia synchronization. For this study, we have developed a library of reusable components for graph problems. The thesis contains then three chapters on this issue. First, the reusability in a general way is tackled, explaining why operations research can not be dealt classically by software engineering. Then, a quite complete presentation of the object-oriented approach is proposed, insisting on the efficiency and reusability aspects of the various concepts. We finally present design patterns for the development of generic components for operations research, and propose a quick overview of the various issues, more technical, met in the design of a portable and reusable library.
This is the MS thesis I made in 1998 during a five-months stay at the Virginia Tech University with Professor Osman Balci. This report contains a quiet complete overview of the object-oriented concepts, a presentation of computer simulation and more precisely discrete-event simulation. There is also a discussion about software reuse and reusability. Finally, these concepts are illustrated with the presentation of libraries made with VSE (Visual Simulation Environment) for the purpose of visual simulation. There are three libraries. The first is an experimental design about the moving of objects in a two-dimensions layout. It can be used as a start to create a better designed and more complete reusable library. The second library provides a class to manipulate dates in the Gregorian calendar. We think its presentation can be useful for someone who wants to develop a similar portable and reusable library in another language. The last library is not presented in this HTML version, which is not the full report but only a gathering of the most interesting chapters.
How to write a program that can be used under any platform ? Except Java, there is no direct solution. Unfortunately, Java has just came out. It remains slow and does not implement some important notions of the object-oriented approach such as the generic classes. B++ Library is a thread-safe C++/Java library of almost 90000 lines of source code that I am actually developing as part of my research. It mainly provides components for operations research and simulation, but is built on an object-oriented base that guarantees some portability and favors the reusability of the designed components. This portability was tested under Linux, Unix and Microsoft Windows environments with different compilers. Various programs were also developed to test the reusability of the components of the library.
B++ Library does not provide its own graphical interface, to guarantee its portability would be almost impossible. However, it proposes the Jirk++ mechanism that allows the manipulation of any Java class directly in C++. The Java graphical components are thus available in the library.
Small programs, the B++ Tools, were developed with this library. They are available for Microsoft Windows. Their source code can be found in the B++ Library.
Most of the programming languages and software now use object-oriented concepts. Although it is a natural way to model the reality, object-orientation is difficult to master when you want to clearly model a complex system or smartly design software. Here are documents on this site concerning object-orientation.
Here is a selection of Web sites rather made for experienced people on the subject.
Here are some books on object-orientation.
Software reusability has become an economic challenge. Indeed software developers usually need to reuse parts of old software to design new one. Software reusability can be a gain of time in a long term sight. Moreover, lots of companies have not the sufficient knowledge to develop themselves parts of their software, or do not want to invest in it. Hence they look for libraries they can use directly. Finally, the object-oriented approach is well adapted to guarantee software reusability, that is why the two domains are tightly related. Here is a selection of Web sites that discuss software reuse and reusability.
Here are some books on software reuse.
Computer simulation is a vast domain, with different kinds of simulation. We mainly consider here discrete-event simulation using the object-oriented concepts. The B++ Library presented previously provides a simulation module called B++ Simulator. This framework allows discrete-event simulation with visual animation based on object-oriented technology (C++ and Java).
Here is a selection of Web sites that discuss computer simulation.
Here are some books on computer simulation.
C++ is an object-oriented programming language that is widely used. But its use for a good object-oriented design can be difficult. A standard library, the Standard Template Library (STL), has been developed to provide useful reusable classes as containers. This library is now provided with any C++ compiler. Here are documents on the language that I wrote, some of them for courses at an engineering school.
Here is a selection of Web sites that deal with advanced C++ concepts as well as basic notions, and with the STL.
Here are some books on C++.
Java is also a widespread object-oriented language. It is younger and owes its fame to its easy syntax (compared to C++), to the richness of its libraries (multimedia, network...) and to its portability. Here are documents on the language that I wrote, some of them for courses at an engineering school or at a university institute of technology (IUT).
Here is a selection of Web sites on the Java language.
Operations research is a domain that is difficult to grasp. Indeed, it uses mathematics as a theoretical tool with the aim of a computerized application, one of the difficulties being the transition between theory and practice. It offers methods and algorithms to solve a wide range of problems that can not be solved without the computers. It can be simple algorithms like the search of a shortest path between two points, or sophisticated methods like the resolution of complex mathematical systems.
Here are two courses that I gave at a university institute of technology (IUT).
Here is a selection of Web sites on operations research.
Here are some books on operations research.
The design of Internet sites requires the knowledge of several languages in order to achieve a good presentation of the information (with HTML and the CSS style sheets), to provide some interaction with the user (with JavaScript), to allow the access to information stored in databases (with PHP for instance), and to provide embedded applications (with Flash/ActionScript, Java...). Here are some courses that I taught at a university institute of technology (IUT).
Here is a selection of Web sites on the various languages useful for the conception of Internet sites.
With a language like Java, it is very easy to make graphics. Here are some documents I made after coding Java applets. They explain the principles used to program them. So for each topic, you will find an explanation and an implementation with a Java applet, of which source code is of course available.
Here is a selection of Web sites about mathematics and geometry (in French).
Here are some sites on stereograms, these images you must squint on to see appearing a 3D form.
I put there Web sites related to computer science that can not fit in any category above, but that still very interesting.
|