On this page:
Software Development
Home
8.3.0.10

Software Development

Software Development

From the first day of the semester forward we expect students (you) to visit this page once per 24 hours.

“To be any kind of professional means being willing to tell the client a truth he doesn’t want to hear.” – Holman W. Jenkins, Jr.

image


Sunday, December 19th, 2021 1:02:06pm

The End

image

Wednesday, December 8th, 2021 6:44:05am

Revised at 10:55am; the 6:44 version incorrectly divided max-score by total-score

the-final-grade.rkt

#lang typed/racket
 
(: final-grade
   ; compute the final grade from its pieces
   (Final Projects Presentations Panels LabBooks -> Percent))
(provide final-grade %)
 
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(module+ test
  (require typed/rackunit))
 
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(define-type Final         (U 0 1 2 3 4 5 6 7 8     10))
 
(define-type Projects      [Listof Assignment])
(define-type Assignment    (Pair ActualScore BaseScore))
(define-type ActualScore   Exact-Rational)
(define-type BaseScore     Natural)
 
(define-type Presentations [Listof OK])
(define-type Panels        [Listof OK])
(define-type LabBooks      [Listof OK])
(define-type OK            (U 0 'ok+ 'ok 'ok- 'zero))
 
(define-type Percent       Real) ; between 0.0 and 1.0
(define-type Ten           10)
 
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(define (% {x : Real}) (/ x 100))
(define HOMEWORK     (% 40))
(define PRESENTATION (% 20))
(define PANEL        (% 20))
(define LAB          (%  5))
(define FINAL        (% 14))
 
(module+ test
  (define TOTAL        (+ HOMEWORK PRESENTATION PANEL LAB FINAL))
  (check-= TOTAL 0.99 0.001 "assert:: percentage total"))
 
[define ok+  (% 99)]
[define ok   (% 94)]
[define ok-  (% 89)]
[define zero (% 77)]
 
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(define (final-grade the-code-walk projects presentations panels labs)
  (+ (* HOMEWORK     (homework-grades projects))
     (* PRESENTATION (okay-grades presentations))
     (* PANEL        (okay-grades panels))
     (* LAB          (okay-grades labs))
     (* FINAL        (/ the-code-walk 10)))) ; << magic
 
(: okay-grades (-> [Listof OK] Percent))
(define (okay-grades oks)
  (/ (for/sum : Percent ((o : OK oks)) (grade-mapping o))
     (length oks)))
 
(: grade-mapping (OK -> Percent))
(define (grade-mapping o)
  (cond
    [(eq? o 'ok+) ok+]
    [(eq? o 'ok)  ok]
    [(eq? o 'ok-) ok-]
    [(eq? o 'zero) zero]
    [else (% 0)]))
 
(: homework-grades (-> [Listof Assignment] Percent))
(define (homework-grades grades)
  (define total-score ((inst sum-map Assignment) car grades))
  (define total-max   ((inst sum-map Assignment) cdr grades))
  (4digits (/ total-score total-max)))
 
(: sum-map (All (X) (-> (-> X Real) [Listof X] Real)))
(define (sum-map f l) (apply + (map f l)))
 
(: 4digits (-> Real Real))
(define (4digits x) (cast (string->number (~r #:precision 4 x)) Real))
 
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(module+ test
  ; The Perfect Student
  (: perfect-projects Projects)
  (: perfect-final-walk Ten)
  (define perfect-final-walk    10)
  (define perfect-projects      (list (cons 100 100) (cons 120 120)))
  (define value-projects        1.0)
  (define perfect-presentations '(ok+ ok+))
  (define value-presentations   (/ (+ ok+ ok+) 2))
  (define perfect-panels        '(ok+ ok+ ok+))
  (define value-panels          (/ (+ ok+ ok+ ok+) 3))
  (: perfect-labs LabBooks)
  (define perfect-labs          '(ok+))
  (define value-labs            1.0)
 
  (define perfect-grade
    (+ (* HOMEWORK value-projects)
       (* PRESENTATION value-presentations)
       (* PANEL value-panels)
       (* LAB value-labs)
       (* FINAL(/  perfect-final-walk 10))))
 
  (check-=
   (final-grade
   perfect-final-walk
   perfect-projects
   perfect-presentations
   perfect-panels perfect-labs)
   ; - - - - -
   perfect-grade
   ; - - - - -
   0.005))

image

Monday, December 6th, 2021 5:11:31pm

The schedule for the (part "finals") is now linked in.

image

Sunday, November 28th, 2021 4:10:44pm

Don’t forget that all TAs will hold consulting hours over the next two days so that you can check with them on your progress. See below for the schedule.

The remaining code walks will be about 8 — The League and, optionally, 9 — Help!. If you haven’t completed the second one yet, the first one will be the focus.

Finally, here is how you can assess the workings of your client-server system. Spawn two shells, run the server in one for a configuration for 9 — Help! (see left screenshot), and launch the clients in the other one pointing them to the same port on localhost (127.0.0.1) and re-direct in the same configuration (see right screenshot):

You can run these processes on login-student but make sure to pick a random port in the range between 10,000 and 60,000 so as not to interfere with each other.

Once the tournament is over, the server is expected to print an appropriate JSON message to the terminal (see left screenshot):

Compare the result with the expected outcome, as specified in a *-out.json file (see right screenshot). As you can see here, the actual and expected results are the same.

If you automate these steps, you are actually testing the client-server architecture. No need to do so; the sentence just once again clarifies the difference between experimenting and testing.

Our test harness will automatically run your scripts in a setup like the above.

image

Tuesday, November 23rd, 2021 8:04:43pm

You may wish to run your xmanager on these sample tests for 9 — Help!.

image

Friday, November 19th, 2021 10:10:43am

The week after Thanksgiving the TAs will hold office hours on Monday and Tuesday, equipped with a preliminary, coarse-grained rubric for Milestone 10. Try to meet with the TAs during one of those days. The TAs will use the rubric to ask you suggestive questions. The goal is to make sure you’re making progress in the right direction, both in terms of readability and correctness.

Monday, November 29

     

Tuesday, November 30

Neha

  

12:00 PM1:00 PM

Satwik

  

01:00 PM2:00 PM

Shobana

  

03:00 PM4:00 PM

Manan

  

04:30 PM5:30 PM

Eshwari, on Teams*

  

05:30 PM6:30 PM

     

Sindhu

  

10:00 AM11:00 AM

Somtoo

  

11:15 AM12:15 PM

Darpan

  

12:30 PM01:30 PM

Alanna

  

01:30 PM02:30 PM

* Message Eshwari on Teams if you wish to meet with her.

image

Tuesday, November 16th, 2021 6:13:30pm

On Thursday (11/18) we will once again collect your log books.

image

Tuesday, November 16th, 2021 5:59:11pm

You may wish to run your xref on these sample tests for 8 — The League.

image

Tuesday, November 16th, 2021 7:28:18am

Yes, software development and especially quality development can be on the wrong side of what you’d like.

image

Thursday, November 11th, 2021 10:29:00am

Here is a preview of the rest of the semester to help you plan:

image

Tuesday, November 9th, 2021 12:28:55pm

Megan & Ryan and David & Matthew are the first "winners" of double bonus points for finding a bug in my code base. They inspected the failing integration tests and noticed an off-by-1 error in mine. Congrats!

Cameron has re-run the test fest and has pushed (upwards and only upwards) revised scores into your repos. Notice that these points are for milestone 6, that is, the old pairs.

image

Thursday, November 4th, 2021 9:41:44pm

Tomorrow (Friday) morning you will receive an email that introduces you to your new partner and the assigned code base.

The on-boarder should conduct an overview code inspection with the on-boardee as soon as feasible. If the latter then decides that using his/her former code base would be preferable, switch roles so that the two of you can make an informed decision.

If you jointly decide that you wish to switch the code base, the on-boarder should
  • collect five sample project-design decisions that illustrate why the alternative code base is preferred to the assigned one;

  • formulate a justification why the decision of the alternative code base is superior and a two-line executive summary of this justification;

  • turn these five problem descriptions into an HTML memo addressed to your section’s instructor;

    For the few cross-section pairs, address the memo to both.

  • send the memo and a request for a meeting to your section’s instructor by Saturday 08:00pm, CCing the on-boardee and the tech TA.

    For the few cross-section pairs, send the email to both instructors.

To switch, you must meet with your instructor in person by Monday evening and receive the instructor’s blessing, who will then inform the technical TA to set up a new repo.

image

Tuesday, November 2nd, 2021 4:21:52pm

You may wish to run your xstrategy on these sample tests for 6 — Games!.

image

Friday, October 29th, 2021 10:03:12am

6 — Games! is the last milestone that you will work on with your current partner. On Friday after the due date for this milestone’s self-evaluation, you will be assigned a new partner (Friday next week) and a new git repository.

After the switch,
  • every pair will consist of a partner who is new to the code base and a partner who has worked on the code base for the past six milestones. This second partner will on-board the first one.

  • some of the pairs currently working on 6 — Games! will present their code base or manager design during the week of November 8.

image

Wednesday, October 27th, 2021 12:40:04pm

You may wish to run your xlegal on these sample tests for 5 — The Strategy.

image

Tuesday, October 26th, 2021 2:42:22pm

I (Matthias) have to switch my office hours from Wednesday to Thursday this week; I will still start at 430pm and stay until nobody’s left.

If you’re in trouble on Wednesday before the deadline, send email.

image

Wednesday, October 20th, 2021 8:18:50pm

The definition of Color used plain English, due to a programming mistake. For those who are curious, the specifications of such pieces are pulled in from the working solution and type-set in a programmatic fashion. The problem was essentially a single letter, rendering them seemingly as English rather than strings. I corrected for the mistake by changing the check for Color with a different predicate. The revised results should be out any moment now or are in your repo already.

Please visit the revised page and use the revised definition from now on.

image

Friday, October 15th, 2021 5:32:12pm

We have switched Darpan’s office hours from Wednesday to Tuesday. See Communicate.

image

Wednesday, October 13th, 2021 9:13:20pm

Cade Clark discovered a problem in our specification. Nothing in the JSON grammar prohibits using the same key more than once. That is, the following JSON is grammatically correct:

    { "a" : 1,

      "a" : 2,

      "a" : 3 }

The APIs for any language I know turns this into some internal data representation where "a" is mapped to either 1, 2, xor 3—without indication that this mapping does not reflect the external specification.

While such an object should be ruled illegal, our old specification of Maps allows such key duplication in one case. The test bed will not discover the duplication but it will assign one of the values randomly, and this may mean that your test case fails. If it succeeds by accident, it may fail implementations in other languages and come to our attention this way.

Do not submit such test cases.

Thanks, Cade.

image

Tuesday, October 12th, 2021 11:09:23am

You may wish to run your xmap on these sample tests for 3 — The Image.

image

Friday, October 1st, 2021 9:46:31am

The time for switching languages has passed. Only one or two pairs have taken the opportunity to submit a “memo of resignation,” which is about normal. So it’s time to post a Twitter (whatever that is) thingie that I have come across recently:

[Andrew is a bit of a language designer but mostly a security researcher.]

It is fine to stick with your languages but if you didn’t take the opportunity to find libraries that make your life as easy as my solutions indicate it should be, you have not truly accomplished the goals of the first phase of this course.

Spend some time on this problem. It will pay off large interest down the road.

image

Wednesday, September 29th, 2021 9:29:06pm

If you have to switch partnerships, you received an email by 6pm today.

Also, if you didn’t catch it class, 2 — The Map is out and will help a bit with 1 — The Analysis.

image

Sunday, September 26th, 2021 7:48:10am

Take a look at The Game: Trains, Trains.Com, a Plan, and 1 — The Analysis. But, don’t work on the problem with your partner yet.

image

Friday, September 24th, 2021 3:21:41pm

Jacob C. discovered a typo in the TCP port specs of E — TCP. (So did Ben L. I knew the number was wrong but forgot to Google it before I release E.) It’s fixed and it’s good practice to check how I fixed the write-up.

Of course, this fix is completely irrelevant to you. We’d be foolish to check such an extreme case when the real purpose is to make sure you find a library for working with TCP I/O streams.

image

Friday, September 24th, 2021 10:08:39am

Notes for the lead-in Lectures are now available on-line.

The Lab Book section is now up-to-date. Please read the revision carefully. Start your lab book when you know who your initial partner is for the project.

image

Thursday, September 23rd, 2021 7:05:51am

Assignment E — TCP of the TAHBPL series is out.

image

Tuesday, September 21st, 2021 3:03:31pm

We re-ran the test fest for C — JSON to accept larger input files and a wider range of JSON numbers. Your scores stayed the same or rose.

image

Saturday, September 19th, 2021 7:43:55am

Assignment D — GUI of the TAHBPL series is out. We will explain the solution on Monday morning.

Please don’t forget to read the chapter on egoless programming.

image

Monday, September 13th, 2021 11:37:07am

Most of the TAs will start holding office hours this week. You can find them in from of WVH 308. See Communicate. Neha C. will start office hours next week.

image

Friday, September 10th, 2021 11:10:42am

A memo needs a header. To: Ben Lerner, co-CEO, co-CTO, co-CfooO, co-CbarO of GamesGalore!
From: Matthias Felleisen, mere developer
Date: 8 September 2021
Subject: the choice of programming language

After a brief investigation of several languages with respect to the requirements document, our team has decided to use Racket for the first game project.

It addresses the stated requirements. Racket meets all four explicitly stated requirements. (1) When a Racket application is launched, the launcher applies the exported main function to the command-line arguments on a position-by-position basis. Alternatively a program can access the arguments via a call to current-command-line-arguments. (2) The JSON module in the standard library accommodates stream-based parsing. (3) Dating back to its very origins, Racket comes with a highly expressive, portable GUI framework. While it is somewhat dated compared to web frameworks, it is far more than a “rudimentary” framework, and an interface will look pleasing to the eye. (4) Finally, Racket has modules in the standard library for several conventional protocols, including udp, tcp, ftp, and http. The documentation [1] for these pieces of functionality is by far the largest and best organized of all candidate languages, though perhaps a bit less professional than Java’s.

Every paragraph is dedicated to one thesis and its support. As for the “nice to have” part of the requirements, the Racket package comes with a (somewhat slow) IDE with some unusual features. Additionally there are several Racket plug-ins for VSCode; one of them has the official support of the Racket team [2]. The language supports several built-in unit-test frameworks, and its tool suite comes with a unit-test element. The Racket team has published research papers on debuggers and profilers, and it is well-known that their publications are always supported with quality implementations.

Punctuation such as ":" must be used according to American style guides. One aspect distinguishes Racket from all other languages on our list: its extensive meta-programming facilities. With these facilities, we expect to build abstractions that separate specifications from implementations, making the code easily accessible and—with such focused single points of control—easily modifiable.

Admitting to downsides is a good idea. The easily identified downside of Racket is its extensive use of awfully round parentheses, which application developers obviously have to hate. We have asked the Racket team to add support for braces, which in all likelihood will also increase the language’s performance. (We insisted on not adding required white-space tabs, because it is well known that such languages are slow.)

You get a bonus point for cross-references that support your claims.

[1] See docs.racket-lang.org. The search box gives easy access to the relevant documentation.

[2] See the front-page of racket-lang.org, specifically the box on editors and IDEs.

image

Thursday, September 9th, 2021 7:29:40am

Homework TAHBPL B — The Very Basics is out.

image

Wednesday, September 8th, 2021 4:43:44pm

This is a simple test concerning changes to the web site.

First, a careful reader of the web pages discovered that some sections still referred to “remote” participation. These passages were left over from a time when it wasn’t clear whether we’d go hybrid or in person. They are removed now.

Second, we had to move some office hours. The ones posted now are going to stay until we have a better sense of how much/little need there is.

image

Saturday, July 10th, 2021 5:30:41pm

Welcome to Software Development Fall 2021.

See Abstract for a concise course description.

The quote at the top of the page characterizes how the instructors will lead this course as professionals. They firmly embrace the idea that if you pay a lot of money for education, the instructors have an obligation to deliver as much value as possible. The course is an intensive experience.

If you choose to take the course, familiarize yourself with the web site as quickly as possible. For the first couple of weeks, TAHBPL will grow every couple of days; after that, Project Milestones will evolve every week. Any out-of-the-ordinary changes will be announced on this front page.

Degüello

Degüello (No Surrender!)

image