The best way to learn how to use the WebCore is by example. See the documentation for more information.

The requested URL is always shown first; if a page uses one or more WebCore templates, those are shown afterwards.

00 <?php
01 include_once ('webcore/init.php');
02  
03 $Page->title->subject = "Marco Von Ballmoos - Curriculum Vitae";
04 $Page->template_options->title = "C.V.";
05  
06 $Page->location->add_root_link ();
07 $Page->location->append ("Marco", "../");
08 $Page->location->append ("Curriculum Vitae", './');
09 $Page->location->append ("May 2002");
10  
11 $Page->start_display ();
12 ?>
13 <div class="main-box">
14   <div class="text-flow">
15     <h1>Marco Von Ballmoos</h1>
16     <p>120-12 85th Avenue, Apt. 2E<br>
17       Kew Gardens, NY 11415<br>
18       718.441.6949 (Home)<br>
19       212.529.3913 x150 (Office)<br>
20       <a
21         href="mailto:&#109;&#97;&#114;&#99;&#111;&#64;&#101;&#97;&#114;&#116;&#104;&#108;&#105;&#46;&#99;&#111;&#109;">&#109;&#97;&#114;&#99;&#111;&#64;&#101;&#97;&#114;&#116;&#104;&#108;&#105;&#46;&#99;&#111;&#109;</a>
22     </p>
23     <h2>Skills</h2>
24     <dl>
25       <dt class="field">Experience/Expertise Matrix</dt>
26       <dd>
27         <p>This matrix shows a detailed list of programming languages, libraries and
28           APIs that I have used.</p>
29         <p class="notes">A <span class="reference">level</span> of 1-3 signifies beginner,
30           4-7 intermediate and 8-10 expert. <span class="reference">Experience</span>
31           is measured in years.</p>
32         <table class="basic columns left-labels numeric-data">
33           <tr>
34             <th>Programming</th>
35             <th>Level</th>
36             <th>Experience</th>
37           </tr>
38           <tr>
39             <td>OO Design</td>
40             <td>9</td>
41             <td>8</td>
42           </tr>
43           <tr>
44             <td>C++</td>
45             <td>9</td>
46             <td>6</td>
47           </tr>
48           <tr>
49             <td>MFC</td>
50             <td>8</td>
51             <td>6</td>
52           </tr>
53           <tr>
54             <td>STL</td>
55             <td>7</td>
56             <td>3</td>
57           </tr>
58           <tr>
59             <td>Object Pascal</td>
60             <td>7</td>
61             <td>4</td>
62           </tr>
63           <tr>
64             <td>VCL</td>
65             <td>6</td>
66             <td>3</td>
67           </tr>
68           <tr>
69             <td>Win32</td>
70             <td>9</td>
71             <td>7</td>
72           </tr>
73           <tr>
74             <td><span title="Metrowerks MacOS Framework">PowerPlant</span></td>
75             <td>6</td>
76             <td> 2</td>
77           </tr>
78           <tr>
79             <td>MacOS Toolbox</td>
80             <td>7</td>
81             <td>2</td>
82           </tr>
83           <tr>
84             <td>Eiffel</td>
85             <td>6</td>
86             <td>5</td>
87           </tr>
88           <tr>
89             <th>Database</th>
90             <th>Level</th>
91             <th>Experience</th>
92           </tr>
93           <tr>
94             <td>MySQL/SQL</td>
95             <td>7</td>
96             <td>2.5</td>
97           </tr>
98           <tr>
99             <td>SQL Server/T-SQL</td>
100             <td>7</td>
101             <td>1.5</td>
102           </tr>
103           <tr>
104             <th>Web</th>
105             <th>Level</th>
106             <th>Experience</th>
107           </tr>
108           <tr>
109             <td>PHP</td>
110             <td>9</td>
111             <td>2.5</td>
112           </tr>
113           <tr>
114             <td>ASP</td>
115             <td>8</td>
116             <td>1.5</td>
117           </tr>
118           <tr>
119             <td>JavaScript</td>
120             <td>8</td>
121             <td>6.5</td>
122           </tr>
123           <tr>
124             <td>CSS</td>
125             <td>9</td>
126             <td>5</td>
127           </tr>
128           <tr>
129             <td>HTML</td>
130             <td>10</td>
131             <td>6.5</td>
132           </tr>
133           <tr>
134             <td>DHTML</td>
135             <td>7</td>
136             <td>2</td>
137           </tr>
138           <tr>
139             <td>Graphic Design</td>
140             <td>6</td>
141             <td>8</td>
142           </tr>
143           <tr>
144             <td>Apache/MySQL Admin</td>
145             <td>6</td>
146             <td>2.5</td>
147           </tr>
148         </table>
149       </dd>
150     </dl>
151     <dl>
152       <dt class="field">Systems</dt>
153       <dd>Windows 3.x - 2000; MacOS 8.x - OS X</dd>
154       <dt class="field">Tools</dt>
155       <dd>Metrowerks CodeWarrior for C++ 4.0 - 7.0; Borland Delphi 1.0 - 6.0; ISE
156         Eiffel 4.5 - 5.1; Microsoft Visual C++ 4.0 - 6.0; Visual Parse++ 2.1 - 4.0;
157         DreamWeaver 2.0 - 4.01; Photoshop 4.0 - 6.01; Perforce 99.1 - 2001.1<br>
158       </dd>
159     </dl>
160     <h2>Work Experience</h2>
161     <h3>
162       Logicat Inc., New York, NY&nbsp;&nbsp;&nbsp;<span class="detail">Aug
163 1994 - Present</span></h3>
164     <p><span class="field">Logicat CE Manager</span>&nbsp;&nbsp;&nbsp;<span class="detail">Apr
165   2001 - Present</span></p>
166     <p>Designed and developed a web product that tracks continuing education credits
167       for attorneys in New York and California using IIS 5.0 and SQL Server 2000.
168       CE Manager includes:</p>
169     <ul>
170       <li>Validation for all data entry (users, courses, etc.).</li>
171       <li>A user search and reporting tool that lets administrators create customized
172         reports.
173       </li>
174       <li>Reminder and statement services for all licenses.</li>
175     </ul>
176     <p><span class="field">Logicat Online Testing</span>&nbsp;&nbsp;&nbsp;<span class="detail">Feb
177 2001 - Apr 2001</span></p>
178     <p>Worked with another developer to create a testing and test-authoring solution
179       for web sites using Microsoft IIS 5.0 and SQL Server 2000. This was used later
180       to build online learning solutions for clients.</p>
181     <p><span class="field">One-on-One with the SAT 2.0</span>&nbsp;&nbsp;&nbsp;<span class="detail">Jan
182 1999 - Feb 2001</span></p>
183     <p>Led a team of three developers to port the Logicat Test Engine to the MacOS
184       using Metrowerks CodeWarrior 5.0.</p>
185     <ul>
186       <li>Designed and developed a cross-platform library with a listener/broadcaster
187         event structure.
188       </li>
189       <li>Ported the ELF library to a custom cross-platform graphics library.</li>
190       <li>Implemented a cross-platform file-format with endian support.</li>
191       <li>Created new features such as arbitrarily nestable framesets and script/event
192         driven controls.
193       </li>
194       <li>Added support for dynamic/downloaded content.</li>
195     </ul>
196     <p><span class="field">Logicat Test Engine</span>&nbsp;&nbsp;&nbsp;<span class="detail">Nov
197 1997 - Dec 1998</span></p>
198     <p>Led a team of three developers to design and develop a system to create tests/tutorials
199       for multiple users for network or CD deployment on Windows using Visual C++
200       6.0.</p>
201     <ul>
202       <li>Test items and pages are created in an RTF-capable word processor with embedded
203         meta-tags.
204       </li>
205       <li>Item text can contain WYSIWYG text, paragraph and table formatting.</li>
206       <li>Items are compiled and assembled in a database using improved ELF technology
207         from the CPA software.
208       </li>
209       <li>Items can be scripted together with an event-based script language.</li>
210       <li>Tutorials can be enhanced using sounds, images and videos.</li>
211       <li>Tutorials can also gather and display user input and answers and can print
212         or e-mail results.
213       </li>
214     </ul>
215     <p><span class="field">Logicat CPA Review Software Update Release</span>&nbsp;&nbsp;&nbsp;<span class="detail">May
216 1997 - Nov 1997</span></p>
217     <p>Led a team of three developers to design and develop a study plan and calendar
218       to integrate the CPA software with a live course using Visual C++ 5.0. Used
219       Delphi 3.0 and OLE/COM to show PowerPoint presentations from the course.</p>
220     <p><span class="field">Performance Transfer Utility/Installer/Technical Manual</span>&nbsp;&nbsp;&nbsp;<span
221         class="detail">Feb
222 1997 - Apr 1997</span></p>
223     <p>Designed and developed a utility to manage a hardware copy protection library
224       using Delphi 2.0 and incorporated it into an installer using Wise 5.0. Created
225       a 100-page manual using HTML and CSS for the Technical Support department.</p>
226     <p><span class="field">Logicat CPA Review Software</span>&nbsp;&nbsp;&nbsp;<span class="detail">Aug
227 1996 - Jan 1997</span></p>
228     <p>Incorporated ELF into the <span class="reference">PassMaster</span> code base
229       as the main presentation and data storage engine. Created customized components
230       descended from the ELF object library.</p>
231     <p><span class="field">ELF</span>&nbsp;&nbsp;&nbsp;<span class="detail">Feb 1996
232 - Aug 1996</span></p>
233     <p>Designed and developed ELF, an object-oriented interactive document system
234       in Borland Delphi 2.0 and Microsoft Visual C++ 4.1. Created EML, an HTML-like
235       language, an RTF parser and a compound document format to convert existing data
236       from RTF to ELF.</p>
237     <p><span class="field">PassMaster CPA Review Web Site</span>&nbsp;&nbsp;&nbsp;<span class="detail">Dec
238 1995 - Jan 1996</span></p>
239     <p>Developed a web site for <span class="reference">PassMaster</span>, Logicat's
240       CPA test preparation product. Used JavaScript to present a 40-question demonstration
241       of the test preparation software.</p>
242     <p><span class="field">One-on-One with the SAT Counselor Utility</span>&nbsp;&nbsp;&nbsp;<span class="detail">Sep
243 1995 - Nov 1995</span></p>
244     <p>Created a management and reporting utility for One-on-One with the SAT for
245       multi-user networked school distributions using Borland Object Pascal 7.0.</p>
246     <p><span class="field">One-on-One with the SAT</span>&nbsp;&nbsp;&nbsp;<span class="detail">Aug
247 1994 - Sept 1995</span></p>
248     <p>Designed and developed a test preparation program for the SAT in conjunction
249       with The College Board using Borland Object Pascal 7.0.</p>
250     <hr>
251     <h3>
252       earthli.com, New York, NY&nbsp;&nbsp;&nbsp;<span class="detail">Oct
253 1999 - Dec 2001</span></h3>
254     <p><span class="field"><a href="http://www.earthli.com/projects">earthli Projects</a></span>&nbsp;&nbsp;&nbsp;<span
255         class="detail">Mar
256 2002 - Jul 2002</span></p>
257     <p>Developed a project manager based on the <span class="reference">WebCore</span>.
258       Includes changes to record work completed and jobs to indicate work to do. Generates
259       formatted changelists and tracks revisions.</p>
260     <p><span class="field"><a href="http://www.earthli.com/news">earthli News</a></span>&nbsp;&nbsp;&nbsp;<span
261         class="detail">Jan
262   2001 - Feb 2001</span></p>
263     <p>Rewrote the <span class="reference">Forums</span> as a <span class="reference">WebCore</span>
264       application called <span class="reference">earthli News</span>. Once again,
265       a large amount of code reuse helped create a stable, full-featured news service
266       quickly and easily. Includes a subscription service.</p>
267  
268     <p><span class="field"><a href="http://www.earthli.com/recipes/">earthli Recipes</a></span>&nbsp;&nbsp;&nbsp;<span
269         class="detail">Jan
270 2001 - Feb 2001</span></p>
271     <p>Created a second <span class="reference">WebCore</span> application to manage
272       recipes. Most of the functionality for this application was incorporated unchanged
273       from the <span class="reference">WebCore</span>, like the user/security model,
274       comments and full-text searching.</p>
275  
276     <p><span class="field"><a href="http://www.earthli.com/albums/">earthli Photo
277           Albums 2.0</a></span>&nbsp;&nbsp;&nbsp;<span class="detail">Oct 2001 - Dec 2001</span></p>
278     <p>Rebuilt the <span class="reference">earthli Photo Albums</span> to include
279       many of the ideas developed in the <span class="reference">Forums</span>. Most
280       of the actual technology was reworked and incorporated into a general-purpose
281       back-end called the <span class="reference">earthli WebCore</span>. The <span class="reference">WebCore</span>
282       is a content management system written in PHP that can be extended to serve
283       many purposes. The Photo Albums are one such extension and they inherit many
284       of their new features directly from the <span class="reference">WebCore</span>,
285       such as enhanced security, nested albums, content management, anonymous users
286       and comments.</p>
287     <p><span class="field"><a href="http://www.earthli.com/settings.php">earthli
288           Themes</a></span>&nbsp;&nbsp;&nbsp;<span class="detail">Jun 2001 - Sep 2001</span></p>
289     <p>Redesigned the web site using only one set of styles, converting all existing
290       content to a uniform namespace. Implemented several themes on top of this
291       system that completely change the look (though not the layout) of the site.</p>
292     <p><span class="field">earthli Forums</span>&nbsp;&nbsp;&nbsp;<span class="detail">Oct
293   2001 - Dec 2001</span></p>
294     <p>Designed and developed a bulletin board system using PHP 4.x and MySQL 3.x.
295       It includes a flexible security system that describes rights for anonymous
296       users, registered users, groups and individuals. Other standard features include
297       full-text searching, nested replies and user profile pages. In 2001, the system
298       was updated to integrate with the <span class="reference">earthli Themes</span>.</p>
299     <p><span class="field">earthli Photo Albums 1.0</span>&nbsp;&nbsp;&nbsp;<span class="detail">Oct
300   1999 - Jul 2000</span></p>
301     <p>Designed and developed an online photo album using PHP 3.x and MySQL 3.x.
302       The system included multiple users, albums, pictures, journal entries and
303       a calendar.</p>
304     <h2>History</h2>
305     <h3>
306       Cross-Platform Content Engine </h3>
307     <p>I was first introduced to object-oriented programming in August of 1994 when
308       I started working at Logicat. I had been hired straight out of college and was
309       in charge of designing and programming an SAT test preparation program that
310       would later become known as <span class="reference">One-on-One with the SAT</span>.
311       I wrote the program in <span class="reference">Borland Object Pascal 7.0</span>
312       with the part-time aid of another programmer. The final product was only part
313       of the project, which also included a parser to convert RTF documents to a proprietary
314       format and several indexing tools for building the content database that the
315       program used. Soon after, I also wrote a utility for multi-user installations
316       that allowed an administrator to maintain the user database and print progress
317       reports. The utility was much easier to write because I was able to re-use much
318       of the code from <span class="reference">One-on-One</span> itself.</p>
319     <p>Early in 1996, with <span class="reference">One-on-One</span> shipped and most
320       support issues addressed, I wanted to focus on building software that wasn't
321       so project-specific. I began to write a new document renderer which would be
322       much more flexible and would concentrate only on displaying content and handling
323       events. I wrote the initial prototype in <span class="reference">Borland Delphi
324 1.0</span> and christened it <span class="reference">ELF</span>. The prototype
325       supported arbitrarily nested tables, images and multiple text styles.</p>
326     <p><span class="reference">ELF</span> would see use in the next incarnation of
327       Logicat's CPA test preparation software. First, I converted the prototype to
328       <span class="reference">Microsoft Visual C++ 4.0</span> to ease integration
329       into the existing code base. I also developed a very HTML-like document description
330       language called <span class="reference">EML</span>, complete with a parser and
331       an import filter for RTF documents. The RTF importer allowed content designers
332       to use all of the sophisticated editing capabilities of Microsoft Word to arrange
333       text. <span class="reference">EML</span> tags describe the structure, layout
334       and display properties of document data. Some tags break a document into separate
335       objects, whereas others describe the display properties of those objects. This
336       would form the core of the program.</p>
337     <p>The <span class="reference">CPA Software</span> also extended the <span class="reference">ELF</span>
338       library with objects that provided customized event handling. Much of the <span class="reference">CPA
339 Software's</span> program logic was still based on existing code from previous
340       versions of the <span class="reference">CPA Software</span>, but the content
341       creation, file format and data rendering/event handling were all based on <span class="reference">ELF</span>.
342       This project was also where I began using preconditions and postconditions,
343       which I simulated in C++ using assertions.</p>
344     <p>Towards the end of 1997, the <span class="reference">CPA Software</span> had
345       undergone more changes, but the <span class="reference">ELF</span> library was
346       still the only truly reusable portion. Seeing a need for a more flexible tool
347       that could address many different testing and training needs, Logicat set out
348       to build a <span class="reference">Test Engine</span>. It was to serve as a
349       development environment for building tutorials and testing materials and would
350       have to be more flexible to cover a broader range of needs.</p>
351     <p>The first step in making a more general <span class="reference">Test Engine</span>
352       was to move the content-specific program logic out of the executable. To this
353       end, I designed a simple scripting language and built a compiler and interpreter
354       for it. The language supports conditionals, loops and user-defined routines
355       and has an easily extensible library of built-in routines to access engine
356       functionality. Most of the user-defined routines serve as event handlers called
357       by other components of the <span class="reference">Test Engine</span>. There
358       were also some routines for manipulating the database of items created by
359       the content creation tools. Combined with support for sounds, images and movies,
360       a content designer could put together sophisticated presentations that varied
361       widely.</p>
362     <p>All of the code for the <span class="reference">Test Engine</span> makes
363       extensive use of preconditions and postconditions to ensure program correctness.
364       The two other developers on the project would build layers of more specific
365       objects atop the basic engine and the assertions answered many of their questions
366       before they were even asked. Since the engine was composed of so many components,
367       I implemented a subscriber/publisher system that connected them together using
368       abstract interfaces and kept them as separate as possible.
369       <!--Of course, in this
370       case, a system based on Eiffel's agent technology would have provided an even
371       more elegant solution, but a template-based version was acceptable.-->
372     </p>
373     <p>In January of 1999, Logicat began work on <span class="reference">One-on-One
374 with the SAT 2.0</span>. The <span class="reference">Test Engine</span> was
375       about to take its next step as they wanted this version to work on both Windows
376       and Macintosh. Starting in January of 1999, I spent several months reworking
377       the Windows version of the <span class="reference">Test Engine</span> to function
378       as a cross-platform version with Windows extensions. At this point, I was developing
379       in <span class="reference">Microsoft Visual C++ 6.0</span>. There were innumerable
380       dependencies on Windows or library-specific classes and functions that had to
381       be changed or eliminated. The MFC CString class was replaced with a version
382       based on the C++ Library string class. Direct calls to determine screen size
383       or amount of memory available were replaced with DISPLAY and SYSTEM classes,
384       respectively. At each juncture, I put as much functionality as possible into
385       cross-platform code and designed my classes so that the platform-specific version
386       was as thin as possible.</p>
387     <p>Once a rudimentary version of the <span class="reference">Test Engine</span>
388       was functioning in this way, we moved the code to the Macintosh using <span class="reference">Metrowerks
389 CodeWarrior 4.0/5.0</span>. With the <span class="reference">Test Engine</span>
390       using only platform-independent interfaces for system components, it was simple
391       to develop Macintosh versions of system objects and snap them into place. Very
392       quickly, the Macintosh version caught up to the Windows version in functionality.
393       The final product had most of the code in a cross-platform <span class="reference">Test
394 Engine</span> that encapsulated all of the program logic, with platform-specific
395       plugins filling in functionality. In the end, we had to write classes to handle
396       much of a common GUI program's functionality: file handling (based on C++ Library),
397       file system, 2-D graphics, sound, movies, printing, timers and window manager.
398       The data format was made compatible across platforms. </p>
399     <p>To support the feature set of a large program like <span class="reference">One-on-One</span>,
400       the <span class="reference">Test Engine</span> was expanded to support an arbitrary
401       number of windows, frames within frames (like HTML) and much more dynamic content.</p>
402     <p>The final product is a very web browser-like product that runs on both Windows
403       and Macintosh natively, with no performance advantage on either platform and
404       about 90% code shared. Most importantly, the <span class="reference">Test Engine</span>
405       has no code customized to <span class="reference">One-on-One Version 2.0</span>.
406       All functionality and content of <span class="reference">One-on-One</span> is
407       defined in RTF data files, a script file and supporting media like pictures,
408       sounds and movies and is completely separated from the <span class="reference">Test
409 Engine</span> code. Thanks to assertions, there was far less of a need for debugging
410       than on previous projects and the completion of <span class="reference">One-on-One
411 Version 2.0</span> was far easier than <span class="reference">One-on-One Version
412 1.0.</span></p>
413     <hr>
414     <h3>Web-based Content Management </h3>
415     <p>I started writing web applications in October 1999 on my own web site, <a
416         href="http://www.earthli.com">earthli.com</a>.
417       After some research, I chose the now familiar Apache/PHP/MySQL development environment.
418       My first real application was a photo gallery to share vacation photographs
419       online. Each photo album belonged to a user, who was able to edit it when logged
420       in. The public could browse through the entire album with read-only access.
421       Later, a list of editors was added to albums to allow collaboration between
422       users.</p>
423     <p>My next project was a project manager for keeping track of change lists, revisions
424       and build history for various projects. It occurred to me that this project
425       and the previous photo albums shared many similar characteristics, which would
426       be required of almost any collaborative web application. Each required user
427       accounts, user validation and rights management, support for user comments and
428       so on. I began creating these shared components with the goal of building the
429       project manager on top of them.</p>
430     <p>From this work grew the <span class="reference">earthli Forums</span>, which
431       implemented a robust security model, nested folders, nested comments, anonymous
432       user tracking etc., but still wasn't built generically enough; it didn't allow
433       easy adaptation to other applications. Late in 2001, I began work on the <span class="reference">WebCore</span>,
434       which would incorporate the code from the <span class="reference">Forums</span>,
435       but adapted to a more generic framework and whose API would be defined by a
436       class-hierarchy.</p>
437     <p>The <span class="reference">WebCore</span> has several properties:</p>
438     <ul>
439       <li>Content is treated as contained within a nested hierarchy of folders. Folders
440         can inherit rights from their parents. Any application can define multiple
441         types of objects.
442       </li>
443       <li>Anonymous browsing is supported seamlessly with logged-in users.</li>
444       <li>The security model is enforced within the library, returning only data that
445         the browser has been validated to see. Users can be granted individual rights
446         to create, modify, delete, purge content or modify rights within folders.
447       </li>
448       <li>Folder level rights can be granted to anonymous user, registered users,
449         to a group of users or to individual users.
450       </li>
451       <li>User level rights can be granted or denied regardless of folder to ban users
452         or create administrators.
453       </li>
454       <li>Every piece of data in the system is exposed as an object. Each object records
455         its creation and modification information. Objects are retrieved using query
456         objects that handle pagination and rights enforcement.
457       </li>
458       <li>Proper separation of code and display logic is emphasized. The web pages
459         themselves deal only with PHP objects; queries are made through an object
460         layer, so the pages themselves are not only unaware that a MySQL database
461         is used, they are unaware that an SQL database is being used at all. In many
462         cases, other PHP objects, like grids and trees, handle display and HTML generation
463         as well, .
464       </li>
465       <li>Full-text searching is supported in the query object.</li>
466       <li>Several other classes are available, including a browser class for determining
467         the user agent, a text formatter class for displaying HTML data and a grid
468         class that works with the query classes to paginate objects into a grid.
469       </li>
470     </ul>
471     <p>Version 2.0 of the <span class="reference">Photo Albums</span> was built on
472       top of the <span class="reference">WebCore</span> at the same time as the <span class="reference">WebCore</span>
473       itself was being developed. Soon after, the second application to be built with
474       the <span class="reference">WebCore</span> was <span class="reference">earthli
475 Recipes</span>, which was ready for testing and demonstration in just over a
476       week. During development of the <span class="reference">Recipes</span>, I created
477       a set of pages that handled setting user and folder rights and creating, editing,
478       deleting and viewing comments that could be used 'as is' if no customization
479       was required by the application. This would help bring future application up
480       to speed even more quickly.</p>
481     <p><span class="reference">earthli News</span> followed soon after and allowed
482       me to retire the old <span class="reference">Forums</span> software and use
483       only applications build with the <span class="reference">WebCore</span>. The
484       fact that the <span class="reference">WebCore</span> handled the bulk of the
485       processing, validation and querying left me free to focus on designing a better
486       interface for presenting news. Also, fixed bugs and new features are applied
487       to all earthli applications simultaneously because of the large amount of
488       shared code. My latest <span class="reference">WebCore</span> application
489       is creating the project manager I started over a year ago. Once again, it's
490       off to a quick start because so much of the functionality is already available
491       in the <span class="reference">WebCore</span>.</p>
492     <h2>Education</h2>
493     <h3>Hamilton College, Clinton, New York</h3>
494     <p>Bachelor of Arts in Mathematics in May, 1994<br>
495       Major: Mathematics; Minor: Physics</p>
496   </div>
497 </div>
498 <?php
499   $Page->finish_display ();
500 ?>
501