CSE 163, Winter 2021: Syllabus

CSE 163: Intermediate Data Programming

Note: Times are listed for the PST time zone (Seattle's time) in 24-hour clock time (e.g. 14:30 is 2:30 pm). You can use this or another time converter to convert to your local time.

Overview

Teaching staff:

Times:

  • Class Sessions: 15:30 - 16:20 (PST), on Zoom

Other:

Goals

The world has become data-driven. Domain scientists and industry increasingly rely on data analysis to drive innovation and discovery; this reliance on data is not only restricted to science or business, but also is crucial to those in government, public policy, and those wanting to be informed citizens. As the size of data continues to grow, everyone will need to use powerful tools to work with that data.

This course teaches intermediate data programming. It is a follow on to CSE142 (Computer programming I) or CSE160 (Data Programming).

The course complements CSE143, which focuses more deeply on fundamental programming concepts and the internals of data structures. In contrast, CSE163 emphasizes the efficient use of those concepts for data programming.

In this course, students will learn:

  1. More advanced programming concepts than in CSE142 or CSE160 including how to write bigger programs with multiple classes and modules.
  2. How to work with different types of data: tabular, text, images, geo-spatial.
  3. Ecosystem of data science tools including Jupyter Notebook and various data science libraries including scikit image, scikit learn, and Pandas data frames.
  4. Basic concepts related to code complexity, efficiency of different types of data structures, and memory management.

Class Sessions

Motivated by the shift to the online quarter, we will be transitioning to a "flipped classroom" model for our instruction. To accomplish this the lecture content (called "lessons") will be done asynchronously via our learning management system EdStem and our "in-person" class sessions (via Zoom) will focus on structured activities to practice the skills and ideas you learned in the lesson. This mean the majority of your time seeing the course content will be on your own time outside the class session, while the class session will be hosted to give you practice on the material you saw in the lesson you completed earlier.

Motivation

In a "traditional classroom" model you go to a classroom and a teacher will lecture at you until the end of the session, and then you go home and do the hard work of actually trying to apply that material on practice problems or an assignment. Here are two things that are likely true about "traditional classroom" model:

  • It is probably familiar to you.
  • It is probably familiar to most of your instructors (it's how they learned, so it must work, right?).

Notice this list does not contain, "effective for student learning". Unfortunately for the "traditional classroom" model, most evidence has shown that it's quite ineffective of achieving that goal!

Think of learning programming or data science (or any skill for that matter) like learning how to ride a bike. How many people know how to ride a bike? Quite a few. How many of them do you think learned how to ride a bike by attending an online Zoom meeting three times a week and then a quiz section once a week? Probably no one! Because that's obviously not learning how riding a bike works! To learn how to ride a bike, you have to actually go out there and ride the damn bike!

In more general terms, this means learning some concept or some skill requires active participation in the learning process from the students, most commonly accomplished by deliberate practice and learning by doing. Sitting passively in a lecture listening to someone talk fails at accomplishing this fundamental aspect of learning.

The flipped classroom model is built around fostering an environment for effective practice. Instead of coming to lecture to hear Hunter talk about some idea and then trying to go practice the idea at home (a much harder task), we flip this whole model around! You will read and watch a video about the concept first (at your own pace) and then come to our class session to work with your classmates, the TAs, and Hunter on practicing that skill! This has the added benefit of collaborative learning where you can work with your peers to construct a working knowledge of the things you saw from the lesson earlier.

Details

Every Monday, Wednesday, Friday there will be lessons on Ed that contain readings and practice problems on the content for the course that day. The lesson will be available after the previous day's class session, so you are free to complete it on your own time (there is a mention of a due date later on in the grading portion). Notice that the deadline for a lesson is AFTER the time for our class session that day. This is because we think the most effective way to learn this content follow the these steps:

  • Complete Reading: Do the reading/video portion of that day's lesson. You can look over practice problems, but you want to spend the time in the class session working on them.
  • Attend Class Session: Come to the class session with questions and ready to work on activities and practice problems with peers.
  • Complete Lesson: Take the skills you practice and go back to the lesson to review anything that you struggled with and finish any problems you didn't solve during the class session.
  • Reflect: Take a minute to look back on what you learned. Think about the following questions (and maybe write down your answers in your notes!):
    • Why did we learn this concept?
    • How does this concept relate to everything we have seen so far?
    • Can I describe this concept in my own words?
    • Write down some "tips" for if you were going to help a colleague who was struggling with this content.

There are also quiz sections on Thursdays that will also operate to provide structured practice. Quiz sections will differ from our M/W/F class sessions in that they are smaller and run by the TAs and will focus on tying together concepts from the various days to help prepare you for your weekly homework assignments! Attendance in the class sessions and quiz sections are not recorded or used as part of your grade. However, it is expected that you are showing up and participating as much as you can so that you are maximizing your learning!

For more details for how lessons are graded, please see the section below on assessment.

Privacy

During the scheduled class sessions, most of the time will be spent having you work with your peers in small groups. This will be facilitated by Zoom's Breakout Room feature. There will be some time, particularly at the beginning, mid-point, and end where the instructor will have everyone in one room to talk about some high-level concept or highlight a key point. These moments will occur outside of breakout rooms in what is referred to as the main room. Since these few moments of lecture might be useful to students who can't make the class session, we will record the class sessions to be posted online. Only the instructor's video and screen will be recorded in the main room, no recordings will happen in the breakouts. If you were to speak in the main class room during the class session, that will be recorded. The chat is not made available in the recording, but it is being stored by Zoom.

The recordings will only be accessible to students enrolled in the course to review materials. These recordings will not be shared with or accessible to the public. The University and Zoom have FERPA-compliant agreements in place to protect the security and privacy of UW Zoom accounts. Students who do not wish to be recorded should:

  • Choose a Zoom username that does not include any personal identifying information like their name or UW Net ID; and
  • Not share their computer audio or video in the main room of the Zoom sessions. This only applies to the main room, as the breakout rooms are not recorded.

Quiz sections and office hours will not be recorded to protect student privacy in these more discussion-based formats.

Inclusion

All students are welcome in CSE 163 and are entitled to be treated respectfully by both classmates and the course staff. We strive to create a challenging but inclusive environment that is conducive to learning for all students. If at any time you feel that you are not experiencing an inclusive environment, or you are made to feel uncomfortable, disrespected, or excluded, please report the incident so that we may address the issue and maintain a supportive and inclusive learning environment. You may contact the course staff or the CSE academic advisors to express your concerns. Should you feel uncomfortable bringing up an issue with a staff member directly, you may also consider sending anonymous feedback or contacting the UW Office of the Ombud

Required Course Work

Types of Assignments

There will be three categories of required course work:

  • Checkpoints (Weekly)

    Short assignments consisting of a few problems to assess your learning that week's course content. These checkpoints are designed to be completed after completing that week's lesson and their practice problems. Checkpoints will also have open ended questions to ask you to reflect on your learning that week. Checkpoints will be released on Fridays (after the last lesson that week) and will generally be due Sundays. You may collaboratively work on checkpoints with classmates, but you should never submit code or answers that you did not write yourself.

  • Take-home assessments (Weekly)

    Longer programming assignments that will assess your mastery of the skills and concepts covered in class that week. While Take-home assessments will emphasize content covered in the week preceding the assessment's release, they will often integrate content from earlier in the quarter as well. Assessments will generally be due on Thursdays and must be completed independently, though you may discuss your approach with classmates (more on this below).

  • Final Project (with parts due throughout quarter)

    The final project is your opportunity to create something new that you want to share with the rest of the world. The nature of your project is entirely up to you so long as it is sufficiently complex. All that we ask is that you build something of interest to you, that you solve an actual problem, that you impact campus, or that you change the world. Strive to create something that outlives this course!

Resubmission

Learning from mistakes is an important part of mastering any skill, especially for novices (everyone who is approaching a new topic for the first time). To enable this, you are allowed to revise and resubmit your work on take-home assessments to demonstrate improved mastery after your initial submission. Resubmissions are subject to the following rules:

  • You may not resubmit a take-home assessment for which you did not make an initial submission. Your initial submission must show at least some attempt at solving parts of the HW, turning in the starter code is not sufficient.
  • You may not resubmit a take-home assessment until you have received feedback on your previous submission of that assessment. (Generally one week after the due date.)
  • Resubmissions must be accompanied by a short write-up describing the changes made. This will both support you in being deliberate about the changes you make and ease grading of resubmissions by making the changes clear.
  • A maximum of one take-home assessment can be resubmitted each week.
  • All resubmissions must be made no later than the last day of the quarter (Friday, March 12).
  • A take-home assessment that has been found to involve academic misconduct may not be resubmitted (see below).

Resubmissions will be graded and the new grades will fully replace the previous grades. The new grade will be based entirely on the resubmitted work, meaning that your grades may go down when resubmitting. In addition, while every effort is made to identify all areas that could be improved when grading, feedback is not guaranteed to be exhaustive. Be sure to consult all available resources and materials to ensure your work meets all guidelines.

Only take-home assessments may be resubmitted. Checkpoints are autograded and are graded on completing them correctly and the final project is designed to give you feedback throughout the various parts of the project.

Late Work

You must make an initial submission for each take-home assessment by the published deadline to receive a grade other than a U on that assessment (see grading scale below). Even if your work is incomplete, you are highly encouraged to submit whatever work you have so that you can receive feedback. You will then be able to act on that feedback and resubmit (see the resubmission policy).

Checkpoints and the parts of the final project will generally not be accepted after their published deadlines. Please see the policy on extenuating circumstances for more information.

Getting Help

There are two main ways of getting help:

  • EdStem:

    We use EdStem as an online Q&A forum where you may ask questions (both publicly and privately). If you have a question, this should be the first place to check & it's often the case that other students may have had the same question. You should not publicly post solutions to assessments on the message board, since that would be a violation of our academic honesty policy.

    We also strongly recommend you monitor new questions asked on EdStem semi-regularly: seeing questions other students ask can often be surprisingly enlightening.

    We do not have a course staff email so if you have a question about a particular concept or part of the assignment that you do not want to post publicly on EdStem, you should post privately so that the instructor or any of the TAs can answer. Students should prefer using EdStem instead of emailing individual staff members. Obviously, if your concern is a personal matter that you want to talk to the instructor about, you may email the instructor individually.

  • Office hours:

    Please visit office hours! Answering questions during office hours is often one of the best parts of teaching, so please do us a favor and make use of them.

One additional resource to keep in mind is the resources page on the class website. This page contains links to a variety of guides, tips, and tricks on material we don't have time to fully cover during lecture or section. The resources there are not necessarily required, but may be useful!

Extenuating Circumstances

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. We also acknowledge that the incredibly unusual circumstances of this particular quarter may bring unique challenges. If you have any unforeseen circumstances that arise during the course, please do not hesitate to contact the course staff or the instructor to discuss your situation. The sooner we are made aware, the more easily we can provide accommodations.

Typically, extenuating circumstances include work-school balance, familial responsibilities, health concerns, or anything else beyond your control that may negatively impact your performance in the class. Additionally, while some amount of “productive struggle” is healthy for learning, you should ask the course staff for help if you have been stuck on an issue for a very long time.

Life happens! While our focus is providing an excellent educational environment, our course does not exist in a vacuum. Our ultimate goal as a course staff is to provide you with the ability to be successful, and we encourage you to work with us to make that happen. Please don't suffer in silence.

Grading

Grading Scale

Work in CSE 163 will be graded on an ESNU scale rather than individual points:

  • E (Exemplary)

    Work that meets all requirements and displays full mastery of all learning goals and material.

  • S (Satisfactory)

    Work that meets all requirements and displays at least partial mastery of all learning goals as well as full mastery of core learning goals.

  • N (Not yet)

    Work that does not meet some requirements and/or displays developing or incomplete mastery of at least some learning goals and material.

  • U (Unassessable)

    Work that is missing, does not demonstrate meaningful effort, or does not provide enough evidence to determine a level of mastery, or violates major course rules (such as using forbidden features or violating the academic conduct policy).

Take-home assessments will be graded using the full ESNU scale. Checkpoints and the parts of the final project will be graded using only SN; no grades of E or U will be awarded on these assignments.

It is important to note that, under this system, it is the work that is assessed as a proxy for the student. This is an imperfect system, but is necessary to manage a course of any size in scale outside a handful of students. It is in your best interest to ensure that your work accurately reflects your mastery by being careful and diligent in following instructions, meeting deadlines, and understanding requirements.

Take-home Assessment Grading

Take-home assessments will be graded on four dimensions:

  • Behavior

    Does the input and output functionality of the submission conform to the specification?

  • Language/Library Features

    Does the code effectively and appropriately use the Python language or libraries necessary for the assignment?

  • Code Quality and Documentation

    Does the code conform to all of the relevant code quality guidelines and are all aspects of the code well documented?

  • Code Testing

    Did you write unit tests to ensure the correctness of your code? Do these tests cover all relevant cases?

    Note: A few assignments do not require writing tests, so this dimension will assess something relevant to that assignments. This will be explained on the relevant take-home assessment specifications.

Work will be assigned a grade on each dimension using the ESNU scale, resulting in four ESNU grades per assessment. The table below summarizes the expectations for each grade in each dimension. Earning an E along some dimension also requires meeting any requirements for an S as well.

E
must meet all criteria
S
must meet all criteria
N
 
U
 
Behavior
  • Exhibits correct behavior in all cases, including edge, corner, and error cases
  • Exhibits correct behavior in all common cases
  • Exhibits incorrect behavior in some common cases
  • Lacks some required functionality
  • Behavior does not resemble specification
  • Lacks significant portions of required functionality
Language/Library Features
  • Most appropriate variant of all language and library features chosen in all circumstances
  • All variables are declared in the most local scope possible
  • Code is properly factored and avoids redundancy and/or unnecessary computation
  • Uses main method pattern in all runnable files
  • Constants are not used in any inappropriate places
  • Follows assignment-specific guidelines placed on library and language usage
  • Language and library features used appropriately throughout program
  • All variables are declared in local scope
  • All required language features present and meet requirements
  • No obvious redundancy exists between functions
  • Constants used in all expected places
  • Follows assignment-specific guidelines placed on library and language usage
  • Library or language features use inappropriately
  • Any global variables used
  • Some required language features missing or do not meet requirements
  • Key language features not used
  • Not enough code or features present to evaluate effectively
  • Banned or inappropriate language features used
Code Quality and Documentation
  • Docstring comments on modules (Python files), classes, and functions. Comments are well-written and contain all relevant information
  • All identifiers and function names are descriptive and neither too long nor too short
  • Personal style choices are consistent and reasonable with the Code Quality guide
  • Code passes flake8 linter
  • Docstring comments on modules (Python files), classes, and functions. Comments are well-written and contain meaningful information
  • All identifiers and function names are meaningful and follow prescribed naming conventions
  • Code passes flake8 linter
  • Docstring comments missing on some modules, classes, and/or functions
  • Some identifier or function names are not meaningful or fail to follow prescribed conventions
  • Indentation or spacing makes code difficult to read or follow
  • Code does not pass flake8
  • Code shows little or no effort follow code quality guidelines
  • Code is extremely difficult to read and understand
Code Testing
  • Test cases are well-written for testing behavior in all cases, including edge, corner, and error cases
  • Minimum redundancy between tests
  • Descriptive names for all test functions
  • Test program runs with no errrors and warnings
  • All required test cases are present
  • Testing artifacts (e.g., custom data files) are submitted and work with the test program
  • Uses main method pattern for calling each test function
  • Uses main method pattern for calling each test function
  • Appropriate use of constants when necessary
  • Some test cases produce errors or warnings
  • Missing required test cases
  • Test functions called outside of main
  • Missing custom files accompanying test program
  • No tests exist

Course Grades

Course grades will be based on the quantity of work completed at each level of mastery, based on the following minimums:

at least 3.5

  • S or better in all dimensions on all take-home assessments, including at least 4 total E's on each dimension
  • S on at least 8 checkpoints
  • S on all parts of the final project

at least 2.5

  • At least 22 total S's or better and no U's on take-home assessments
  • S on at least 6 checkpoints
  • S on all parts of the final project

at least 1.5

  • At least 15 total S's or better on take-home assessments
  • S on at least 4 checkpoints

at least 0.7

  • At least 12 total S's or better on take-home assessments
  • S on at least 2 checkpoints

To receive a particular minimum grade, all requirements for that grade must be met. Exact final grades within these guarantees will be determined by the course staff based on each student's overall body of work.

Extra Credit: Lesson Completion

As mentioned before, each day of class we will have an associated lesson that has the reading and some practice problems associated to the content that day. As a small incentive to stay on top of the lessons each day so that you can better participate in the class community throughout the quarter, we will provide a small extra credit opportunity for completing lessons on time. We will consider lessons due at 21:00 PST on the day of the class session for that lesson. By completing 19 lessons on time (about 80% of the total lessons possible), we will award an additional S on a Checkpoint as extra credit. EdStem will show you a green checkmark next to a lesson if every slide has been read and every practice problem has been solved correctly, meaning the whole lesson has been completed.

Notice that this due date is set such that you have time to finish up any last things after coming to our class session that day. It is intended for you to do the practice problems together in class, but we understand that sometimes things take a little longer so we thought it was best to use a due date in the evening that matches the rest of our assignments.

Note, that the EdStemStem system does not enforce this deadline required for the small amount of extra credit. While the system permits you to make submissions after the due date, we will not accept them towards the count of lessons completed on time for this extra credit.

Academic Honesty and Collaboration

Philosophy

Learning is a collaborative process, and everyone benefits from working with others when learning new concepts and skills. In general, we encourage you to collaborate with your classmates in your learning and take advantage of each others' experience, understanding, and perspectives.

However, there is a difference between learning collaboratively and completing work for someone else. This can be a subtle but important distinction. Ultimately, the goal of the course is to ensure that every student masters the material and develops the skills to succeed in future courses, projects, and other related work. Submitting work that is not your own, or allowing another student to submit your work as their own, does not contribute toward developing mastery. In addition, this deprives you of the ability to receive feedback and support from the course staff in addressing the areas in which you are struggling.

For more information, consult the Allen School policy on academic misconduct.

Permitted and Prohibited Actions

Naturally, when working on a partner projects, you're free to share your code and collaborate in full detail with your partner. However, you should not share your code with other groups.

The following is a partial list of collaborative actions that are encouraged and prohibited. This list is not intended to be exhaustive; there are many actions not included that may fall under either heading. This list is here to help you understand examples of things that are/aren't allowed. If you are ever unsure, please ask the course staff before potentially acting in a way that violates this policy.

The following types of collaboration are encouraged:

  • Discussing the content of lessons, sections or any provided examples.
  • Working collaboratively on solutions to practice problems or checkpoints.
  • Posting and responding to questions on the course message board, including responding to questions from other students (without providing assessment code; see below).
  • Describing, either verbally or in text, your approach to a take-home assessment at a high-level and in such a way that the person receiving the description cannot reliably reproduce your exact work. Such description should be in English or another natural human language (i.e., not code).
  • Asking a member of the course staff about concepts with which you are struggling or bugs in your work.

The following types of collaboration are prohibited and may constitute academic misconduct:

  • Looking at another person's submission on a take-home assessment, or substantially similar code, at any point, in any form, for any reason, and for any amount of time. This restriction includes work written by classmates, family members or friends, former students, and online resources (such as GitHub or Chegg), among other sources.
  • Showing or providing your submission on a take-home assessment to another student at any time, in any format, for any reason.
  • Submitting work that contains code copied from another resource, even with edits or changes, except for resources explicitly provided by the course staff.
  • Having another person "walk you through" work you submit, or walking another person through work they submit, such that the work produced can be entirely and reliably reconstructed from the instructions provided. (That is, submitting work that you produced simply by following instructions on what to write.) This restriction includes classmates, former students, family members or friends, paid tutors or consultants, "homework support" services (such as Chegg), etc.

If you discuss a take-home assessment with one or more classmates, you must specify with whom you collaborated in the header comment in your submission. You may discuss with as many classmates as you like, but you must cite all of them in your work. Note that you may not collaborate in a way that is prohibited, even if you cite the collaboration.

Tip! A good rule of thumb to ensuring your collaboration is allowed is to not take written notes, photographs, or other records during your discussion and wait at least 30 minutes after completing the discussion before returning to your own work. You could use this time to relax, watch TV, listen to a podcast (I can't recommend 99% Invisible enough!), or do work for another class. For most students, this will result in you only bringing the high-level concepts of the collaboration back to your work, and ensuring that you reconstruct the ideas on your own.

Instead of utilizing forbidden resources, we hope you will submit whatever work you have, even if it is not yet complete, so you can get feedback and revise your work later. If you are ever in doubt if a collaboration or resources is permitted or not, please contact a member of the course staff.

Penalties

Any submission found to be in violation of this policy will receive a grade of U, as we are unable to assess your mastery from work that is not your own. In addition, students will forfeit the ability to resubmit work that is found to be in violation. Repeated or egregious violations of the policy will be forwarded to a relevant university committee for further action.

Amnesty

The course staff has endeavored to create an environment in which all students feel empowered and encouraged to submit their own work, regardless of the quality, and avoid prohibited collaboration. However, despite our best efforts, students may occasionally exercise poor judgement and violate this policy. In many cases, these students come to regret this decision almost immediately. To that end, we offer the following opportunity for amnesty:

If you submit work that is in violation of the academic conduct policy, you may bring the action to Hunter's attention within 72 hours of submission and request amnesty. If you do so, you will receive a grade of U for the initial submission, but you will be allowed to resubmit your work under the normal resubmission process. This action will not be shared outside of the course staff and will not be part of any academic record except in the case of repeated acts or abuses of the policy.

This policy is designed to allow students who have acted in a way they regret the opportunity to correct the situation and complete their work in a permitted way. It is not intended to provide forgiveness for violations that are detected by the course staff, nor to be invoked frequently. It is still in your best interest to submit whatever work you have completed so that you can receive feedback and support.

Note that, while requesting amnesty will allow you to resubmit your work, the resubmission must still not violate the collaboration policy. In particular, the resubmission must not include work that is not your own. It is extremely difficult to "unsee" or "forget" work that you may have viewed in violation of the policy, and it is your responsibility to ensure that your resubmission is completed entirely in accordance with the policy. (Needless to say, the easiest way to achieve this is to not violate the policy in the first place!)

Software and Textbooks

Most of this course will be run on EdStem. This includes lessons and exercises, as well as the discussion board and where you can work and submit your homework.

One of the benefits of using EdStem is that it comes fully featured with an online programming environment. This means you do not need to install any software as long as you can work online! If you would like to set up Python for local development, we will use Python 3 installed via Anaconda on all programming assignments and Visual Studio Code is our officially supported IDE (a fancy term for text editor). You may use other installations of Python or IDEs, but the course staff may not necessarily be able to help you with any set-up related questions you may have. See Software for installation instructions. Since we will be remote this quarter, we do not recommend doing this setup right away since it is difficult to debug a setup remotely. When working on your final project, you might want to install this if your dataset is too large to be stored on EdStem.

Lecture notes and section handouts will be shared on EdStem or Google Colaboratory. All links to specific resources can be found on course website.

Religious Accommodations

Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UWs policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form.

Disability Resources for Students

Your experience in this class is important to me. If you have already established accommodations with Disability Resources for Students (DRS), please communicate your approved accommodations to me at your earliest convenience so we can discuss your needs in this course.

If you have not yet established services through DRS, but have a temporary health condition or permanent disability that requires accommodations (conditions include but not limited to; mental health, attention-related, learning, vision, hearing, physical or health impacts), you are welcome to contact DRS at 206-543-8924 or uwdrs@uw.edu or disability.uw.edu. DRS offers resources and coordinates reasonable accommodations for students with disabilities and/or temporary health conditions. Reasonable accommodations are established through an interactive process between you, your instructor(s) and DRS. It is the policy and practice of the University of Washington to create inclusive and accessible learning environments consistent with federal and state law.

Acknowledgements

We thank Ruth Anderson, Valentina Staneva, Jake VanderPlas, Ariel Rokem, Joe Hellerstein, and Magdalena Balazinska for their contributions to designing this course. The initial materials for this course were created by Hunter Schafer with significant contributions by Josh Ervin, Zorah Fung, Erik Hoberg, Melissa Hovik, Dylan Jergens, Joely Nelson, Nicole Riley, and Erika Wolfe with input from Ruth Anderson. The course website was completely redesigned from the ground up by Wen Qiu. Special thanks to Magdalena Balazinska, Dan Grossman, and the eScience Education Working Group for their leadership in creating this course.

Much of the syllabus language has been adapted from Kevin Lin and Brett Wortzman.