LAST UPDATED IN 1998!!

This page contains a formal description of my academic achievements most of which are hi-lighted in my résumé. Originally this page was designed as part of my job search after graduation. Now that I have a job this page is less useful but I decided to keep it up for now.
 
 

Academic Experience

Academic Experience

I graduated with a Bachelor of Arts and Master of Science degrees in Computer Science, Magna cum Laude, from Brown University in May 1998. I was one of the eight people (in a class of approximately 1300) that were accepted to the Combined Program at Brown, which allowed us to get both degrees in a total of four years.

Courses

The computer science related courses I have taken towards my degrees are:

Other courses of mine I have found important:

Languages
General computer languages Packages / Standards

Work experience

Computer Scientist (Adobe Systems)
 

In June 1998 I accepted a full-time position in the Advanced Technology Group at Adobe Systems, working closely with the Adobe Illustrator team. I am inventing algorithms for printing illustrations that contain transparent elements. This is a core technology and will be used in all Adobe vector art products. This position gives me an invaluable experience in doing a product-oriented research.
 
Software Engineer (Silicon Graphics)
 
During the summer of 1997 I worked as an intern at Silicon Graphics. I participated in the development of the Windows NT version of CosmoWorlds, a professional VRML authoring tool. (Cosmo Software was a division within SGI at that time.) My project involved writing a translator from Inventor 2.1/VRML 1.0 to VRML 2.0 and a billboard editor. My internship at SGI allowed me to gain experience in a corporate environment, and to improve my ability to work in a team. Moreover I learned the Visual C++ environment, some MFC programming, and VRML 2.0.
 
Graphics Researcher
From 1996 until my graduation in 1998 I was a member of the Brown University Graphics Group, a National Science Foundation Graphics and Visualization Center. I have done research on constant frame rate surface rendering, as well as Non-Photorealistic Real-Time Rendering. I am a co-author of papers published at SIGGRAPH '97 and SIGGRAPGH '99 based on the latter project. My position as a graphics researcher helped me develop my research and analytical skills, my ability to do both group and individual research, and my knowledge of Computer Graphics and Linear Algebra.
 
Head Teaching Assistant
In the spring of 1997 I was offered a position as a Head Teaching Assistant for CS016, Introduction to Algorithms and Data Structures, together with my friend Mike Horn. This was a transitional year for the class -- we were changing the language from Pascal to Java, the assignments, the demos, and some of the lectures. Fortunately we managed to recruit an excellent team of ten teaching assistants (TAs). The HTA position involved planning the new assignments, implementing some of the support code, interviewing the TAs, conducting the TA camp, supervising the grading, and giving twelve help sessions to the class of about a hundred students. This job helped me improve my planning, communication, leadership, and management skills.

Teaching Assistant
 

Before becoming a HTA, I have been a TA for: As a TA, I was responsible for grading the assignments, holding office hours to help students, printing the handouts, and handling the electronic broadcasting during class. I learned how to work in a team and for a deadline, and how to organize my time to fit sometimes over twenty five extra hours of work per week in my schedule.
Java Developer
 
In the Fall of 1996 I worked for Prof. Tamassia in preparation of his course in algorithms and data structures. I developed an interactive demo of a heap as a Java application. This position helped me learn Java and increase my design skills.
 
Cognitive Science Research Assistant
 
I am interested in Artificial Intelligence and the mystery of the human mind. I was granted an Undergraduate Teaching and Research Assistantship (UTRA) for a project I did in Cognitive Science described below. This work helped me understand the methods of research and analysis in Cognitive Science, developed my analytical skills and my knowledge of AI theory. It allowed me to delve into the frontiers of knowledge about categorization in humans, to construct theories and to evaluate them using a neural network.
 
Departmental Computing Coordinator
 
Each department at Brown hires one person who is in charge of the computing facilities in the department. During the Fall of 1996 I was the Departmental Computer Coordinator for the Department of History of Art and Architecture. This job involves installing and updating software, creating and maintaining the WWW page, participating on the DCC meetings, helping the students and faculty with the new software, and troubleshooting. I have learned how to install and maintain software for Mac and PC systems.
WWW Developer
 
I have developed the WWW pages of some departments and organizations at Brown as well as beyond campus. Unfortunately I haven't invested much time in learning advanced HTML and improving those sites, though I realize the importance of HTML today and am planning of doing that at my earliest convenience. Here are the sites I have created:
Foreign Students, Faculty and Staff Office, History of Art and Architecture Department

Brown University Research Foundation

Plovdiv -- my home city

 
Tutor in Computer Science and Math
I have worked as a university tutor in Introductory Object-Oriented Programming and Introductory Calculus during the Fall of 1995. As a tutor, I have worked on a one-to-one basis with students. This job improved my communication skills and my general CS and math knowledge.
 
 
Projects

Makros

Makros is probably the largest project that I have developed together with my friends Marcin, Dimitrios, Gutherie, and Mike. Makros is a high-graphics action multi-player networks game that exists currently on Sun platforms only. It was developed in the spring of 1996 as a class project of a software engineering class. It is written in C++. It is well over 20000 lines of code and together with the images and the background music the game is over 25MB. My part of the project was the game engine, the data structures and the AI.

The game is comprised of two armies that fight against each other trying to destroy the enemy's main base. Each player controls a helicopter that flies over a terrain of plains, mountains or lakes. The helicopters can request military units (soldiers, tanks, or cannons) from a base of their team, can transport them and assign them tasks (e.g. attack the main base, kill all enemies around, invade the nearest neutral base). The helicopters can participate directly in the fight as well by shooting at each other. They can also land, transform into robots and attack the terrain units of the enemy. The game engine runs on a server and the graphics engine on each of the players' client machines. Dynamic addition and sign off of players is possible.

Trees

This is a group project for a class of advanced computer graphics in the Spring of 1997. It is developed by Marcin, Terry, and me. It is just an implementation of a SIGGRAPH '95 paper, Creation and Rendering of Realistic Trees, and I should give full credit to the authors -- Jason Weber and Joseph Penn.
The trees are generated according to over 60 parameters. The 3D objects are generated as a huge Inventor scene graph, and then exported to a raytracer (Povray). The picture on the left is a forest on Earth and on the right -- forest on Versua-3. Click on the images for a larger view. Note that many things look wrong with the pictures since we didn't have much time to do this project.
 
Real-Time Non-Photorealistic Rendering
 
This group project allows for real-time rendering of the key strokes (usually the silhouette) of 3D geometry. The result is an imitation of a pencil drawing. Certain modes render shading information, or introduce irregularities. This is a paper that we published at SIGGRAPH '97. I should give the most credit for it to the main author, Lee Markosian, as well as to my co-authors, Michael Kowalski, Sam Trychin, Daniel Gouldsteen, and John Hughes. More info on that project.
 
 
Art-Based Rendering of Fur, Grass, and Trees
 
This is a continuation and generalization of our work on non-photorealistic rendering. We have investigated the applications of controlling the level of detail of the 2D image, after the geometry has been projected onto the film plane. Such techniques not only save rendering time, but also allow for controlling the balance, the style, the focus of attention, and the composition of the scene. We were working together with Ronen Barzel from Pixar Animation Studios. Non-photorealistic rendering becomes more and more popular partly because it addresses one of the biggest challenges in computer graphics -- how to represent complex geometry in a simple way with minimum loss of semantic content. More info on that project
 
Constant Frame Rate Terrain Simplification
 
This is a project that uses some recent research techniques in critical time rendering. It is written in C++ using OpenGL and OpenInventor. This is part of research conducted by Matthias, a very smart Ph.D. student and a good friend of mine. Our main source is a SIGGRAPH '96 paper, Real-Time, Continuous Level of Detail Rendering of Height Fields. Our system renders the geometry to the highest detail possible, while still preserving a constant frame rate. Constant frame rate systems are key in immersive VR environments. Above is the wireframe of a terrain, and the actual terrain, both produced by our system. The image is a segment from the Grand Canyon.

  Rendering Non-Photorealistic Strokes with Temporal and Arc-Length Coherence
 
Some non-photorealistic systems render silhouettes of objects using a pre-defined repeating pattern, for example, a sine wave, or a pattern specified from a file. Such styles can be used for expressing an artistic effect, conveying a bias, or focusing the attention of the observer. Animating such NPR systems, however, presents a problem. Consider zooming on an object drawn with such as style. How do we balance temporal coherence (suppressing any sudden changes of the strokes over time) with arc-length coherence (maintaining a constant period of repetition of the pattern)? In this paper I explore the problem of stroke coherence in NPR systems.
 
Interactive Data Structure Viewer
I have implemented a Java application that displays a heap and animates step-by-step the operations on it. It allows for reverting the steps that comprise each operation and is designed for educational purposes. A more advanced version of it is the work environment of CS016, an introductory course in algorithms and data structures. I have developed the viewer during the spring of 1997, while I was a head teaching assistant for the course.
 
Inventor 2.1 / VRML 1.0 to VRML 2.0 Converter
This is a translator between two graphics languages that I have designed and implemented during the summer of 1997 while I was an intern at Silicon Graphics. It has become a standard plug-in for CosmoWorlds, a leading VRML authoring tool. It is written in Visual C++.
Research on Categorization and Concept Formation in Humans
In 1996 I was awarded the Undergraduate Teaching and Research Assistantship (UTRA) for research in Cognitive Science. My project involved analyzing several types of categorization models and using the data from experiments to measure their performance. I was working with Prof. Sloman, a remarkably smart person. This project was the first to use natural categories in analyzing human categorization. As a part of the project, I had to build a version of ALCOVE (a neural network). One of the conclusions we reached is that, when naming objects, people generally pay more attention to their physical appearance than to their functionality.
 
 
Other projects

NLP and Computational Linguistics

I am very interested in Natural Language Processing and Machine Translation. Computational Linguistics has a bright future!
I have participated in several international seminars in Computational Linguistics in Bulgaria and have done some projects related to NLP.  As a final project for a class in Neural Network Modeling (Prof. J. Anderson) I created a neural network that learns the 'sounds' of English. It learns how to rearrange random words into syntactically, grammatically and even semantically correct sentences. It can also fill in the missing words in a sentence. I must admit, however, that it performs well only for shorter sentences...
I have studied NLP from both statistical and rule-based approach. I have taken Prof. E. Charniak's class, Natural Language Understanding, in which we created a Part-of-Speech Tagger based on a Hidden Markov Model. I also took Prof. M.Johnson's class, Machine Translation, in which we studied about transformational grammar. I have implemented in Prolog a Verb Phrase Syntactical Parser for English, which determines whether a given verb phrase is grammatically correct. It is based on Chomsky's Affix Hopping, Do Insertion, Verb Raising, and Aux Inversion. It can handle modals, auxiliary verbs, all tenses, negation, some interrogative forms, and some adverbs. As a final project, my friend Benoit and I created a Tri-Language Translation System that works with English, French, and Bulgarian. It constructs the Lambda Calculus expression of the source sentence and projects it into one of the target languages. It handles all tenses, perfect, continuous, passive, assertions and negations, and yes-no questions.
In my class on Introduction to Computational Linguistics I created a system that parses natural language and can answer simple questions about it. Here are a few sample dialogues:

___________________________________
>> Jenny was beautiful
ok.
>> a little girl was playing outside
ok.
>> the girl had a big book
ok.
>> it was red and interesting
ok.
>> that girl was Jenny
ok.
>> was Jenny playing outside
yes.
>> who is little
 Jenny
>> where was she playing
outside
_________________________
>> a green book has been lying on a red book
ok.
>> the red one is lying on a table
ok.
>> it is large and heavy
Ambiguous:  the green book,  the red book,  the table
which one? the book
Ambiguous:  the green book,  the red book
which one? the red one
ok.
>> what is heavy
 the red large heavy book
>> the table is heavy and beautiful
ok.
>> what is heavy
 the red large heavy book,  the heavy beautiful table
>> you are stupid
ok.
>> you are stupid and slow
ok.
>> who is slow
 the stupid slow computer
>> I am good
ok.
>> am I good
yes.
>> who is good
 the good student
>> I am Lubo
ok.
>> who is good
 Lubo
___________________________________
>> Eugene is running fast
ok.
>> he is running now
ok.
>> how is he running
fast
>> when is Eugene running
now
>> did he run yesterday
no. 
>> he is a professor
ok.
>> the professor is an important person
ok.
>> is Eugene the person
yes.
>> is he important
yes.
_________________________
>> a professor is sitting in a chair
ok.
>> Jenny is awesome
ok.
>> she is sleeping
Ambiguous:  Jenny,  the professor
which one? Jenny
ok.
>> Mark is the professor
ok.
>> is she sleepin
cannot parse
>> is she sleeping
yes.
>> what is Mark sitting in
 the chair

			
Here is my program's source code.
Awards Publications

Last updated on May 15, 1999. This page is maintained by Lubomir Bourdev