--- title: "My COVID-19 story" author: "Drew Tyre" date: '2020-04-05' output: pdf_document: default html_document: code_folding: hide word_document: default og_image: /post/my-covid19-story_files/figure-html/featured_image-1.png draft: no slug: my-covid19-story tags_include: - R - OPD - COVID19 categories: Research ---
Turns out, I have my own COVID-19 story to tell. No hospital involved, and now an opportunity to think about some of my favorite things: false negatives and Bayesian probabilities. I am both surprised and disappointed.
The first post in this series was March 13, in case you’re just joining and want to see the progression. I’m now posting the bottom line figures for each state and province on the same post that just gets updated each day.
About a week after my first post on COVID-19, it was clear that the situation was getting serious, and I started taking my temperature every day as a check. That made me feel like I was doing something constructive in addition to reducing contact with others. Then Friday March 27 I popped the thermometer out of my mouth and 98F! Two degrees higher than I’d been seeing for a week. I couldn’t believe it. So I popped it back in for longer. Same result. I felt more or less OK, so carried on with my day. However, I started feeling a tickle in the back of my throat, and by that evening I had a regular dry cough and the fever was up to 99F. Fever and a dry cough are the two most common symptoms of COVID-19.
I’m no newcomer to lower respiratory tract infections (AKA chest cold), so I started my usual regimen of a long acting cough suppressant/expectorant, humidifier, nighttime decongestant. The cough worsened some over the weekend, and by Monday I was feeling very fatigued and my chest was tight. That feeling you get after you’ve held your breath just about as long as you can, but all the time. I talked with a GP via phone that afternoon, and diagnosed me with acute viral bronchitis. She also ordered a COVID-19 test because of my history with Asthma and Type II diabetes (both well controlled in my case). She said I would probably be able to get the test at a drive through clinic Tuesday afternoon, and the results would take 3 days.
I awoke Tuesday to a somewhat anti-climatic feeling – I didn’t feel better but I didn’t feel worse either. A nurse from the local hospital doing the testing called that morning to tell me where and when to go, and said the results would take 4 days. Tuesday afternoon I drove myself to the clinic, where a nurse in full personal protective gear from head to toe took a nasal swab. Not comfortable, but not bad in the grand scheme of things. I rather have an nasal swab than get my teeth cleaned. That nurse told me it would take 4-5 days to get the results. Hm.
The most dramatic thing that happened over the next 5 days was nearly running out of coffee on Thursday. Every day I reported to all the various people looking out for me, “I don’t feel better, but I’m not worse either. Win!” I dragged myself out of bed, worked for an hour or two, lay on the couch for an hour or two, ate, rinse and repeat. Friday evening and Saturday (days 8 and 9) were the worst for fatigue and cough. My ribs hurt from coughing. No sign of the test results. I made dark jokes about the results coming in time for an accurate cause of death. Seriously though, having the test result wouldn’t change how I was being treated (“take two tylenol and call me in the morning”), so my main hope was for a positive result so I could laugh in the face of this pandemic going forward.
Today, Sunday, is the 10th day since my symptoms started, and 5 days since my test. I’m not better, but not worse either, win. No exclamation point, this is getting old. I get a call with my test results: SARS-CoV-2 not detected. Nurse says, that doesn’t really mean anything, stay isolated. I’m a bit bummed out about that – I really was hoping to confidently say I’m immune after I get over this thing.

I have a thing for false negatives. So when I got my negative result this is the first thing I thought of. How likely is it that I have COVID-19 but got a negative result anyway? There are rumors about the interwebs that the probability is high, but is there a reliable source for that information?
A quick google search led to some manufacturer’s websites, but those had no numbers. They did indicate that the tests had received “Emergency Use Authorization” from the US Food and Drug Administration (FDA). Off to the FDA website! I found the guidelines for getting an EUA for a molecular diagnostic test. And NUMBERS! A test has to be positive for at least 19/20 known positive samples at 1 - 2 times the limit of detection. That implies a false negative rate < 5%. BUT what is this limit of detection nonsense? Turns out, there is no requirement for the level of detection. Whatever it is, determined by spiking virus particles into samples at known concentrations, that’s fine. It’s defined as the concentration where at least 19/20 samples come back positive.
Back to google with more specific search terms, and I found this from the Center for Evidence Based Medicine. There were two studies, both judged of low quality, comparing the sensitivity of throat vs. nasal swab samples in people presumed to have COVID-19. The larger of the two studies reported 147 / 204 = 72% of nasal swabs from people with mild symptoms were positive using a RT-PCR assay. That’s not great! There might be lots of reasons why that number doesn’t apply to my test, such as maybe my test used a different type of RNA primer, or the sampling technique was different, or … you get the idea. But I’m of the opinion that some bad data is still better than no data, so 28% false negative rate. If I assume a uniform Beta(1,1) prior, the posterior distribution is Beta(58, 148), which gives me a 95% credible interval of 0.22 - 0.34.
There are anecdotal reports that the false negative rate in the USA is 15% or 25%. I could account for these two anecdata by using them to modify my Bayesian prior. I have to decide how big a “sample size” to attribute to these anecdotes. The smallest integer values that could give me 15% or 25% are counts out of 20, so I’ll start there. Starting from Beta(1,1), I would get Beta(1 + 3 + 5, 1 + 17 + 15) or Beta(9, 33). Expected value is 0.21 and 95% credible intervals 0.11 - 0.35. That range overlaps the published one, so probably in the right ball park. I can then combine the data with this USA based prior, which gives me Beta(67, 180). Expected value is 0.27 and 95% credible intervals 0.22 - 0.33.
OK, something like 1 out of every 5 to 1 out of every 3 people sick with COVID-19 will test negative for the virus. What do I do with that information?
I need to figure out what the alternative hypotheses are. If I don’t have SARS-CoV-2 replicating in my lungs, what is? The diagnosis is Acute Bronchitis, and it turns out there are a lot of things that can give you that. I’ve had the Pneumonia vaccine, so probably not the bacterial kind of infection. I got my flu shot so that reduces the likelihood it’s a flu virus. Rhinovirus (cold virus) is possible, but I didn’t have any upper respiratory tract symptoms (runny nose etc). But that still leaves a bunch of things including one of the other 4 coronaviruses that already circulate in the human population. 5% of adult americans get a diagnosis of Acute Bronchitis in any one year, but that number includes all of the above.
However, if I make my calculation conditional on a medical professional thinking the symptoms are severe enough to warrant a COVID-19 test, then I don’t need to worry about the population prevalence of the COVID-19 or alternative hypotheses. According to the COVID tracking project there have been 323 positive and 5,139 negative tests in Nebraska. So I just need to calculate the probability of each hypothesis given the data … First off, what’s the probability someone a medical professional orders a test for has COVID-19?
\[ p_{C19}\left(1-s\right) = p_{obs} \\ p_{C19} = \frac{p_{obs}}{\left(1-s\right)} \]
s is the probability of a false negative, and \(p_{obs}\) is the observed probability of a positive test. I spent some time trying to figure out the distribution of \(p_{C19}\), which is a ratio distribution, but my limited math skilz weren’t up to the job. So I’ll rely on simulation.
library("tidyverse")
sims <- tibble(
p_obs = rbeta(10000, 323, 5139 - 323),
s = rbeta(10000, 67, 180),
p_c19 = p_obs / (1-s)
)
ggplot(data = sims,
mapping = aes(x = p_c19)) +
geom_density()
OK, now, what’s the probability that I have COVID-19 given I have a negative test? This is where the conditional probabilities come in.
The probability of an event B, conditional on some other event A is
\[ p(B | A) = \frac{p(A | B)p(B)}{p(A)} \]
and this lovely thing is called Bayes Theorem, after Reverend Thomas Bayes, and is the source of all Bayesian statistics too. B is me having COVID-19 given I am in the tested population. A is the negative test. I simulated \(p(B)\) above. \(p(A|B)\) is the probability of a negative test given I had COVID-19, so that is just \(s\) from above. That just leaves the probability of a negative test. This can happen two ways. The first is that I don’t have COVID-19, and the test returns a negative result. It’s possible that probability is less than 1, because along with false negatives there are also false positives. But let’s pretend that’s zero for now. The second way is that I do have COVID-19, but I get a negative result, which is \(s\) again. \[ p(A) = (1-p_{C19}) + s\,p_{C19}\,. \]
And now I just substitute everything into the right places.
\[ p(COVID-19 | Negative\; test) = \frac{s\,p_{C19}}{(1-p_{C19}) + s\,p_{C19}} \]
sims <- tibble(
p_obs = rbeta(10000, 323, 5139 - 323),
s = rbeta(10000, 67, 180),
p_c19 = p_obs / (1-s),
numerator = s * p_c19,
denominator = (1-p_c19)+s * p_c19,
p_infected = numerator / denominator
)
ggplot(data = sims,
mapping = aes(x = p_infected)) +
geom_density() +
labs(x = "p(COVID-19 | Negative Test) in Nebraska",
y = "Probability Density")
Well, bummer. Looks like I’m most likely (median probability 0.975, 95% CI 0.967 - 0.981) sick with one of the gazillion other viruses that cause Acute Bronchitis. Of course, that doesn’t mean I should run around coughing on people. I can still make them sick, just not with COVID-19. Nor should I stop social distancing, because I could still catch SARS-CoV-2! And I might still be sick with COVID-19, but the odds are against it.
So despite all the warnings that FDA makes about negative test results not being useful, in fact, they are quite useful. The negative test cuts my probability of having COVID-19 from ~10% (corrected for false negatives) to less than 3%. That’s not nothing. Note that I haven’t calculated anything like the probability that a random person in Nebraska is sick with COVID-19, which is what everyone really wants to know. I’ve calculated the probability that someone a medical professional orders a covid-19 test for, has COVID-19 given a negative test result.
It always surprises me when medical diagnoses don’t use prior information, or combine information about different symptoms in a meaningful way. The result I got here surprised and disappointed me. Shows the value of careful thinking.


HOME
Book Cargo
Cargo List
About us
Help and Support
Quick Links
Guideline
Cargo Procedure
Fare Table
Export Cargo
Disclaimer
FAQ
List
Cargo No.
Cargo Airline
Destination
Terminal
Fare
Scheduled Departure
Edit
Delete
{% for cargo in queryset %}
{{ cargo.cargo_no }}
{{ cargo.cargo_airline }}
{{ cargo.destination}}
{{ cargo.terminal }}
{{ cargo.fare }}
{{ cargo.scheduled_departure }}
Edit
Delete
{% endfor %}


Cook Book
Linkedin
Github
HackerRank
Personal Website
Netlify
Medium
Stackoverflow
Google Sites
Blogspot


Dashboard
Last Sync: 3h ago SYNC DATA
×
Success! Indicates a successful or positive action.
Users Imported from Zoho
| First Name | Last Name | Date Sync'd | Module | |
|---|---|---|---|---|
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Contacts |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Leads |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Contacts |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Leads |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Contacts |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Leads |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Contacts |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Leads |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Contacts |
| Matthew | Hardwick |<EMAIL_ADDRESS>| 12/15/16 @ 2:35 PM | Leads |
Showing 1 to 10 of 128 entries


Michael
Hobbs
web application developer for hire
Profile
Resume
Portfolio
Connect with Me
Web Dev Resources
Blog


Home
About
Minigames
Password Pawn
PasswordPawn
Add a Website
×
Add A Website
URL
Username
Password
Show Password
Cancel
Submit
×
URL:
Username:
Password:
×
URL:
Username:
Password:
×
URL:
Username:
Password:
×
URL:
Username:
Password:


rcf is one one big family kjhughhhhgfgffgffgfgfghhghfhh samjoseishere slimjoeishere
kjhughhhhgfgffgffgfgfghhghfhh


Information of quiz questions
| Name | Description |
|---|---|
| assessment_question_id | unique question id of an assessment |
| assessment_question_base_id | No column description available |
| assessment_question_version | the version of the question |
| assessment_question_type_id | A numerical identifier correspnding to each of the assessment question types described by the assessment_question_type_desc field |
| assessment_question_prompt | The raw text data of the question prompt. This may contain additional markup language for formatting purposes. |
| assessment_question_update_ts | When the question was updated |
CREATE TABLE assessment_questions ( assessment_question_id VARCHAR(50) ,assessment_question_base_id VARCHAR(50) ,assessment_question_version INT4 ,assessment_question_type_id INT4 ,assessment_question_prompt VARCHAR(20000) ,assessment_question_update_ts TIMESTAMP ,PRIMARY KEY (assessment_question_id) ,FOREIGN KEY (assessment_question_type_id) REFERENCES assessment_question_types(assessment_question_type_id) );


| Top |
Functions
| NcmFitMCMC * | ncm_fit_mcmc_new () |
| void | ncm_fit_mcmc_free () |
| void | ncm_fit_mcmc_clear () |
| void | ncm_fit_mcmc_set_data_file () |
| void | ncm_fit_mcmc_set_mtype () |
| void | ncm_fit_mcmc_set_trans_kern () |
| void | ncm_fit_mcmc_set_nthreads () |
| void | ncm_fit_mcmc_set_fiducial () |
| void | ncm_fit_mcmc_set_rng () |
| gdouble | ncm_fit_mcmc_get_accept_ratio () |
| void | ncm_fit_mcmc_start_run () |
| void | ncm_fit_mcmc_end_run () |
| void | ncm_fit_mcmc_reset () |
| void | ncm_fit_mcmc_set_first_sample_id () |
| void | ncm_fit_mcmc_run () |
| void | ncm_fit_mcmc_run_lre () |
| void | ncm_fit_mcmc_mean_covar () |
| NcmMSetCatalog * | ncm_fit_mcmc_get_catalog () |
Properties
| NcmFit * | fit | Read / Write / Construct Only |
| NcmFitRunMsgs | mtype | Read / Write |
| guint | nthreads | Read / Write |
| NcmMSetTransKern * | sampler | Read / Write / Construct |
Functions
ncm_fit_mcmc_new ()
NcmFitMCMC * ncm_fit_mcmc_new (NcmFit *fit
,NcmMSetTransKern *tkern
,NcmFitRunMsgs mtype
);
FIXME
ncm_fit_mcmc_set_data_file ()
void ncm_fit_mcmc_set_data_file (NcmFitMCMC *mcmc
,const gchar *filename
);
FIXME
ncm_fit_mcmc_set_mtype ()
void ncm_fit_mcmc_set_mtype (NcmFitMCMC *mcmc
,NcmFitRunMsgs mtype
);
FIXME
ncm_fit_mcmc_set_trans_kern ()
void ncm_fit_mcmc_set_trans_kern (NcmFitMCMC *mcmc
,NcmMSetTransKern *tkern
);
FIXME
ncm_fit_mcmc_set_nthreads ()
void ncm_fit_mcmc_set_nthreads (NcmFitMCMC *mcmc
,guint nthreads
);
FIXME
ncm_fit_mcmc_set_first_sample_id ()
void ncm_fit_mcmc_set_first_sample_id (NcmFitMCMC *mcmc
,gint first_sample_id
);
FIXME
ncm_fit_mcmc_run ()
void ncm_fit_mcmc_run (NcmFitMCMC *mcmc
,guint n
);
Runs the Markov Chain Monte Carlo until it reaches the n
-th realization. Note that
if the first_id is non-zero it will run n
- first_id realizations.
ncm_fit_mcmc_run_lre ()
void ncm_fit_mcmc_run_lre (NcmFitMCMC *mcmc
,guint prerun
,gdouble lre
);
FIXME
ncm_fit_mcmc_get_catalog ()
NcmMSetCatalog *
ncm_fit_mcmc_get_catalog (NcmFitMCMC *mcmc
);
Gets the generated catalog of mcmc
.
Property Details
The “fit”
property
“fit” NcmFit *
Fit object.
Owner: NcmFitMCMC
Flags: Read / Write / Construct Only
The “mtype”
property
“mtype” NcmFitRunMsgs
Run messages type.
Owner: NcmFitMCMC
Flags: Read / Write
Default value: NCM_FIT_RUN_MSGS_SIMPLE
The “nthreads”
property
“nthreads” guint
Number of threads to run.
Owner: NcmFitMCMC
Flags: Read / Write
Allowed values: <= 100
Default value: 0
The “sampler”
property
“sampler” NcmMSetTransKern *
Metropolis–Hastings sampler.
Owner: NcmFitMCMC
Flags: Read / Write / Construct


Address book
Add a contact:
What is your age?
kids under 12
Students 13-18
Adults 19-64
Seniors 65+
Disney 3D
Movie from 18
Movie from 21
Old movie
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
SUBMIT


https://leetcode.com/problems/integer-to-roman/
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II. Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used: I can be placed before V (5) and X (10) to make 4 and 9. X can be placed before L (50) and C (100) to make 40 and 90. C can be placed before D (500) and M (1000) to make 400 and 900. Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. Example 1: Input: "III" Output: 3 Example 2: Input: "IV" Output: 4 Example 3: Input: "IX" Output: 9 Example 4: Input: "LVIII" Output: 58 Explanation: L = 50, V= 5, III = 3. Example 5: Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
class Solution: def romanToInt(self, s: 'str') -> 'int':
class Solution: def romanToInt(self, s: 'str') -> 'int': roman_to_int = { 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000 } val_list = [roman_to_int[i] for i in s ] solution = 0 for i, v in enumerate(val_list): if i == len(val_list) -1 or v >= val_list[i+1]: solution += v else: solution -= v return solution gi


Cat ipsum dolor sit amet, fall over dead, (not really but gets sypathy) adipisicing elit. Velit repudiandae a link to show tabbing order is not affected Love and coo around boyfriend who purrs and makes the perfect moonlight eyes so I can purr and swat the glittery gleaming yarn to him. (the yarn is from a $125 sweater) Cat not kitten around plop down in the middle where everybody walks and claws in your leg.


This document provides detailed information for developers that wish to compile and make changes to the Smack source code.
For additional developer resources, please visit: http://www.igniterealtime.org/projects/smack. The Smack build process is based on Gradle. Visit the Gradle website for more information and downloads.
This documentation is divided into two sections:
Getting your machine ready for Smack development requires a few steps. Wherever possible, instructions are provided for both Unix/Linux and Windows users.
Now, invoke the build tool to compile the Smack source code
If the build tool is invoked correctly and Smack compiles, you've correctly
configured your copy of the Smack developer distribution.
gradle build
Finished!
The list of build tasks is below.
For a list of the commands and a brief description from the command line, type
gradle tasks
. For more complete help, read the documentation below.
To execute a build task, type gradle [options] targetname
where "targetname" is
one of the targets listed below:
Each task is documented with a syntax guide and description. Optional paramaters for each task are enclosed with braces.
gradle build
Description:
Compiles all the Smack source code and run the test suite. The artifacts of the sub-projects can be found at<subprojectDir>/build/libs
gradle javadocAll
Description:
JavaDocs all Smack source code and saves it underbuild/javadoc
.
gradle clean
Description:
Cleans your Smack distribution directory by deleting compiled class files and artifacts.
gradle eclipse
Description:
Generates Eclipse configuration files for every project. After runninggradle build eclipse
you can import Smack in
Eclipse by selecting File
→ Import...
→ Existing Projects into Workspace
Search for nested projects
". It may be
also a good idea to create a working set for Smack, and add all Smack
projects to that working set.
build
target
when generating the Eclipse files, or else Eclipse may not find all
requirements.
gradle projects
Description:
Show all Smack projects and their description.


Music API
Over 20 territories
Markup with arbitrary code, e.g. RenderAction:
<div class="first column width3">
# Html.RenderAction("Index", "Tracks", new { artistId = Model.ReleaseTile.ArtistId, releaseId = Model.ReleaseTile.ProductId, salePrice = Model.ReleaseTile.PriceValue, productUrl = Model.ReleaseTile.ProductUrl, artistUrl = Model.ReleaseTile.DisplayedArtistUrl, displayedArtistName = Model.ReleaseTile.DisplayedArtistName, IsPreOrder = Model.IsPreOrder, CheckPurchaseDetails = Model.IncludesPurchaseDetails });
# Html.RenderAction("Index", "AlsoByRelease", new { id = Model.ReleaseTile.ArtistId, BasedOnReleaseId = Model.ReleaseTile.ProductId });
</div>
Nice and modular, right? Hard to reason about whole pages
Never actually rendered a lot of sub-Actions on their own
Poor performance - spins up a whole MVC context each time
Pretty happy with the backend, keen to ditch views
Markup needed reworking anyway for the re-design!
No arbitrary code was appealing after Spark
More testable - everything in view models
Prototype designs with node mustache (we used Grunt for FE build anyway)
Use dummy data to mock up views
Fetching dummy data is a pain, just hook in this handy node 7d api client!
Run on linux, no spinning up Windows VM...
FE guy often WFH on a Mac - Windows environment a bit unfriendly
Looked out for X-7D-Responsive-Views header being sent (using browser plugin)
Switch out view engine based on that
(Also checked your IP was based in the 7d office)
[HasResponsiveView("sign-in")]
public ActionResult Index(string returnUrl)
{
if (_httpContext.IsResponsive())
{
var signInViewModel = BuildResponsiveViewModel(returnUrl);
}
else
{
var signInViewModel = BuildViewModel(returnUrl);
}
return View("SignIn", signInViewModel);
}
(Branching pretty hard)
Decided to push ahead and just use node
Validate node
On windows servers...
(Used by Azure for hosting node apps)
Also handles multiple node processes per server/LBing them
<handlers>
<add name="iisnode" path="redesign/server.js"
verb="*" modules="iisnode" />
</handlers>
<rule name="node-for-basket" stopProcessing="true">
<match url="^basket/items"/>
<action type="Rewrite" url="redesign/server.js" />
</rule>
(Apart from the occasional node stack trace showing up in the site header...)
<rule name="set-responsive-views-if-beta-cookie-sent">
<conditions>
<add input="{HTTP_COOKIE}" pattern="7digital_beta=" />
</conditions>
<serverVariables>
<set name="HTTP_X_7D_RESPONSIVE_VIEWS" value="true" />
</serverVariables>
</rule>
<rule name="node-app-if-header" stopProcessing="true">
<conditions>
<add input="{HTTP_X_7D_RESPONSIVE_VIEWS}" pattern="^true$" />
</conditions>
<action type="Rewrite" url="reboot/server.js" />
</rule>
Is there anything in particular you'd like to see on the new store?
BRING BACK THE FUNK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
router.get('/artist/:artistSlug/release/:releaseSlug',
handleReleasePage);
function handleReleasePage(req, res, next) {
api.Catalogue().getReleaseIdByUrl({
artistSlug: req.params.artistSlug,
releaseSlug: req.params.releaseSlug
}, function (err, idLookupRes) {
if (err) { return next(err); }
api.Releases().getDetails({
releaseId: idLookupRes.release.id
}, function (err, release) {
if (err) { return next(err); }
var forView = map.fromRelease(res);
return res.render('release', forView);
});
}
function userDetails(req, res, next) {...}
expressApp.use(shopConfig);
expressApp.use(userDetails);
...
Responsive design (lots of iterations)
Revamped editorial system
Displaying Hi-Res content
No more legacy DB access \o/
Way better logging/monitoring
A nightmare to debug deep inside IIS, on production under load only
Upgraded iisnode
<action type="Rewrite" url="server.js?rewrittenFrom={REQUEST_URI}" />
<iisnode nodeProcessCountPerApplication="4" ../>
function myCallback(err, res) { ... }
throw new Error('lol');
Loss of context if error is not thrown by your own code
function uncaughtErrorMiddleware(req, res, next) {
var reqDomain = domain.create();
reqDomain.name = 'request';
reqDomain.traceId = req.traceId;
reqDomain.on('error',
createUncaughtErrorHandler(serverDomain, req, res));
reqDomain.run(next);
}
Deprecated :(
Zones? Async Listener?
Simplicity / Malleability
Productive if you know what architecture you're aiming for
Great tooling
npm package for everything
One language everywhere - no context switch
Cross-platform (linux dev environment)
redis:
image: redis
ports:
- "6379:6379"
sentinel:
image: joshula/redis-sentinel
links:
- redis
ports:
- "26379:26379"
command: sentinel monitor session redis 6379 1 --sentinel monitor objectcache redis 6379 1 -- sentinel down-after-milliseconds session 5000 -- sentinel down-after-milliseconds objectcache 5000
(Yeah, yeah, it is coming to windows..)
Should have taken more screenshots...
Old project <3 ?
Many more tooling / deployment choices now


Combination Lock
问题描述 :
Now that you’re back to school for another term, you need to remember how to work the combination lock on your locker. A common design is that of the Master Brand, shown at right. The lock has a dial with 40 calibration marks numbered 0 to 39. A combination consists of 3 of these numbers; for example: 15-25-8. To open the lock, the following steps are taken:
- turn the dial clockwise 2 full turns
- stop at the first number of the combination
- turn the dial counter-clockwise 1 full turn
- continue turning counter-clockwise until the 2nd number is reached
- turn the dial clockwise again until the 3rd number is reached
- pull the shank and the lock will open.
Given the initial position of the dial and the combination for the lock, how many degrees is the dial rotated in total (clockwise plus counter-clockwise) in opening the lock?
输入:
Input consists of several test cases. For each case there is a line of input containing 4 numbers between 0 and 39. The first number is the position of the dial. The next three numbers are the combination. Consecutive numbers in the combination will be distinct. A line containing 0 0 0 0 follows the last case.
输出:
For each case, print a line with a single integer: the number of degrees that the dial must be turned to open the lock.
样例输入:
0 30 0 30 5 35 5 35 0 20 0 20 7 27 7 27 0 10 0 10 9 19 9 19 0 0 0 0
样例输出:
1350 1350 1620 1620 1890 1890
解题代码:
//* @author<EMAIL_ADDRESS>import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); while (true) { int begin = in.nextInt(); int one = in.nextInt(); int two = in.nextInt(); int three = in.nextInt(); if ((begin | one | two | three) == 0) break; int result = 1080; // 逆时针 result += begin < one ? (begin + 40 - one) * 9 : (begin - one) * 9; // 顺时针 result += one < two ? (two - one) * 9 : (40 + two - one) * 9; // 逆时针 result += two < three ? (two + 40 - three) * 9 : (two - three) * 9; System.out.println(result); } } }
(adsbygoogle = window.adsbygoogle || []).push({});
额楼主能否在发布代码的同时对解题思路做个讲解呢？这样大家在学习的时候就方便多了。
welcome!
不同的编译器，printf(),执行的顺序不同，所以结果也就不同，建议不要那么写
if(j){
int ans=a ;
for(int x=j-1;x>=0;x–){
if(!a ) break;
ans=min(ans,a );
sum+=ans;
}
}
求解释，，dp的思路是什么呢？
第一段代码中：
next = next ;
明显不对吧，应该是 next =j;才对
感觉我好像很多都不会做。。。。
有一点问题。。后面动态规划的程序中
int dp[n+1][W+1];
会报错 提示表达式必须含有常量值。该怎么修改呢。。
后面的是python代码啊
这个.. 真没看出来


Set one or more optional properties at the time of issuing. String values can have a maximum length of 100 characters. You can only set a property value once.
| Name | Type | Value | |
|
|
Lock up tokens with this NFT
| Name | Amount | |
|
|


MULAN A film review by David N. Butterworth Copyright 1998 David N. Butterworth
*** (out of ****)
The Disney studios has its formula for annual, full-length animated features down so pat that it's hard to remember which one you're watching at any given moment.
"Mulan," their 36th animated adventure, is the latest case in point.
Once again we have a tale focused around a strong central character (female as usual; Disney is one of the few studios whose heroines--Ariel, Belle, Pocahontas, and now Mulan--get equal screen time with their heroes in recent years). Add the requisite love interest and a wise-cracking sidekick or two, pep up the soundtrack with a handful of strategically placed show tunes (an introspective number by a pool or looking in a mirror, a rousing anthem, a cutesy, montage-backed crowd pleaser), pose a few threats to our engaging lead, and tie things all up neatly by the closing credits. Bob's your uncle!
Better make that Walt's your uncle...
Kids will no doubt go ga-ga over "Mulan" (or at least the fast food tie-ins), but familiarity can, after a while, leave grown-ups--this reviewer included--wishing for a little more. Maybe an animated feature without--shock! horror!--the songs, for example? Or maybe a film in which a cheeky Chihuahua called Pepe longs to become a matador from Trinidad?? How about simply ditching the sidekicks altogether?
It isn't gonna happen.
Like Disney's previous entries, "Mulan" is slow to make its mark. The animation tends to suffer from some slackness in the early going and the humorous element, a madcap dragon wannabe (in the guise of a loquacious lizard with a case of dry mouth, courtesy Eddie Murphy's animated vocal talents), plays like an inappropriate if necessary (formula-wise) afterthought. However, after about an hour everything comes together and the formula, like it or not, clicks.
Highlights include a spectacular cavalry charge on a snow-covered pass (which, due to the sophistication of today's computer-generated imagery, is hard to tell from the real thing), a memorable, show-stopping musical interlude ("I'll Make a Man Out of You," penned by Matthew Wilder and David Zippel), and last but not least, Mulan herself.
Voiced by Ming-Na Wen, Mulan is Disney's strongest female character to date. When hordes of Huns pour over China's Great Wall and threaten to overthrow the Imperial Palace, the emperor decrees that every family in the land dispatch one man to serve in the Imperial army. Since Mulan's father is infirm, but proud, the high-spirited Mulan steals her father's armor and, incognito, signs up to face the Mongolian menace.
Attracted to, but not distracted by, her commanding officer Shang (B.D. Wong), Mulan outmatches her fellow combatants in smarts, wit, and physical ability. She's a woman of the '90s a couple of millennia ahead of her time.
Formulaic to a T, "Mulan" remains a classic case of "if it ain't broke, don't fix it."
-- David N. Butterworth<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/(meta).20get.20a.20list.20of.20all.20definition.20in.20a.20file.html ---
Hi, is it possible in meta-programming to get a list of all (non-meta) definitions in a file?
Yes. There are three parts to this: listing (or folding over) the visible definitions, determining that they are from the current file and determining whether they are definitions.
I guess the hard part is the first then. I browsed thorough tactic.lean and didn't find anything interesting.
In init.meta.environment
, you can find environment.fold
. It doesn't give you a list but it lets you iterate over all the definitions of a file and accumulate them. get_env
gives you the current environment and in_current_file'
tells you if a given name is defined / declared in the current file and finally, you can look at the declaration
data structure and see the trusted
bit for definition
and constant
.
that is very helpful. Thanks!
You're welcome!
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


| 1 | package fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.client; | |
| 2 | ||
| 3 | import static java.util.stream.Collectors.toList; | |
| 4 | ||
| 5 | import java.io.IOException; | |
| 6 | import java.util.List; | |
| 7 | import java.util.stream.Stream; | |
| 8 | ||
| 9 | import org.slf4j.Logger; | |
| 10 | import org.slf4j.LoggerFactory; | |
| 11 | ||
| 12 | import com.sendgrid.Method; | |
| 13 | import com.sendgrid.Request; | |
| 14 | import com.sendgrid.Response; | |
| 15 | import com.sendgrid.SendGrid; | |
| 16 | import com.sendgrid.SendGridAPI; | |
| 17 | ||
| 18 | import fr.sii.ogham.email.sendgrid.sender.exception.SendGridException; | |
| 19 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.compat.EmailCompat; | |
| 20 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.compat.MailCompat; | |
| 21 | ||
| 22 | /** | |
| 23 | * Facade wrapping the {@link SendGrid} object. | |
| 24 | */ | |
| 25 | public final class DelegateSendGridClient implements SendGridClient { | |
| 26 | ||
| 27 | private static final Logger LOG = LoggerFactory.getLogger(DelegateSendGridClient.class); | |
| 28 | ||
| 29 | private SendGridAPI delegate; | |
| 30 | ||
| 31 | /** | |
| 32 | * Constructor. | |
| 33 | * | |
| 34 | * @param delegate | |
| 35 | * the entry point to the SendGrid library | |
| 36 | * @throws IllegalArgumentException | |
| 37 | * if provided delegate is null | |
| 38 | */ | |
| 39 | public DelegateSendGridClient(final SendGridAPI delegate) { | |
| 40 |
1
1. <init> : negated conditional → RUN_ERROR |
if (delegate == null) { |
| 41 | throw new IllegalArgumentException("[delegate] cannot be null"); | |
| 42 | } | |
| 43 | ||
| 44 | this.delegate = delegate; | |
| 45 | } | |
| 46 | ||
| 47 | @Override | |
| 48 | public void send(final MailCompat email) throws SendGridException { | |
| 49 |
1
1. send : negated conditional → RUN_ERROR |
if (email == null) { |
| 50 | throw new IllegalArgumentException("[email] cannot be null"); | |
| 51 | } | |
| 52 | ||
| 53 | if (LOG.isDebugEnabled()) { | |
| 54 | LOG.debug("Sending to SendGrid client: FROM {}", debug(email.getFrom())); | |
| 55 | LOG.debug("Sending to SendGrid client: TO {}", debug(email)); | |
| 56 | LOG.debug("Sending to SendGrid client: SUBJECT {}", email.getSubject()); | |
| 57 | } | |
| 58 | ||
| 59 | final Response response = callApi(email); | |
| 60 | ||
| 61 |
1
1. send : negated conditional → RUN_ERROR |
if (isSuccess(response.getStatusCode())) { |
| 62 | LOG.debug("Response from SendGrid client: ({}) {}", response.getStatusCode(), response.getBody()); | |
| 63 | } else { | |
| 64 | throw new SendGridException(new IOException("Sending to SendGrid failed: (" + response.getStatusCode() + ") " + response.getBody())); | |
| 65 | } | |
| 66 | } | |
| 67 | ||
| 68 | private Response callApi(final MailCompat email) throws SendGridException { | |
| 69 | try { | |
| 70 | Request request = prepareRequest(email); | |
| 71 |
1
1. callApi : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::callApi → RUN_ERROR |
return delegate.api(request); |
| 72 | } catch (IOException e) { | |
| 73 | throw new SendGridException("Sending email to SendGrid failed", e); | |
| 74 | } | |
| 75 | } | |
| 76 | ||
| 77 | private static Request prepareRequest(final MailCompat email) throws SendGridException { | |
| 78 | Request request = new Request(); | |
| 79 |
1
1. prepareRequest : removed call to com/sendgrid/Request::setMethod → RUN_ERROR |
request.setMethod(Method.POST); |
| 80 |
1
1. prepareRequest : removed call to com/sendgrid/Request::setEndpoint → RUN_ERROR |
request.setEndpoint("mail/send"); |
| 81 | try { | |
| 82 |
1
1. prepareRequest : removed call to com/sendgrid/Request::setBody → RUN_ERROR |
request.setBody(email.build()); |
| 83 | } catch (IOException e) { | |
| 84 | throw new SendGridException("Preparing email for SendGrid failed", e); | |
| 85 | } | |
| 86 |
1
1. prepareRequest : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::prepareRequest → RUN_ERROR |
return request; |
| 87 | } | |
| 88 | ||
| 89 | private static boolean isSuccess(int statusCode) { | |
| 90 |
5
1. isSuccess : negated conditional → RUN_ERROR 2. isSuccess : replaced boolean return with true for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::isSuccess → RUN_ERROR 3. isSuccess : negated conditional → RUN_ERROR 4. isSuccess : changed conditional boundary → RUN_ERROR 5. isSuccess : changed conditional boundary → RUN_ERROR |
return statusCode >= 200 && statusCode < 300; |
| 91 | } | |
| 92 | ||
| 93 | private static String debug(EmailCompat address) { | |
| 94 |
1
1. debug : negated conditional → RUN_ERROR |
if (address == null) { |
| 95 |
1
1. debug : replaced return value with "" for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::debug → RUN_ERROR |
return null; |
| 96 | } | |
| 97 |
1
1. debug : negated conditional → RUN_ERROR |
if (address.getName() != null) { |
| 98 |
1
1. debug : replaced return value with "" for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::debug → RUN_ERROR |
return address.getName() + "<" + address.getEmail() + ">"; |
| 99 | } | |
| 100 |
1
1. debug : replaced return value with "" for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::debug → RUN_ERROR |
return address.getEmail(); |
| 101 | } | |
| 102 | ||
| 103 | private static List<String> debug(final MailCompat email) { | |
| 104 |
1
1. debug : negated conditional → RUN_ERROR |
if (email.getPersonalization() == null) { |
| 105 |
1
1. debug : replaced return value with Collections.emptyList for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::debug → RUN_ERROR |
return null; // NOSONAR |
| 106 | } | |
| 107 | // @formatter:off | |
| 108 |
1
1. debug : replaced return value with Collections.emptyList for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::debug → RUN_ERROR |
return email.getPersonalization() |
| 109 | .stream() | |
| 110 |
2
1. lambda$debug$0 : negated conditional → RUN_ERROR 2. lambda$debug$0 : replaced return value with Stream.empty for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/client/DelegateSendGridClient::lambda$debug$0 → RUN_ERROR |
.flatMap(p -> p.getTos() == null ? Stream.empty() : p.getTos().stream()) |
| 111 | .map(DelegateSendGridClient::debug) | |
| 112 | .collect(toList()); | |
| 113 | // @formatter:on | |
| 114 | } | |
| 115 | } | |
Mutations | ||
| 40 |
1.1 |
|
| 49 |
1.1 |
|
| 61 |
1.1 |
|
| 71 |
1.1 |
|
| 79 |
1.1 |
|
| 80 |
1.1 |
|
| 82 |
1.1 |
|
| 86 |
1.1 |
|
| 90 |
1.1 2.2 3.3 4.4 5.5 |
|
| 94 |
1.1 |
|
| 95 |
1.1 |
|
| 97 |
1.1 |
|
| 98 |
1.1 |
|
| 100 |
1.1 |
|
| 104 |
1.1 |
|
| 105 |
1.1 |
|
| 108 |
1.1 |
|
| 110 |
1.1 2.2 |


Membership Types
Adult : $30.00 USD - yearly
Junior (under 18) : $10.00 USD - yearly
Family : $60.00 USD - yearly


As a smaller piece of the larger project described in the overview page, we looked to detect Embryo Nuclei using an object detection NN.
The approach taken in this project was to use transfer learning on a google Inception pretrained object detection model.
Using Tensoflow model libraries, we took a pretrained weight map from a model trained on the Coco dataset.
We then retrained this model using annoted embryo images. To annotate the image data we used Rectlable image annotator.
Instructions for use:
STEP 1: Install Software
• Installed TensorFlow, either CPU or GPU (See TensorFlow Installation)
• Installed TensorFlow Models (See TensorFlow Models Installation)
• Installed RectLabel (See App Store)
STEP 2: Download Embryo Detector
• Download embryo detector form google drive:
https://drive.google.com/open?id=1RGMM8ay_D0Ra7lRacyE1GabMnosV034J
STEP 3: Annotate images in Train and Test Folders
Use RectLabel to annotate images saving image and xml to:
TF/workspace/training_demo/images/train
STEP 4: Generate CSV from XMLs
python xml_to_csv.py -i
STEP 5: Repair and Convert images
python restore_images.py -i=
STEP 6: Generate TF Train and Test Records:
python generate_tfrecord.py --label=Nucleus --csv_input=
STEP 7: Change python path to slim folder:
From /training_demo
export PYTHONPATH=
STEP 8: Train Model:
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_inception_v2_coco.config
STEP 9: Export Inference Graph:
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/ssd_inception_v2_coco.config --trained_checkpoint_prefix training/model.ckpt-<# TRAINED> --output_directory trained-inference-graphs/output_inference_graph_v1.pb
STEP 10: Run Object Detection notebook
jupyter notebook


CGRect
Undocumented
-
Align the rectangle to a container rectangle
Declaration
Swift
public mutating func align(to container: CGRect, with horizontalAlignment: HorizontalAlignment, and verticalAligment: VerticalAlignment)
-
Create a rectangle that is aligned to a container rectangle
Declaration
Swift
public func aligned(to container: CGRect, with horizontalAlignment: HorizontalAlignment, and verticalAligment: VerticalAlignment) -> CGRect
-
Aspect fill the rectangle inside a container
If the width or height of the rectangle is zero, the rectangle will only be centered to the container
Declaration
Swift
public mutating func aspectFill(in container: CGRect)
-
Create an rectangle that is aspect filled inside a container rectangle
If the width or height of the rectangle is zero, the rectangle will only be centered to the container
Declaration
Swift
public func aspectFilled(in container: CGRect) -> CGRect
-
Aspect fit a rectangle in a container rectangle
If the width or height of the rectangle is zero, the rectangle will only be centered to the container
Declaration
Swift
public mutating func aspectFit(in container: CGRect)
-
Create a rectangle that is aspect fitted in a container rectangle
If the width or height of the rectangle is zero, the rectangle will only be centered to the container
Declaration
Swift
public func aspectFitted(in container: CGRect) -> CGRect
-
Create a square that is fitted inside the rectangle
Declaration
Swift
public func aspectFittedSquare() -> CGRect
-
Align the rectangle to the center of the container
Declaration
Swift
public mutating func center(to container: CGRect)
-
Create a rectangle that is aligned to the center of the container
Declaration
Swift
public func centered(to container: CGRect) -> CGRect
-
Align the rectangle to a container rectangle horizontally
Declaration
Swift
public mutating func horizontalAlign(to container: CGRect, with alignment: HorizontalAlignment)
-
Create a rectangle horizontally aligned to a container
Declaration
Swift
public func horizontalAligned(to container: CGRect, with alignment: HorizontalAlignment) -> CGRect
-
Inset a rect by specific UIEdgeInsets
Parameter
Parameter insets: The edge insets to be applied to the adjustment.Declaration
Swift
public mutating func inset(by insets: UIEdgeInsets)
-
Create an new rectange of a rectangle that is insetted by specific UIEdgeInsets
Parameter
Parameter insets: The edge insets to be applied to the adjustment.Returns
A rectangle that is adjusted by the UIEdgeInsets structure passed in insets.Declaration
Swift
public func insetted(by insets: UIEdgeInsets) -> CGRect
-
Align the rectangle to a container rectangle vertically
Declaration
Swift
public mutating func verticalAlign(to container: CGRect, with alignment: VerticalAlignment)
-
Create a rectangle vertically aligned to a container
Declaration
Swift
public func verticalAligned(to container: CGRect, with alignment: VerticalAlignment) -> CGRect


Ever since I first looked into it, I have assumed that DBC was going to be hard, like really hard, maybe even grueling at times -- but also simultaneously fun, engaging, challenging, and life-changing. These are the impressions that I got from reading about DBC and reactions from people who had been through the program, and they remain much the same after viewing Shereef's video. However, I appreciated his honesty that there will often be two mindsets at work among both DBC students and staff -- the one that says "this isn't what I ordered, this isn't what I wanted," and the one that says "we're all in this together, lets make it the best that it can be."
I've caught myself several times getting frustrated with the explanations and instructions on the Phase 0 materials, struggling to understand what it is that I'm supposed to do. I had a few moments of "This isn't what I paid for!" but then I tried to reframe it in my mind -- I'm not actually angry about the wording, but about my own lack of understanding. I'm not used to being someone who doesn't understand something. I'm used to being the expert, the one who has the answers (at least as far as nutrition is concerned). In short, I'm not used to being uncomfortable and ignorant. That's not anyone's responsibility but my own. That has been my first real moment of ownership this week.
This realization is something that I will need to keep coming back to throughout DBC. I will need to keep reminding myself that I'm in charge of my own learning, and I'll only get out of this what I put into it. If I decide to put a lot of negativity into my learning, I shouldn't be surprised at what will come of that. Not that I don't expect to be frustrated at times, but how will I channel that frustration? Hopefully with this knowledge of myself and my own insecurities, I'll channel it toward finding the solution (and asking for help if I need it!).
I am a little nervous, of course. This is probably the most intense thing that I've ever done, and there are still a lot of unknowns. But that doesn't dampen my excitement. I have spent a long time stagnated in a career that wasn't quite right for me, and I feel more excited than I have in a long time to learn. I'm pumped to keep pushing myself and to try to get out of my comfort zone anytime I can.
Let's do this, Purple Martins!


We redefine the boundaries of how people use technology and provide beautiful, creative solutions to solve their problems.
There's always a method to the madness and Mad Men Software has perfected it. It may be crazy to think that we can change the world, but that's why we're Mad Men Software.
We use an Agile process to develop client applications. We have 7 members specializing in iOS Development, Android Development, Web Development, Graphic Design, and Software Process. We practice software consulting and software development to supply starting businesses viable software solutions.
Graphic Design
Websites
Digital Marketing
Mobile Apps
Web Hosting
Business Solutions
Feel free to email us to pitch your idea, give us info about projects you're working on, or just say hello!


BILLY MADISON A film review by Chad Polenz Copyright 1997 Chad Polenz
*** (out of 4 = good) 1995, PG-13, 90 minutes [1 hour, 30 minutes] [comedy] starring: Adam Sandler (Billy Madison), Bridgette Wilson (Miss Veronica Vaughn), Bradley Whitford (Eric), Darren McGavin (Mr. Madison), written by Tim Herlihy, Adam Sandler, produced by Robert Simonds, directed by Tamra Davis.
 "Billy Madison" is an example of this. It is both a cliche and original comedy, full of wacky jokes and total idiocy, but for some reason it works well. So well in fact, we actual laugh along with the film rather than at it, and that's what makes for good comedy.
   For example, he gets so excited when he realizes it's "nudie magazine day" and Sandler's baby talk is hilarious.
But the attitude doesn't stop there. Even his magazines are wacky: "She-Male Fiesta," "Women Over 80," and "Drunk Chicks."  No, this is not the most believable story in the world, but it certainly is fun to watch.
 When he tells Billy this, they make a deal: if he can pass grades 1 - 12 all over again in 24 weeks, he'll be qualified to take over the company, otherwise Eric (Whitford), Madison's snotty second in command, will get it. Eric is the standard comedy villain, his arrogance and vileness are obviously exaggerated, but so is everything else, so nothing seems too zany here.
And so Billy ventures off to school and the real hilarity ensues.  Even the teachers are portrayed as very kooky. All of this absurdity adds up and is funny and likable even though it shouldn't be.
Of course there has to be the sexy-woman-who-won't-give-the-main-character-the-time-of-day, and that character is Billy's third grade teacher Miss Veronica Vaughn (Wilson). Is it necessary to mention what will happen between her and Billy? Another generic comedy element unfolds when Eric somehow gets to the hero by blackmailing his principal.
To settle everything once and for all, Billy challenges Eric to an "Academic Decathlon" in which they will battle for the company - guess who wins?
"Billy Madison" is thin on plot, but big on laughter. It's pathetic humor in a way, but it's funny, and I can respect that.
visit Chad'z Movie Page @ http://members.aol.com/ChadPolenz/index.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


--- title: Game keywords: fastai sidebar: home_sidebar summary: "This module contains all of the functions for defining the game loop and logic in `wizardry`." description: "This module contains all of the functions for defining the game loop and logic in `wizardry`." nb_path: "nbs/02_cli.ipynb" ---