Fundamentals of Web Applications (Fall 2013): Difference between revisions
(35 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
*'''Title:''' Fundamentals of Web Applications | *'''Title:''' Fundamentals of Web Applications | ||
*'''Institution:''' Carleton University, School of Computer Science | *'''Institution:''' Carleton University, School of Computer Science | ||
*'''Instructor:''' [http://people.scs.carleton.ca/~soma Anil Somayaji] (anilsomayaji at connect.carleton.ca): Tues. 1-2 and Wed. 1:30-2:30 | *'''Instructor:''' [http://people.scs.carleton.ca/~soma Anil Somayaji] (anilsomayaji at connect.carleton.ca): Tues. 1-2 and Wed. 1:30-2:30 in HP 5137 | ||
*'''Teaching Assistants:'''<br>Ann Fry (afry at ccsl.carleton.ca): Thurs. 2-4 PM<br>Michael Bingham (mbingham at ccsl.carleton.ca): Mon: 12-2 PM | *'''Teaching Assistants:'''<br>Ann Fry (afry at ccsl.carleton.ca): Thurs. 2-4 PM in HP 1170<br>Michael Bingham (mbingham at ccsl.carleton.ca): Mon: 12-2 PM in HP 1170 | ||
*'''Lectures:''' Mon. and Wed. 2:30-4 PM, SA 518 | *'''Lectures:''' Mon. and Wed. 2:30-4 PM, SA 518 | ||
*'''Tutorials:''' Friday 11:30-1 PM, HP 4155 | *'''Tutorials:''' Friday 11:30-1 PM, HP 4155 | ||
Line 51: | Line 51: | ||
These books have been ordered by the University bookstore. You may also buy them online in paper or ebook form. They are also available through [https://ssl.safaribooksonline.com Safari Books Online]. There is even [https://www.inkling.com/store/book/javascript-good-parts-douglas-crockford-1st/ an interactive version] of Crockford's book which includes an embedded JavaScript interpreter. You can get access to Safari Books Online through the Carleton Library (four concurrent users only) or partial access by becoming a member of [https://www.computer.org IEEE Computer Society]. | These books have been ordered by the University bookstore. You may also buy them online in paper or ebook form. They are also available through [https://ssl.safaribooksonline.com Safari Books Online]. There is even [https://www.inkling.com/store/book/javascript-good-parts-douglas-crockford-1st/ an interactive version] of Crockford's book which includes an embedded JavaScript interpreter. You can get access to Safari Books Online through the Carleton Library (four concurrent users only) or partial access by becoming a member of [https://www.computer.org IEEE Computer Society]. | ||
==Course Software== | |||
In this course we will be developing web applications using [http://nodejs.org/ node.js] and [http://www.mongodb.org/ mongoDB]. You are welcome to use whatever operating system and development tools you like; however, we will supporting the use of a course virtual machine appliance running [http://www.lubuntu.net/ Lubuntu], a low-resource variant of [http://www.ubuntu.com/ Ubuntu] Linux distribution. | |||
===In the labs=== | |||
In the SCS labs you should be able to run the course VM by starting Virtualbox (listed in the Applications menu) and selecting the Lubuntu virtual machine image. After the VM has fully booted up you can login to the student account using the password "tneduts!". This account has administrative privileges; in addition, there is the admin account in case your student account gets corrupted for any reason. The password for it is "nimda!". | |||
We highly recommend running your VM in full-screen mode. Do all of your work inside of the VM; it should be fast enough and you won't have any issues with sharing files or with firewalls/network connectivity. | |||
You can save the work you do from the course VM (in the student account) to your SCS account and restore it to any other copy of the class VM (on your machines or in the labs) by running using the following commands: | |||
save2406 <SCS username> | |||
restore2406 <SCS username> | |||
compare2406 <SCS username> | |||
If you use these commands, '''use them consistently'''. That means run <tt>restore2406</tt> when you first log in, and run <tt>save2406</tt> just before logging out. If you don't do this, you will '''erase''' the work that you had done previously when you save. | |||
If you forgot to restore and you want to save, try running this: | |||
rsync -a -v --progress ~/ <SCS username>@access.scs.carleton.ca:COMP2406/ | |||
This is the same as the <tt>save2406</tt> command minus the options (--delete and --force) that deletes files in the destination that don't exist in the source. As a check, you may want to add the <tt>-n</tt> option to do a dry run. | |||
===Running the VM on your own machines=== | |||
If you want to run the VM appliance on your own system (running essentially any desktop operating system you want), just download the [http://homeostasis.scs.carleton.ca/~soma/webfund-2013f/Lubuntu.ova Lubuntu.ova] [http://people.scs.carleton.ca/~soma/webfund-2013f/Lubuntu.ova (alternate source)] virtual appliance file and import. The SHA1 hash of this file is: | |||
f79dc19f76247957e7216e7227891ffe8a74761f Lubuntu.ova | |||
On Windows you can compute this hash for your downloaded file using the command <a href="http://support.microsoft.com/kb/889768"><tt>FCIV -sha1 Lubuntu.ova</tt></a>. If the hash is different from above, your download has been corrupted. | |||
If the application is not VirtualBox, you'll need to: | |||
* Have the VM platform ignore any errors in the structure of the appliance; | |||
* Uninstall the VirtualBox guest additions by typing starting a terminal application and running | |||
sudo /opt/VBoxGuestAdditions-4.2.16/uninstall.sh | |||
* Install your platform's own Linux guest additions, if available. | |||
===Configuring Linux=== | |||
If you already run Linux and you want to use the same packages we do in class, you should do the following: | |||
* Install the latest node.js version using [https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager a package manager]. (You generally don't use the version that comes with your distribution, it is probably too old.) | |||
* Install [http://www.mongodb.org/ mongoDB] - it probably goes by mongodb in your package manager. The version doesn't matter too much. | |||
* For the same editing experience, install [http://www.geany.org/ Geany] (or just use your favorite editor). | |||
Note that the binary of the node.js executable may be <tt>node</tt>, <tt>nodejs</tt>, or something similar. | |||
That's it! | |||
==Other Resources== | ==Other Resources== | ||
Line 200: | Line 250: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Midterm (in class) | <p>Midterm (in class) [http://homeostasis.scs.carleton.ca/~soma/webfund-2013f/comp2406-midterm-2013f-solutions.pdf (solutions)] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 210: | Line 260: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 12|Lecture 12]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 220: | Line 270: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 13|Lecture 13]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 230: | Line 280: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 14|Lecture 14]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 240: | Line 290: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 15|Lecture 15]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 250: | Line 300: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 16|Lecture 16]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 260: | Line 310: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 17|Lecture 17]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 270: | Line 320: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 18|Lecture 18]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 280: | Line 330: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 19|Lecture 19]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 290: | Line 340: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 20|Lecture 20]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 300: | Line 350: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 21|Lecture 21]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 310: | Line 360: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 22|Lecture 22]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 320: | Line 370: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>[[WebFund 2013F Lecture | <p>[[WebFund 2013F Lecture 23|Lecture 23]] | ||
</p> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td> | |||
<p>Dec. 12, 12:30-2 PM | |||
</p> | |||
</td> | |||
<td> | |||
<p>[[WebFund 2013F Final Exam Review|Review session]] in LA C164 | |||
</p> | </p> | ||
</td> | </td> | ||
Line 326: | Line 386: | ||
<tr> | <tr> | ||
<td> | <td> | ||
<p> | <p>Dec. 16, 9 AM | ||
</p> | </p> | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Final Exam | <p>Final Exam in AT 302 ([http://homeostasis.scs.carleton.ca/~soma/webfund-2013f/comp2406-final-2013f-sol.pdf solutions]) | ||
</p> | </p> | ||
</td> | </td> | ||
Line 375: | Line 435: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 3|Web Form basics]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 385: | Line 445: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 4|Debugging]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 395: | Line 455: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 5|Sessions]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 405: | Line 465: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 6|Simple Adventure]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 415: | Line 475: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 7|Small Adventure]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 426: | Line 486: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 8|Letterpaint]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 436: | Line 496: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 9|AJAX Adventure]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 446: | Line 506: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 10|Simple Blog]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 456: | Line 516: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 11|Authenticated Sessions]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 466: | Line 526: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 12|Database Demo]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 476: | Line 536: | ||
</td> | </td> | ||
<td> | <td> | ||
<p> | <p>[[WebFund 2013F: Tutorial 13|Greasemonkey]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 499: | Line 559: | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Assignment 1 | <p>[[WebFund 2013F: Assignment 1|Assignment 1]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 505: | Line 565: | ||
<tr> | <tr> | ||
<td> | <td> | ||
<p>Oct. | <p>Oct. 17 | ||
</p> | </p> | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Assignment 2 | <p>[[WebFund 2013F: Assignment 2|Assignment 2]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 515: | Line 575: | ||
<tr> | <tr> | ||
<td> | <td> | ||
<p>Nov. | <p>Nov. 18 | ||
</p> | </p> | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Assignment 3 | <p>[[WebFund 2013F: Assignment 3|Assignment 3]] | ||
</p> | </p> | ||
</td> | </td> | ||
Line 525: | Line 585: | ||
<tr> | <tr> | ||
<td> | <td> | ||
<p>Dec. | <p>Dec. 9 | ||
</p> | </p> | ||
</td> | </td> | ||
<td> | <td> | ||
<p>Assignment 4 | <p>[[WebFund 2013F: Assignment 4|Assignment 4]] | ||
</p> | </p> | ||
</td> | </td> |
Latest revision as of 17:38, 16 December 2013
Course Information
- Course Number: COMP 2406
- Term: Fall 2013
- Title: Fundamentals of Web Applications
- Institution: Carleton University, School of Computer Science
- Instructor: Anil Somayaji (anilsomayaji at connect.carleton.ca): Tues. 1-2 and Wed. 1:30-2:30 in HP 5137
- Teaching Assistants:
Ann Fry (afry at ccsl.carleton.ca): Thurs. 2-4 PM in HP 1170
Michael Bingham (mbingham at ccsl.carleton.ca): Mon: 12-2 PM in HP 1170 - Lectures: Mon. and Wed. 2:30-4 PM, SA 518
- Tutorials: Friday 11:30-1 PM, HP 4155
- Course Website: http://homeostasis.scs.carleton.ca/wiki/index.php?title=Fundamentals_of_Web_Applications_%28Fall_2013%29
Official Course Description
An introduction to Internet application development that emphasizes the computer science fundamentals of the technologies underlying web applications. Topics include: scripting and functional languages, languagebased virtual machines, database query languages, remote procedure calls over the Internet, and performance and security concerns in modern distributed applications.
Grading
Grades for this course will be divided as follows:
- 20% for four assignments
- 20% for tutorial participation
- 25% for the Midterm Exam
- 35% for the Final Exam
Optionally you may do a project in lieu of the assignments. This project may be individual or a group project. To do this you must inform the instructor that this is what you are doing by the due date for the second assignment.
Communication
This wiki page is the canonical source of information on this course. Please refer to it for updates. When significant changes are made to this document it will be either announced in lecture and/or posted in the course discussion forum.
Course discussions will be on cuLearn. While you may discuss assignments there, do not post answers to assigned questions.
You may get an account on this wiki so you can edit content here. Email Prof. Somayaji to get one with your preferred username and email address to which a password should be sent. (Note this is not a requirement.)
Collaboration
Collaboration on all work is allowed except for the midterm and final exams. Collaboration, however, should be clearly acknowledged. Further, all submitted work should be your own. While you may get help from others and even collaboratively solve technical problems, the code and answers should all be your own work. For example, you may not divide an assignment into parts, give a part to another student or anyone else to solve, and then submit that work as your own. You have to have participated in the creation of every part of your submitted work.
An easy way to make sure this happens is never share files regarding coursework or copy and paste answers into email. Instead, meet together to work on an assignment and then separate to write up your solutions.
Similarity between submitted assignments that has not been appropriately documented will be treated as plagiarism - the same as copying on a midterm or a final- and will be submitted to the Dean for disciplinary action.
Required Textbooks
There are two required texts for this course:
- JavaScript: The Good Parts by Douglas Crockford.
- Learning Node by Shelley Powers.
These books have been ordered by the University bookstore. You may also buy them online in paper or ebook form. They are also available through Safari Books Online. There is even an interactive version of Crockford's book which includes an embedded JavaScript interpreter. You can get access to Safari Books Online through the Carleton Library (four concurrent users only) or partial access by becoming a member of IEEE Computer Society.
Course Software
In this course we will be developing web applications using node.js and mongoDB. You are welcome to use whatever operating system and development tools you like; however, we will supporting the use of a course virtual machine appliance running Lubuntu, a low-resource variant of Ubuntu Linux distribution.
In the labs
In the SCS labs you should be able to run the course VM by starting Virtualbox (listed in the Applications menu) and selecting the Lubuntu virtual machine image. After the VM has fully booted up you can login to the student account using the password "tneduts!". This account has administrative privileges; in addition, there is the admin account in case your student account gets corrupted for any reason. The password for it is "nimda!".
We highly recommend running your VM in full-screen mode. Do all of your work inside of the VM; it should be fast enough and you won't have any issues with sharing files or with firewalls/network connectivity.
You can save the work you do from the course VM (in the student account) to your SCS account and restore it to any other copy of the class VM (on your machines or in the labs) by running using the following commands:
save2406 <SCS username> restore2406 <SCS username> compare2406 <SCS username>
If you use these commands, use them consistently. That means run restore2406 when you first log in, and run save2406 just before logging out. If you don't do this, you will erase the work that you had done previously when you save.
If you forgot to restore and you want to save, try running this:
rsync -a -v --progress ~/ <SCS username>@access.scs.carleton.ca:COMP2406/
This is the same as the save2406 command minus the options (--delete and --force) that deletes files in the destination that don't exist in the source. As a check, you may want to add the -n option to do a dry run.
Running the VM on your own machines
If you want to run the VM appliance on your own system (running essentially any desktop operating system you want), just download the Lubuntu.ova (alternate source) virtual appliance file and import. The SHA1 hash of this file is:
f79dc19f76247957e7216e7227891ffe8a74761f Lubuntu.ova
On Windows you can compute this hash for your downloaded file using the command <a href="http://support.microsoft.com/kb/889768">FCIV -sha1 Lubuntu.ova</a>. If the hash is different from above, your download has been corrupted.
If the application is not VirtualBox, you'll need to:
- Have the VM platform ignore any errors in the structure of the appliance;
- Uninstall the VirtualBox guest additions by typing starting a terminal application and running
sudo /opt/VBoxGuestAdditions-4.2.16/uninstall.sh
- Install your platform's own Linux guest additions, if available.
Configuring Linux
If you already run Linux and you want to use the same packages we do in class, you should do the following:
- Install the latest node.js version using a package manager. (You generally don't use the version that comes with your distribution, it is probably too old.)
- Install mongoDB - it probably goes by mongodb in your package manager. The version doesn't matter too much.
- For the same editing experience, install Geany (or just use your favorite editor).
Note that the binary of the node.js executable may be node, nodejs, or something similar.
That's it!
Other Resources
JavaScript
The easiest way to get started with JavaScript and get basic understanding of web technologies is to go through the interactive lessons on Code Academy. I suggest you go through their JavaScript, Web Fundamentals, and jQuery tracks. They shouldn't take you very long to do given that you already know how to program.
Crockford also has a lot of online resources on JavaScript, including videos of talks he's given that cover much of the content in his book. Look at his JavaScript page and this page of his videos.
Another good book is Eloquent JavaScript: A Modern Introduction to Programming by Marijn Haverbeke. A version of this book is available online for free. The for-sale version is apparently updated and edited.
The standard reference for JavaScript is JavaScript: The Definitive Guide by David Flanagan. It is a big book, but it is comprehensive.
Node
Another introduction to node.js is The Node Beginner Book by Manuel Kiessling.
This page by Evan Hahn has a good overview of the express/connect/node software stack.
Lectures and Exams
Date |
Topic |
---|---|
Sept. 9 |
|
Sept. 11 |
|
Sept. 16 |
|
Sept. 18 |
|
Sept. 23 |
|
Sept. 25 |
|
Sept. 30 |
|
Oct. 2 |
|
Oct. 7 |
|
Oct. 9 |
|
Oct. 16 |
|
Oct. 21 |
Midterm (in class) (solutions) |
Oct. 23 |
|
Nov. 4 |
|
Nov. 6 |
|
Nov. 11 |
|
Nov. 13 |
|
Nov. 18 |
|
Nov. 20 |
|
Nov. 25 |
|
Nov. 27 |
|
Dec. 2 |
|
Dec. 4 |
|
Dec. 9 |
|
Dec. 12, 12:30-2 PM |
Review session in LA C164 |
Dec. 16, 9 AM |
Final Exam in AT 302 (solutions) |
Tutorials
Each week you will get a progress grade from 0-4, given to you by a TA. If you are being diligent, you should be able to get 4's every week. The easiest way to get your grade is to come to tutorial and meet with your TA; alternately, you can meet a TA in their office hours or, at their discretion, discuss things with them online.
Date |
Tutorials |
---|---|
Sept. 6 |
|
Sept. 13 |
|
Sept. 20 |
|
Sept. 27 |
|
Oct. 4 |
|
Oct. 11 |
|
Oct. 18 |
|
Oct. 25 |
|
Nov. 8 |
|
Nov. 15 |
|
Nov. 22 |
|
Nov. 29 |
|
Dec. 6 |
Assignments
Due Date |
Assignments |
---|---|
Oct. 3 |
|
Oct. 17 |
|
Nov. 18 |
|
Dec. 9 |
University Policies
Student Academic Integrity Policy
Every student should be familiar with the Carleton University student academic integrity policy. A student found in violation of academic integrity standards may be awarded penalties which range from a reprimand to receiving a grade of F in the course or even being expelled from the program or University. Some examples of offences are: plagiarism and unauthorized co-operation or collaboration. Information on this policy may be found in the Undergraduate Calendar.
Plagiarism
As defined by Senate, "plagiarism is presenting, whether intentional or not, the ideas, expression of ideas or work of others as one's own". Such reported offences will be reviewed by the office of the Dean of Science.
Unauthorized Co-operation or Collaboration
Senate policy states that "to ensure fairness and equity in assessment of term work, students shall not co-operate or collaborate in the completion of an academic assignment, in whole or in part, when the instructor has indicated that the assignment is to be completed on an individual basis".
Please see above for the specific collaboration policy for this course.
Academic Accommodations for Students with Disabilities
The Paul Menton Centre for Students with Disabilities (PMC) provides services to students with Learning Disabilities (LD), psychiatric/mental health disabilities, Attention Deficit Hyperactivity Disorder (ADHD), Autism Spectrum Disorders (ASD), chronic medical conditions, and impairments in mobility, hearing, and vision. If you have a disability requiring academic accommodations in this course, please contact PMC at 613-520-6608 or pmc@carleton.ca for a formal evaluation. If you are already registered with the PMC, contact your PMC coordinator to send me your Letter of Accommodation at the beginning of the term, and no later than two weeks before the first in-class scheduled test or exam requiring accommodation (if applicable). After requesting accommodation from PMC, meet with me to ensure accommodation arrangements are made. Please consult the PMC website for the deadline to request accommodations for the formally-scheduled exam (if applicable) at http://www2.carleton.ca/pmc/new-and-current-students/dates-and-deadlines
Religious Obligation
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: http://www2.carleton.ca/equity/
Pregnancy Obligation
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: http://www2.carleton.ca/equity/
Medical Certificate
The following is a link to the official medical certificate accepted by Carleton University for the deferral of final examinations or assignments in undergraduate courses. To access the form, please go to http://www.carleton.ca/registrar/forms