Individual projects -- Projects -- 2007-2008 -- info.uvt.ro

From Wikiversity


Important!

The current page relates with the study topic Individual projects from 2007-2008 academic year. Thus these pages can be thought as for reference / archival purposes, and the only updates which should be done to them is for correcting spelling mistakes or common expressions.

Also I would like to ask our students to be polite when (and if) updating these pages. (If you have any questions please ask your coordinating teacher, or the original poster of the project.)

Thanks for your understanding, Ciprian Dorin Craciun 12:33, 23 February 2010 (UTC)

Networking[edit]

Firewall frontend[edit]

Description: Implementing a frontend for firewall systems for either Linux or FreeBSD operating systems.

Observations:

  • It can be implemented on Windows, but the deployment should be for Linux or FreeBSD.

Features:

  • ease the definition of firewall rules;
  • usage of configuration files;
  • provides means to construct and compound libraries of common used rules;
  • user interface for rule building;
  • remote rules deployment;

References:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

DHCP server with LDAP backend[edit]

Description: Implement a new DHCP server or modify an existing one (Eg. ISC DHCP Server) to support LDAP based configuration and lease database.

Links:

Proposed by: Marian Neagul

Basic firewall implementation on NT platforms[edit]

Description: Implement a firewall system for Windows NT platforms (e.g. Windows 2000, XP, 2003, Vista) using system-wide hooks at kernel or user level.

Observations:

  • The program must be a standalone executable (native code).
  • You only need to write a basic firewall system, no traffic analysis is necessary.
  • Use only thread-safe code!

Proposed by: Ciprian Pungila

Miscellaneous[edit]

RPG Game Engine[edit]

Description: Write or propose an implementation (must assisted by a working, fully functional demo) of a RPG game engine.

Observations:

  • Try to use object oriented code.
  • Test carefully your program, make sure no memory leaks are present.
  • A performance profile must be present in your paper, and comparisons with other engines of its kind.

Proposed by: Ciprian Pungila

Portable executable packer[edit]

Description: Write a small packer for PEs (Portable Executables). You can use any compression library at hand for the implementation part (e.g. NRV, LZMA, etc.).

Observations:

  • Try to use assembler code for the stub.
  • Test carefully your program, make sure no memory leaks are present.
  • Your stub must decompress the program in memory, and execute it from there. Do not create a temporary file on the disk!
  • A performance profile must be present in your paper.

Proposed by: Ciprian Pungila

Binary file patcher[edit]

Description: Write a small binary file patcher tool for your favourite operating system (Windows 98+ or Linux-based).

Observations:

  • Implement a good algorithm for finding file changes.
  • The program must be a standalone executable (native code).
  • The tool must have a GUI.

Proposed by: Ciprian Pungila

Automatic source code formatting[edit]

Description: Write a program with a GUI that can reformat the source code of a programming language automatically to include the correct indentation, spacing, etc. The syntax of the programming language to format should be described in a simple text or XML-based file.

Observations:

  • The program must show the formatted output immediatly after it finishes.
  • The program must be a standalone executable (native code).

Proposed by: Ciprian Pungila

A simple Pascal compiler[edit]

Description: Write a simple Pascal compiler, capable of producing executable source code. The Pascal language syntax will be sent to you as part of the project specifications.

Observations:

  • The program needs to have a minimal GUI, capable of showing the Pascal program in a window (SDI or MDI GUI, you pick one).
  • The program must be a standalone executable (native code).
  • The program must be capable of producing at least the equivalent assembler instructions corresponding to the instructions in the Pascal source code.

Proposed by: Ciprian Pungila

Real Time Strategy Game Engine[edit]

Description: Develop an engine to simulate a real time strategy game world. Write the description/specification of the game world (story, entities, interactions, etc.) yourself.

Features:

  • The architecture will be layered:
  • The core is the engine which implements the rules of the world.
  • Interface to plug-in AIs.
  • Interface to plug-in GUIs (windows based / DirectX based / OpenGL based).
  • Two or more players will be supported.
  • The game must end when a player accomplishes victory conditions.

Proposed by: Cornel Izbasa cizbasa@info.uvt.ro

Security[edit]

Malicious pattern detection heuristics for portable executables[edit]

Description: Write a program that can predict, based on a user-defined heuristics (on top of a simple heuristics engine) if a PE (Portable Executable) file contains malicious patterns of code.

Observations:

  • Try to use object oriented code.
  • Test your program in virtual environments.
  • Build rules for the heuristics engine based on the analysis of existing malicious patterns of code.
  • You can use the PE's IAT (Import Address Table) information as well for the heuristics part.
  • Program must be a standalone executable (native code) and the performance profile must be also present in your paper.

Proposed by: Ciprian Pungila

Static analysis of executable files[edit]

Description: Write a program that can detect multiple patterns of code within a single executable file. The program should list all patterns found and be as fast as possible.

Observations:

  • You must use at least 10,000 patterns when testing the software.
  • Response time should be well under 1 second on an average 1,5GHz CPU.
  • The medium pattern length has to be at least 250 bytes.
  • You can also use the EP (Entry Point) information from the executable header to determine the physical offset where the search should begin.
  • Program must be a standalone executable (native code).
  • Determine the performance profile of the tool by testing it throughly, and comment it in your paper.

Proposed by: Ciprian Pungila

Statistical log file analyzer[edit]

Description: Implement a Bayesian Classifier (or a SVM/ANN based classifier) for detecting network intrusions and suspicious behavior based on the log files generated by various programs/operating systems/devices.

Buzzwords:

  • Automated Text Classification
  • Bayesian Inference
  • Artificial Intelligence
  • Machine Learning

Links:

Proposed by: Marian Neagul

Web services and applications[edit]

Testare on-line[edit]

Descriere: Se urmăreşte realizarea unei aplicaţii software pentru testarea automată şi on-line a unor subiecţi.

Cerinţe:

  • implementarea următoarelor tipuri de teste:
    • grilă
    • răspuns textual
    • răspuns cod-sursă
  • interfaţă de administrare pentru:
    • utilizatori şi drepturi
    • teste -- conţinut şi programarea lor
    • rezultate
  • notare automată -- acolo unde este cazul

Propus de: lect. dr. Gheorghe Petrov

Organizarea on-line a bookmark-urilor[edit]

Descriere: Se doreşte realizarea unei aplicaţii web care să permită organizarea on-line a bookmark-urilor diverşilor utilizatori.

Cerinţe:

  • aplicaţie web-based
  • organizare bazată pe diferite criterii:
    • ontologii
    • etichete
  • adnotarea bookmark-urilor
  • partajarea între utilizatori a bookmark-urilor cât şi a adnotaţiilor aferente
  • exportarea şi importarea în format XML a informaţiilor
  • implementarea unui Web Service care să exporte un API XML minimal

Referinţe:

Propus de: lect. dr. Gheorghe Petrov

Web based shell[edit]

Descriere: Se doreşte realizarea unei aplicaţii web care să prezinte funcţionalitatea unui shell UNIX / Linux în linie de comandă.

Cerinţe:

  • varianta A:
    • implementarea standardului VT100 în cadrul browser-ului
    • comportament asemănător cu Anyterm
  • varianta B:
    • trimiterea de script-uri
    • editare, salvare, încărcare de script-uri
    • versionarea script-urilor
    • posibilitatea de a le rula pe alte staţii decât cea unde este server-ul
    • exportul şi importul XML a script-urilor
    • posibilitatea de a programa execuţia periodică a script-urilor

Referinţe:

Propus de: lect. dr. Gheorghe Petrov

Online English dictionary[edit]

Description: Re-implement http://dictionar.info.uvt.ro using a modern programming language / framework.

Proposed technologies:

  • Python
  • Ruby
  • Ruby on Rails
  • Django

Buzzwords:

  • AJAX
  • Web 2.0

Proposed by: Marian Neagul

Amazon S3 clone[edit]

Desription: Implement a web service oriented, transactional, key-value storage system; and a web application that uses it.

Features:

  • transactional system with commit, rollback;
  • HTTP based communication;
  • XML and/or Json requests and responses;
  • read-only REST interface;
  • JavaScript library;

Observations:

  • The web service and the web application can be seen as two distinct projects (if complex enough).

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

XML based gateway for relational databases[edit]

Description: Implement a web service oriented, gateway for relational databases. The queries should be given in XML format, using a custom built schema.

Features:

  • XML based requests for describing relational queries; (not SQL wrapped inside an XML message);
  • XML based responses for describing relational results;
  • HTTP based communication;
  • REST based URL encoding;
  • database connection pooling;
  • (optional) Message queues based communication;

Links:

Observations:

  • The gateway could be built only for a specific database, or on top of JDBC.

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

XML based gateway for XML databases[edit]

Description: Implement a web service oriented, gateway for XML databases. The queries should be issued as XML, or specific XQuery / XPath wrapped inside XML.

Features:

  • XML based query language (either specific XML language, or XQuery / XPath wrapped inside an XML request);
  • HTTP based communication;
  • REST based URL encoding;
  • (optional) Message queues based communication;

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

TeX / LaTeX based Wiki[edit]

Description: Implement a TeX / LaTeX based Wiki, that would allow the users to write pages / articles using the TeX / LaTeX syntax.

Features:

  • Web based user interface;
  • XML based publication / retrieval API over HTTP;
  • content versioning;
  • concurrent editing;
  • ability to view pages / articles either as HTML or PDF.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

An instant messenger using web services[edit]

Description: Write an instant messenger system using web services (e.g. SOAP, etc.). Comment in your paper the choice of the protocol, as well as the advantages and disadvantages of using it.

Observations:

  • The program needs to have a GUI.
  • The program can be either bytecode or native code (Java code is accepted).
  • The program must maintain a list of "online" users, but it is up to you to establish the server communication protocol (however, we must agree on it before implementing it).

Proposed by: Ciprian Pungila

C/C++ projects[edit]

WebKit based web browser for Linux[edit]

Description: Develop a web browser using the existing Qt or GTK port for WebKit for Linux (or an operating system of your choice).

Features:

  • minimal web browser features;

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

3D chess game[edit]

Description: Develop a chess game with a 3D GUI.

Features:

  • AI player with MTD(f) or better algorithm;
  • graphics done with OpenGL.

Proposed by: Cornel Izbasa cizbasa@info.uvt.ro

Reversi game[edit]

Description: Develop a Reversi game with a GUI.

Features:

  • AI player;
  • graphics done with OpenGL.

Proposed by: Cornel Izbasa cizbasa@info.uvt.ro

Programming languages[edit]

LLVM based project[edit]

Description: Create a project that uses the LLVM language and assembler.

Observations:

  • The project could be a compiler for an existing language (Pascal, C, etc.)

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Lisp to Python translator[edit]

Description: Implement a Lisp2Python package. This package should parse Lisp code and transform it to CPython AST using the CPython compiler package.

Links:

Proposed by: Marian Neagul

Java technologies[edit]

Description: All the following projects are centered on a Java technology. Thus the main purpose each of the project is to use that technology in an application that best suites the technology.

Observations:

  • For the JMS and JFS there are multiple implementations available, and so multiple choices should be analyzed and the decision should be described and argumented in the documentation.

Jini based project[edit]

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Java Message Service based project[edit]

Description: Try to design and implement a system that should solve a real world problem, by effectively using the JMS technology to achieve its goals.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Java Server Faces based project[edit]

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

JADE based project[edit]

Description: Try to design and develop system that solves a real wold or simulated problem, by using an multi-agent approach and implementing a solution in Java with the help of JADE framework.

Observation:

  • The problem to be solved could also be more closer to distributed computing, but using JADE just as a communication framework.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Databases[edit]

Relational database to object mapping[edit]

Description: Implement an object relational mapping system for the language of your choice (could be C/C++, Java, Python, Ruby, PHP, etc.)

Features:

  • mandatory mapping features:
    • table columns -> object fields, setters, getters or similar
    • one to many, many to one relations -> lists of objects and object fields
    • (optional) inheritance mapping
  • it should allow objects to be obtained also from queries
  • mapping description could be done:
    • external to the source code -- by using description files (XML, JSON, custom built.)
    • internal to the source code -- by using annotations if the chosen language allows it.
  • database schema creation based on the mapping description
  • (optional) database schema update based on the mapping description
  • the usage of the framework should be very light and as transparent as possible (it could imply using byte code instrumentation if your language allows it)

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Relational database schema definition language[edit]

Description: Define a high level language for describing relational database schema. Implement a transformer that reads the custom build language and translates it to different SQL dialects.

Features:

  • possibility to define all the usual entities and constructs:
    • schemas;
    • tables;
    • domains;
    • constraints;
    • indexes;
    • views;
    • sequences;
    • (optional) stored procedures;
  • possibility to create SQL scripts for at least 3 different databases (for example PostgreSQL, SQLServer and MySQL);

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Associative model of data[edit]

Description: Define an application that uses the associative model of data to model data, and then implement it by using the AMD engine to store and query data.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Proiecte cu caracter economic[edit]

Fiecare dintre următoarele proiecte poate fi ales de către maximum doi studenţi. (Proiectele vor fi acordate pe principiul FIFO -- primul sosit, primul servit.)

Cerinţe generice:

  • utilizarea unui sistem de baze de date relaţional orientat client-server (exclus Access); sau utilizarea unui sistem de baze de date XML;
  • interfaţă grafică pentru operaţiile necesare -- nativă ori web;
  • exportul rapoartelor într-un format electronic independent (PDF, Excel, HTML, etc.)
  • importul / exportul de date în format XML;
  • implementarea unui Web Service care să exporte un API XML minimal;

Descriere:

  • Aplicaţie software evidenţa personalului în contextul unui agent economic.
  • Aplicaţie software pentru gestiunea relaţiei personalului cu Casa de Pensii în vederea generării formatelor de raportare electronice spre Casa de Pensii, a calculului contribuţiei personalului pentru pensie si asigurari sociale.
  • Aplicaţie software pentru gestiunea relatiei cu Inspectoratul Teritorial de Munca (contracte invididuale de munca, decizii de concediere, acte aditionale la contractile individuale de munca, state de plata pentru un organism economic).
  • Aplicaţie software pentru gestiunea stocurilor.
  • Aplicaţie software pentru gestiunea elementelor patrimoniale.
  • Aplicaţie software pentru gestiunea financiar-contabilă a producţiei.
  • Aplicaţie software pentru urmărirea fluxului tehnologic, precum şi evidenţa stocurilor de materiale, a intrărilor şi ieşirilor de materiale.
  • Aplicaţie software pentru normarea şi calcul salariilor şi a impozitului în vedearea gestionării automate a salariaţiilor şi a modului de plată a acestora din prisma unui agent economic.
  • Aplicaţie software pentru evidenţa fondului de bibliotecă, şi anume a împrumuturilor şi returnării de cărţi către, respectiv de la, persoane.
  • Aplicaţie software care să gestioneze raportările către Casa Naţională de Asigurari de Sănătate. Aplicaţia va trebui să ofere posibilitatea salvării informaţiilor despre persoanele asigurate şi vizualizarea asiguraţilor după anumite criterii. Informaţiile despre persoanele asigurate vor fi grupate pe luni, şi vor conţine informaţii complete despre angajat, angajator, cât şi sumele ce trebuie plătite pe parcursul lunii curente. În acest sens, aplicaţia va permite actualizarea unei anexe, cu informaţiile necesare, stocarea informaţiilor după o verificare prealabilă a corectitudinii acestora, cât şi o vizualizare ulterioara a informaţiilor stocate.

Legături:

Propuse de: lect. dr. Gheorghe Petrov

File systems[edit]

File system benchmark[edit]

Description: Design and develop a file system benchmark that should evidenciate the performance of different file system operations.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Berkeley DB backed file system[edit]

Description: Implement a FUSE based file system that uses as storage back-end a BerkeleyDB database.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Encrypted file system[edit]

Description: Implement a FUSE based file system that exports an encrypted file system.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Transactional file system[edit]

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Bittorrent filsystem[edit]

Description: Implement a FUSE filesystem for downloading/sharing BitTorrent Data. Some of the uses of this file system would be Operating System Image Deployment, easy interface to bittorrent.

Links:

Proposed by: Marian Neagul

Data structures[edit]

In-memory transactional data structures[edit]

Description: Create a library which allows the user to manipulate a data structure in a transactional manner. That is the user can create a transaction and when the transaction ends:

  • the modifications are persistent (the commit operation)
  • the modifications are reverted (the rollback operation)

The data structure could be an association table implemented either as an ordered tree or a hash table.

Features:

  • the transactions must have the ACID properties;
  • (optional) the data structure should be saved and loaded to / from a permanent storage;
  • (optional) the transactions could be nested;

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Distributed hash tables[edit]

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

A compression program[edit]

Description: Write a program that acts like an archiver (e.g. ZIP, RAR, etc.). Use any compression algorithm you prefer (adaptive Huffman, RLE, LZW, etc.) - you must implement the algorithm on your own! -, but we must agree over it before the actual implementation begins. An archive file must be designed so that it may contain several files at once (at least 1,024 files must be supported inside an archive).

Observations:

  • Use only a native code compiler for the implementation (no bytecode allowed).
  • A GUI must be built for the program.
  • You must include a performance profile of the archiver in your paper, as well as comparisons with similar existing solutions (WinZip, WinRAR, WinACE, etc.).

Proposed by: Ciprian Pungila

Protocol implementations[edit]

X11 protocol implementation[edit]

Description: Develop a library that should allow a client to communicate with an X server through TCP/IP -- the library should implement the X11 core protocol and not be wrapper to Xlib. Also implement a simple application that demonstrates the libraries capabilities.

Links:

Proposed by: Ciprian Dorin Craciun ccraciun@info.uvt.ro

Simulators[edit]

Simularea operatorilor modelului relaţional[edit]

Descriere: Se doreşte realizarea unei aplicaţii software care să ilustreze modul în care funcţionează operatorii modelului relaţional:

  • selecţia;
  • proiecţia;
  • legătura;

Precum şi a operatorilor pe mulţimi (în contextul modelului relaţional):

  • intersecţia;
  • reuniunea;
  • diferenţa;

Cerinţe:

  • aplicaţie interactivă:
    • utilizatorul putând interveni în orice pas al simulării;
    • utilizatorul are posibilitatea de a propune operaţii sau înlănţuiri de operaţii pentru simulare;
  • simularea paşilor -- adică prezentarea diverselor tehnici şi a rezultatelor intermediare, nu numai a rezultatelor finale
  • simulare grafică
  • (opţional) utilizarea unei surse de date specificate de utilizator -- baze de date existente, dar de dimensiune mică.

Propus de: lect. dr. Gheorghe Petrov

Web interface based on Ruby on Rails for a P system simulator[edit]

Links:

Proposed by: Cosmin Bonchis

Lindenmayer systems generator[edit]

Description: L-Systems are used to draw recursive structures (for example fractals that look like plats, Sierpinski triangles, etc.)

Requests:

  • formal generation: generating the character string that could be obtained after n iterations;
  • graphic generation: drawing an L-System by using "turtle graphics";
  • (optional) optimization methods for generating and drawing of L-Systems.

Links:

Proposed by: Dumitru Şipoş

Boolean satisfiability problem[edit]

Introduction: Satisfiability is the problem of determining if the variables of a given Boolean formula can be assigned in such a way as to make the formula evaluate to TRUE. Equally important is to determine whether no such assignments exist, which would imply that the function expressed by the formula is identically FALSE for all possible variable assignments. In this latter case, we would say that the function is unsatisfiable; otherwise it is satisfiable. To emphasize the binary nature of this problem, it is frequently referred to as Boolean or propositional satisfiability. The shorthand "SAT" is also commonly used to denote it, with the implicit understanding that the function and its variables are all binary-valued.

Links:

Hard instance generator[edit]

Description: Implement an hard, random instance generator for 3-SAT (or generally for k-SAT). The generated instances should be generated in DIMACS format.

Links:

Proposed by: Marian Neagul