--- layout: post title: How to auto insert target="blank" in wordpress! date: 2010-03-04 18:45:51.000000000 +01:00 categories: - blog - tech tags: - hack - wp status: publish type: post published: true meta: _edit_last: '1' author: ---
Hi,
So all of you must have used the link button in the WP editor to create links. Now the default link button makes your links open in the same tab. If you want to make your links open in a new tab, you have to add target="_blank" to your a tag.
Now to do that manually everytime or use a text editor to manually edit (Ctrl+F, Ctrl+H) or whatever to search replace and add target="_blank" could be a tedious job! Why do it when you can edit one file and automate it forever.
The file in question is quicktags.js and resides in "wp-includes/js" folder.
Open the file in a text editor and search for "function" till you come across "function edInsertLink". This is the function responsible for inserting links to your posts.
Edit this function so that the corresponding part now reads as
edButtons[c].tagStart='<a href="'+a+'" target="_blank">'
and save.
There you go.
Now your links will have target="blank" as a part of them.
Or you can just download the file from here and save it in your wp-include/js/ folder.
cheers!
the anAlyst


A friend of a friend (also in educational research) posted that he was interested in learning R.
I had a couple of ideas but knew that others might have better ideas. So, I posted (on Twitter) looking for recommendations and received some excellent talks, links, and other resources.
Here they are, in Tweet form (you may have to click on the links in tweets to see some of the resources and content)
All of my thoughts on learning #rstats + learning new things in #rstats : https://t.co/7ZfWsNsrLehttps://t.co/UufGWsOfZC
— Alison Hill (@apreshill) June 3, 2018
I've been collecting some ideas and sharing them here as I work on developing curriculum to teach #rstats to evaluators: https://t.co/FKArrQzYzc It has a strong emphasis on resources that will help people with absolutely no background in R.
— David Keyes (@dgkeyes) June 3, 2018
I have been learning via data-camp and following @rnlanders online course in R (https://t.co/qci1ypr5cL) I would say I've gone from 0 knowledge in R to comfortable enough to use R for many of my analyses
— Kabir Daljeet (@kdaljeet) June 3, 2018
I second the @DataCamp vote! Also, it helps (as you know) to plan to search extensively on @StackOverflow when a roadblock arises. Last advice: it’s hard for everyone, don’t give up. The payoff is so worth it!
— Emily Bovee (@ebovee09) June 4, 2018
I also usually suggest @DataCamp and R4DS
— Malcolm Barrett (@malco_barrett) June 3, 2018
- Have a specific problem that you commit to working on using R.
2) Read R for Data Science here (free): https://t.co/juWFCrJPuz
3) Join the #r4ds community (on Slack [https://t.co/duTnhbzQ4z] & on Twitter)
What are your recs? [2/2] — Joshua Rosenberg (@jrosenberg6432) June 3, 2018


Market Charts > 1999 > Movie Chart
Annual Movie Chart - 1999
Note: This chart ranks movies by the amount they earned during 1999.
It includes movies released in previous years that earned money during 1999.
For example, a movie released over Thanksgiving in 1998 will most likely earn money in 1998 and 1999.
Click on the individual movie to see its total gross over all the years in which it played.
Each box office year ends on the first Sunday of the following year.
The next year starts the following day (Monday).
For example, the "2004 box office year" ended on Sunday, January 2, 2005.
Inflation-adjusted figures are based on ticket sale estimates.
See Top 1999 Movies at the Domestic Box Office for the total domestic box office for the top 100 movies released in 1999, and Movie Index 1999 for an overview of all movies released in 1999.
Top Grossing Movies of 1999
| Rank | Movie | Release Date | Distributor | Genre | 1999 Gross | Tickets Sold |
| 1 |
Star Wars Ep. I: The Phanto… |
May 19, 1999 |
20th Century Fox |
Adventure |
$430,443,350 |
84,732,942 |
| 2 |
The Sixth Sense |
Aug 6, 1999 |
Walt Disney |
Thriller/Suspense |
$276,386,495 |
54,406,790 |
| 3 |
Toy Story 2 |
Nov 19, 1999 |
Walt Disney |
Adventure |
$208,880,039 |
41,118,117 |
| 4 |
Austin Powers: The Spy Who … |
Jun 10, 1999 |
New Line |
Comedy |
$206,040,085 |
40,559,071 |
| 5 |
The Matrix |
Mar 31, 1999 |
Warner Bros. |
Action |
$171,383,253 |
33,736,860 |
| 6 |
Tarzan |
Jun 16, 1999 |
Walt Disney |
Adventure |
$170,904,824 |
33,642,681 |
| 7 |
Big Daddy |
Jun 25, 1999 |
Sony Pictures |
Comedy |
$163,479,795 |
32,181,062 |
| 8 |
The Mummy |
May 7, 1999 |
Universal |
Adventure |
$155,385,488 |
30,587,694 |
| 9 |
Runaway Bride |
Jul 30, 1999 |
Paramount Pictures |
Romantic Comedy |
$152,162,347 |
29,953,217 |
| 10 |
The Blair Witch Project |
Jul 14, 1999 |
Artisan |
Horror |
$140,539,099 |
27,665,176 |
| 11 |
The World is Not Enough |
Nov 19, 1999 |
MGM |
Action |
$117,877,025 |
23,204,138 |
| 12 |
Notting Hill |
May 28, 1999 |
Universal |
Romantic Comedy |
$116,089,678 |
22,852,298 |
| 13 |
Double Jeopardy |
Sep 24, 1999 |
Paramount Pictures |
Action |
$114,032,117 |
22,447,267 |
| 14 |
Wild Wild West |
Jun 30, 1999 |
Warner Bros. |
Adventure |
$113,805,681 |
22,402,693 |
| 15 |
Analyze This |
Mar 5, 1999 |
Warner Bros. |
Comedy |
$106,885,658 |
21,040,483 |
| 16 |
The General's Daughter |
Jun 18, 1999 |
Paramount Pictures |
Drama |
$102,705,852 |
20,217,687 |
| 17 |
American Pie |
Jul 9, 1999 |
Universal |
Comedy |
$101,800,948 |
20,039,556 |
| 18 |
Inspector Gadget |
Jul 23, 1999 |
Walt Disney |
Adventure |
$97,387,965 |
19,170,859 |
| 19 |
Sleepy Hollow |
Nov 19, 1999 |
Paramount Pictures |
Horror |
$92,839,722 |
18,275,535 |
| 20 |
The Haunting |
Jul 23, 1999 |
Dreamworks SKG |
Horror |
$91,188,905 |
17,950,571 |
| 21 |
Shakespeare in Love |
Dec 11, 1998 |
Miramax |
Romantic Comedy |
$90,829,322 |
17,879,787 |
| 22 |
Entrapment |
Apr 30, 1999 |
20th Century Fox |
Thriller/Suspense |
$87,707,396 |
17,265,235 |
| 23 |
Pokemon: The First Movie |
Nov 10, 1999 |
Warner Bros. |
Adventure |
$84,091,099 |
16,553,365 |
| 24 |
Payback |
Feb 5, 1999 |
Paramount Pictures |
Action |
$81,526,121 |
16,048,449 |
| 25 |
Stuart Little |
Dec 17, 1999 |
Sony Pictures |
Adventure |
$79,403,127 |
15,630,536 |
| 26 |
The Green Mile |
Dec 10, 1999 |
Warner Bros. |
Drama |
$76,682,014 |
15,094,884 |
| 27 |
Deep Blue Sea |
Jul 28, 1999 |
Warner Bros. |
Horror |
$73,648,228 |
14,497,682 |
| 28 |
American Beauty |
Sep 15, 1999 |
Dreamworks SKG |
Drama |
$71,017,815 |
13,979,884 |
| 29 |
Patch Adams |
Dec 25, 1998 |
Universal |
Comedy |
$69,519,968 |
13,685,033 |
| 30 |
The Thomas Crown Affair |
Aug 6, 1999 |
MGM |
Thriller/Suspense |
$69,282,369 |
13,638,261 |
| 31 |
Blue Streak |
Sep 17, 1999 |
Sony Pictures |
Action |
$67,760,741 |
13,338,728 |
| 32 |
Bowfinger |
Aug 13, 1999 |
Universal |
Comedy |
$66,458,769 |
13,082,434 |
| 33 |
Life |
Apr 16, 1999 |
Universal |
Comedy |
$64,062,587 |
12,610,745 |
| 34 |
The Bone Collector |
Nov 5, 1999 |
Universal |
Thriller/Suspense |
$63,788,270 |
12,556,746 |
| 35 |
She's All That |
Jan 29, 1999 |
Miramax |
Romantic Comedy |
$63,465,522 |
12,493,212 |
| 36 |
End of Days |
Nov 24, 1999 |
Universal |
Action |
$63,185,000 |
12,437,992 |
| 37 |
Three Kings |
Oct 1, 1999 |
Warner Bros. |
Black Comedy |
$59,223,104 |
11,658,091 |
| 38 |
A Civil Action |
Dec 25, 1998 |
Walt Disney |
Drama |
$56,476,436 |
11,117,408 |
| 39 |
Eyes Wide Shut |
Jul 16, 1999 |
Warner Bros. |
Drama |
$55,691,208 |
10,962,836 |
| 40 |
Never Been Kissed |
Apr 9, 1999 |
20th Century Fox |
Romantic Comedy |
$55,474,757 |
10,920,227 |
| 41 |
Forces of Nature |
Mar 19, 1999 |
Dreamworks SKG |
Romantic Comedy |
$52,957,800 |
10,424,763 |
| 42 |
Varsity Blues |
Jan 15, 1999 |
Paramount Pictures |
Drama |
$52,894,169 |
10,412,237 |
| 43 |
Message in a Bottle |
Feb 12, 1999 |
Warner Bros. |
Drama |
$52,880,016 |
10,409,451 |
| 44 |
South Park: Bigger, Longer … |
Jun 30, 1999 |
Paramount Pictures |
Musical |
$52,037,603 |
10,243,622 |
| 45 |
Stigmata |
Sep 10, 1999 |
MGM |
Horror |
$50,014,865 |
9,845,445 |
| 46 |
Deuce Bigalow: Male Gigolo |
Dec 10, 1999 |
Walt Disney |
Comedy |
$46,353,560 |
9,124,716 |
| 47 |
Life Is Beautiful |
Oct 23, 1998 |
Miramax |
Drama |
$46,188,407 |
9,092,206 |
| 48 |
Any Given Sunday |
Dec 22, 1999 |
Warner Bros. |
Drama |
$45,752,119 |
9,006,322 |
| 49 |
Stepmom |
Dec 25, 1998 |
Sony/TriStar |
Drama |
$41,012,827 |
8,073,391 |
| 50 |
House on Haunted Hill |
Oct 29, 1999 |
Warner Bros. |
Horror |
$40,489,824 |
7,970,437 |
| 51 |
The Talented Mr. Ripley |
Dec 24, 1999 |
Paramount Pictures |
Thriller/Suspense |
$39,771,649 |
7,829,064 |
| 52 |
Bicentennial Man |
Dec 17, 1999 |
Walt Disney |
Drama |
$39,610,696 |
7,797,381 |
| 53 |
Cruel Intentions |
Mar 5, 1999 |
Sony Pictures |
Drama |
$38,201,895 |
7,520,058 |
| 54 |
10 Things I Hate About You |
Mar 31, 1999 |
Walt Disney |
Romantic Comedy |
$38,177,966 |
7,515,347 |
| 55 |
You’ve Got Mail |
Dec 18, 1998 |
Warner Bros. |
Drama |
$37,792,542 |
7,439,476 |
| 56 |
My Favorite Martian |
Feb 12, 1999 |
Walt Disney |
Comedy |
$36,850,101 |
7,253,956 |
| 57 |
Fight Club |
Oct 15, 1999 |
20th Century Fox |
Drama |
$36,515,098 |
7,188,011 |
| 58 |
8MM |
Feb 26, 1999 |
Sony Pictures |
Thriller/Suspense |
$36,443,442 |
7,173,905 |
| 59 |
The Thin Red Line |
Dec 23, 1998 |
20th Century Fox |
Drama |
$35,365,325 |
6,961,678 |
| 60 |
For Love of the Game |
Sep 17, 1999 |
Universal |
Drama |
$35,188,640 |
6,926,897 |
| 61 |
The Prince of Egypt |
Dec 18, 1998 |
Dreamworks SKG |
Adventure |
$34,866,657 |
6,863,515 |
| 62 |
Instinct |
Jun 4, 1999 |
Walt Disney |
Thriller/Suspense |
$34,105,207 |
6,713,623 |
| 63 |
Mickey Blue Eyes |
Aug 20, 1999 |
Warner Bros. |
Romantic Comedy |
$33,864,342 |
6,666,209 |
| 64 |
The Best Man |
Oct 22, 1999 |
Universal |
Romantic Comedy |
$33,293,520 |
6,553,842 |
| 65 |
The 13th Warrior |
Aug 27, 1999 |
Walt Disney |
Action |
$32,698,899 |
6,436,791 |
| 66 |
October Sky |
Feb 19, 1999 |
Universal |
Drama |
$32,683,932 |
6,433,844 |
| 67 |
Lake Placid |
Jul 16, 1999 |
20th Century Fox |
Horror |
$31,770,413 |
6,254,018 |
| 68 |
Random Hearts |
Oct 8, 1999 |
Sony Pictures |
Drama |
$31,054,924 |
6,113,174 |
| 69 |
Superstar |
Oct 8, 1999 |
Paramount Pictures |
Comedy |
$30,150,814 |
5,935,199 |
| 70 |
Mystery Men |
Aug 6, 1999 |
Universal |
Comedy |
$29,762,011 |
5,858,663 |
| 71 |
Dogma |
Nov 12, 1999 |
Lionsgate |
Comedy |
$28,983,260 |
5,705,366 |
| 72 |
The Out-of-Towners |
Apr 2, 1999 |
Paramount Pictures |
Comedy |
$28,544,120 |
5,618,921 |
| 73 |
The Other Sister |
Feb 26, 1999 |
Walt Disney |
Romantic Comedy |
$27,807,627 |
5,473,942 |
| 74 |
Galaxy Quest |
Dec 24, 1999 |
Dreamworks SKG |
Adventure |
$27,311,918 |
5,376,361 |
| 75 |
Baby Geniuses |
Mar 12, 1999 |
Sony Pictures |
Adventure |
$27,151,490 |
5,344,781 |
| 76 |
The Story of Us |
Oct 15, 1999 |
Universal |
Romantic Comedy |
$27,100,030 |
5,334,651 |
| 77 |
Mysteries of Egypt |
Jul 16, 1998 |
Sony Pictures |
Documentary |
$27,042,366 |
5,323,300 |
| 78 |
Blast from the Past |
Feb 12, 1999 |
New Line |
Romantic Comedy |
$26,613,620 |
5,238,901 |
| 79 |
A Bug's Life |
Nov 20, 1998 |
Walt Disney |
Adventure |
$26,372,231 |
5,191,384 |
| 80 |
The Insider |
Nov 5, 1999 |
Walt Disney |
Drama |
$26,114,890 |
5,140,726 |
| 81 |
Saving Private Ryan |
Jul 24, 1998 |
Dreamworks SKG |
Drama |
$25,746,307 |
5,068,170 |
| 82 |
Man on the Moon |
Dec 22, 1999 |
Universal |
Drama |
$25,309,535 |
4,982,191 |
| 83 |
The Wood |
Jul 16, 1999 |
Paramount Pictures |
Comedy |
$25,059,640 |
4,933,000 |
| 84 |
Anna and the King |
Dec 17, 1999 |
20th Century Fox |
Drama |
$24,732,782 |
4,868,657 |
| 85 |
Arlington Road |
Jul 9, 1999 |
Sony Pictures |
Thriller/Suspense |
$24,419,219 |
4,806,932 |
| 86 |
T-Rex: Back to the Cretaceous |
Oct 23, 1998 |
IMAX Films |
Adventure |
$24,343,061 |
4,791,941 |
| 87 |
The Iron Giant |
Aug 4, 1999 |
Warner Bros. |
Adventure |
$23,159,305 |
4,558,918 |
| 88 |
EDtv |
Mar 26, 1999 |
Universal |
Comedy |
$22,508,689 |
4,430,844 |
| 89 |
Mighty Joe Young |
Dec 25, 1998 |
Walt Disney |
Adventure |
$22,479,904 |
4,425,177 |
| 90 |
At First Sight |
Jan 15, 1999 |
MGM |
Drama |
$22,365,133 |
4,402,585 |
| 91 |
The Bachelor |
Nov 5, 1999 |
New Line |
Romantic Comedy |
$21,266,456 |
4,186,310 |
| 92 |
A Stir of Echoes |
Sep 10, 1999 |
Artisan |
Thriller/Suspense |
$21,133,087 |
4,160,056 |
| 93 |
Doug's 1st Movie |
Mar 26, 1999 |
Walt Disney |
Adventure |
$19,421,271 |
3,823,084 |
| 94 |
Summer of Sam |
Jul 2, 1999 |
Walt Disney |
Drama |
$19,288,130 |
3,796,875 |
| 95 |
An Ideal Husband |
Jun 18, 1999 |
Miramax |
Comedy |
$18,542,974 |
3,650,191 |
| 96 |
Being John Malkovich |
Oct 29, 1999 |
USA Films |
Black Comedy |
$18,243,969 |
3,591,332 |
| 97 |
Anywhere But Here |
Nov 12, 1999 |
20th Century Fox |
Drama |
$18,215,284 |
3,585,685 |
| 98 |
Everest |
Mar 6, 1998 |
MacGillivray Free… |
Documentary |
$18,064,450 |
3,555,994 |
| 99 |
Waking Ned Devine |
Nov 20, 1998 |
20th Century Fox |
Comedy |
$17,834,187 |
3,510,666 |
| 100 |
Drive Me Crazy |
Oct 1, 1999 |
20th Century Fox |
Comedy |
$17,813,484 |
3,506,591 |
| 101 |
The Rage: Carrie 2 |
Mar 12, 1999 |
MGM |
Horror |
$17,760,244 |
3,496,111 |
| 102 |
Rushmore |
Dec 11, 1998 |
Walt Disney |
Black Comedy |
$17,052,387 |
3,356,769 |
| 103 |
Go! |
Apr 9, 1999 |
Sony Pictures |
Black Comedy |
$16,875,273 |
3,321,904 |
| 104 |
True Crime |
Mar 19, 1999 |
Warner Bros. |
Drama |
$16,676,845 |
3,282,843 |
| 105 |
Bringing Out The Dead |
Oct 22, 1999 |
Paramount Pictures |
Black Comedy |
$16,481,455 |
3,244,380 |
| 106 |
Muppets From Space |
Jul 14, 1999 |
Sony Pictures |
Adventure |
$16,304,786 |
3,209,603 |
| 107 |
A Midsummer Night's Dream |
May 14, 1999 |
Fox Searchlight |
Comedy |
$16,071,990 |
3,163,777 |
| 108 |
The Corruptor |
Mar 12, 1999 |
New Line |
Action |
$15,164,492 |
2,985,136 |
| 109 |
Election |
Apr 23, 1999 |
Paramount Pictures |
Black Comedy |
$14,943,582 |
2,941,650 |
| 110 |
Music of the Heart |
Oct 29, 1999 |
Miramax |
Drama |
$14,755,057 |
2,904,538 |
| 111 |
Enemy of the State |
Nov 20, 1998 |
Walt Disney |
Action |
$14,727,445 |
2,899,103 |
| 112 |
Tea with Mussolini |
May 14, 1999 |
MGM |
Drama |
$14,395,874 |
2,833,833 |
| 113 |
The Faculty |
Dec 25, 1998 |
Miramax |
Horror |
$14,169,955 |
2,789,361 |
| 114 |
The Messenger: The Story of… |
Nov 12, 1999 |
Sony Pictures |
Drama |
$14,149,871 |
2,785,407 |
| 115 |
In Too Deep |
Aug 25, 1999 |
Gramercy |
Drama |
$14,026,509 |
2,761,123 |
| 116 |
Virus |
Jan 15, 1999 |
Universal |
Action |
$14,010,690 |
2,758,009 |
| 117 |
A Simple Plan |
Dec 11, 1998 |
Paramount Pictures |
Drama |
$13,795,773 |
2,715,703 |
| 118 |
The Deep End of the Ocean |
Mar 12, 1999 |
Sony Pictures |
Drama |
$13,508,635 |
2,659,180 |
| 119 |
Elizabeth |
Nov 6, 1998 |
Gramercy |
Drama |
$13,502,610 |
2,657,994 |
| 120 |
The Mod Squad |
Mar 26, 1999 |
MGM |
Action |
$13,260,050 |
2,610,246 |
| 121 |
The Omega Code |
Oct 15, 1999 |
Providence Entert… |
Action |
$12,276,200 |
2,416,574 |
| 122 |
The King and I |
Mar 19, 1999 |
Warner Bros. |
Musical |
$12,064,440 |
2,374,889 |
| 123 |
In Dreams |
Jan 15, 1999 |
Dreamworks SKG |
Horror |
$12,017,369 |
2,365,623 |
| 124 |
The Thirteenth Floor |
May 28, 1999 |
Sony Pictures |
Thriller/Suspense |
$11,810,854 |
2,324,971 |
| 125 |
The Adventures of Elmo in G… |
Oct 1, 1999 |
Sony Pictures |
Adventure |
$11,634,458 |
2,290,247 |
| 126 |
The Muse |
Aug 27, 1999 |
October Films |
Comedy |
$11,614,954 |
2,286,408 |
| 127 |
Wing Commander |
Mar 12, 1999 |
20th Century Fox |
Action |
$11,578,022 |
2,279,138 |
| 128 |
Star Trek: Insurrection |
Dec 11, 1998 |
Paramount Pictures |
Adventure |
$11,533,472 |
2,270,368 |
| 129 |
The Waterboy |
Nov 6, 1998 |
Walt Disney |
Comedy |
$11,449,338 |
2,253,806 |
| 130 |
The Rugrats Movie |
Nov 20, 1998 |
Paramount Pictures |
Adventure |
$11,308,493 |
2,226,081 |
| 131 |
Chill Factor |
Sep 1, 1999 |
Warner Bros. |
Action |
$11,263,966 |
2,217,316 |
| 132 |
Cookie's Fortune |
Apr 2, 1999 |
October Films |
Comedy |
$10,920,544 |
2,149,713 |
| 133 |
Office Space |
Feb 19, 1999 |
Miramax |
Black Comedy |
$10,827,813 |
2,131,459 |
| 134 |
The Astronaut's Wife |
Aug 27, 1999 |
New Line |
Thriller/Suspense |
$10,672,566 |
2,100,898 |
| 135 |
Drop Dead Gorgeous |
Jul 23, 1999 |
New Line |
Comedy |
$10,571,408 |
2,080,985 |
| 136 |
Three to Tango |
Oct 22, 1999 |
Warner Bros. |
Romantic Comedy |
$10,570,375 |
2,080,782 |
| 137 |
Universal Soldier II: The R… |
Aug 20, 1999 |
Sony Pictures |
Action |
$10,447,421 |
2,056,578 |
| 138 |
Black Mask |
May 14, 1999 |
Artisan |
Action |
$10,211,278 |
2,010,094 |
| 139 |
Bats |
Oct 22, 1999 |
Sony Pictures |
Horror |
$10,155,691 |
1,999,151 |
| 140 |
Brokedown Palace |
Aug 13, 1999 |
20th Century Fox |
Drama |
$10,115,014 |
1,991,144 |
| 141 |
The Red Violin |
Jun 11, 1999 |
Lionsgate |
Drama |
$10,019,109 |
1,972,265 |
| 142 |
Dudley Do-Right |
Aug 27, 1999 |
Universal |
Adventure |
$9,818,792 |
1,932,833 |
| 143 |
Trippin’ |
May 12, 1999 |
October Films |
Comedy |
$9,017,070 |
1,775,013 |
| 144 |
Teaching Mrs. Tingle |
Aug 20, 1999 |
Miramax |
Comedy |
$8,959,883 |
1,763,756 |
| 145 |
Mystery, Alaska |
Oct 1, 1999 |
Walt Disney |
Comedy |
$8,891,623 |
1,750,319 |
| 146 |
Pushing Tin |
Apr 23, 1999 |
20th Century Fox |
Comedy |
$8,408,835 |
1,655,282 |
| 147 |
Twin Dragons |
Apr 9, 1999 |
Miramax |
Action |
$8,332,431 |
1,640,242 |
| 148 |
The Love Letter |
May 21, 1999 |
Dreamworks SKG |
Romantic Comedy |
$8,322,608 |
1,638,308 |
| 149 |
Outside Providence |
Sep 1, 1999 |
Miramax |
Comedy |
$7,309,628 |
1,438,903 |
| 150 |
Run Lola Run |
Jun 18, 1999 |
Sony Pictures Cla… |
Thriller/Suspense |
$7,197,093 |
1,416,750 |
| 151 |
Africa's Elephant Kingdom |
May 8, 1998 |
Discovery/IMAX |
Documentary |
$7,049,211 |
1,387,639 |
| 152 |
Buena Vista Social Club |
Jun 4, 1999 |
Artisan |
Documentary |
$6,918,494 |
1,361,908 |
| 153 |
Extreme |
Mar 23, 1999 |
IMAX Films |
Documentary |
$6,892,475 |
1,356,786 |
| 154 |
200 Cigarettes |
Feb 26, 1999 |
Paramount Pictures |
Romantic Comedy |
$6,852,450 |
1,348,907 |
| 155 |
Lost and Found |
Apr 23, 1999 |
Warner Bros. |
Romantic Comedy |
$6,552,255 |
1,289,813 |
| 156 |
Dick |
Aug 4, 1999 |
Sony Pictures |
Comedy |
$6,276,869 |
1,235,604 |
| 157 |
Affliction |
Dec 30, 1998 |
Lionsgate |
Drama |
$6,238,175 |
1,227,987 |
| 158 |
Foolish |
Apr 9, 1999 |
Artisan |
Comedy |
$6,026,908 |
1,186,399 |
| 159 |
Les Boys II |
Oct 23, 1998 |
Lionsgate |
Comedy |
$5,974,732 |
1,176,128 |
| 160 |
Light It Up |
Nov 10, 1999 |
20th Century Fox |
Drama |
$5,821,544 |
1,145,973 |
| 161 |
Central Station |
Nov 20, 1998 |
Sony Pictures Cla… |
Drama |
$5,274,531 |
1,038,293 |
| 162 |
Island of the Sharks |
Apr 30, 1999 |
IMAX Films |
Documentary |
$5,206,926 |
1,024,985 |
| 163 |
Jakob the Liar |
Sep 24, 1999 |
Sony Pictures |
Drama |
$4,956,401 |
975,669 |
| 164 |
A Walk on the Moon |
Mar 26, 1999 |
Miramax |
Drama |
$4,741,987 |
933,462 |
| 165 |
Hilary and Jackie |
Dec 30, 1998 |
October Films |
Drama |
$4,739,909 |
933,052 |
| 166 |
Mumford |
Sep 24, 1999 |
Walt Disney |
Comedy |
$4,559,569 |
897,552 |
| 167 |
Gods and Monsters |
Nov 6, 1998 |
Lionsgate |
Drama |
$4,467,274 |
879,384 |
| 168 |
Simply Irresistible |
Feb 5, 1999 |
20th Century Fox |
Romantic Comedy |
$4,398,989 |
865,942 |
| 169 |
Flawless |
Nov 24, 1999 |
MGM |
Drama |
$4,394,718 |
865,101 |
| 170 |
The Straight Story |
Oct 15, 1999 |
Walt Disney |
Drama |
$4,375,944 |
861,406 |
| 171 |
Encounter in the Third Dime… |
Feb 26, 1999 |
nWave Pictures |
Drama |
$4,269,548 |
840,462 |
| 172 |
Detroit Rock City |
Aug 13, 1999 |
New Line |
Comedy |
$4,217,115 |
830,140 |
| 173 |
The Cider House Rules |
Dec 10, 1999 |
Miramax |
Drama |
$4,201,516 |
827,070 |
| 174 |
Gloria |
Jan 22, 1999 |
Sony Pictures |
Drama |
$4,167,493 |
820,372 |
| 175 |
Dinner Game |
Jul 9, 1999 |
Lionsgate |
Comedy |
$4,065,116 |
800,219 |
| 176 |
The Winslow Boy |
Apr 30, 1999 |
Sony Pictures Cla… |
Drama |
$4,058,350 |
798,887 |
| 177 |
Idle Hands |
Apr 30, 1999 |
Sony Pictures |
Horror |
$4,023,741 |
792,075 |
| 178 |
Playing by Heart |
Dec 30, 1998 |
Miramax |
Drama |
$3,919,278 |
771,511 |
| 179 |
Lock, Stock and Two Smoking… |
Mar 5, 1999 |
Gramercy |
Black Comedy |
$3,897,569 |
767,237 |
| 180 |
Little Voice |
Dec 4, 1998 |
Miramax |
Musical |
$3,714,954 |
731,290 |
| 181 |
Rush Hour |
Sep 18, 1998 |
New Line |
Action |
$3,619,410 |
712,482 |
| 182 |
Thrill Ride: The Science of… |
Jul 11, 1997 |
Sony Pictures Cla… |
Documentary |
$3,441,911 |
677,541 |
| 183 |
Jack Frost |
Dec 11, 1998 |
Warner Bros. |
Comedy |
$3,391,985 |
667,713 |
| 184 |
The School of Flesh |
Feb 26, 1999 |
Stratosphere Ente… |
Drama |
$3,359,031 |
661,226 |
| 185 |
Fifty |
Oct 29, 1999 |
Warren Miller Ent… |
Documentary |
$3,328,240 |
655,165 |
| 186 |
Elvis Gratton 2 |
Jul 2, 1999 |
Lionsgate |
Comedy |
$3,316,272 |
652,809 |
| 187 |
Jawbreaker |
Feb 19, 1999 |
Sony Pictures |
Black Comedy |
$3,076,820 |
605,673 |
| 188 |
The Limey |
Oct 8, 1999 |
Artisan |
Drama |
$3,020,829 |
594,651 |
| 189 |
Wolves |
Feb 26, 1999 |
Primesco |
Documentary |
$2,852,213 |
561,459 |
| 190 |
eXistenZ |
Apr 23, 1999 |
Miramax |
Thriller/Suspense |
$2,840,417 |
559,137 |
| 191 |
Love Stinks |
Sep 10, 1999 |
Independent Artists |
Comedy |
$2,793,776 |
549,955 |
| 192 |
Boys Don't Cry |
Oct 8, 1999 |
Fox Searchlight |
Drama |
$2,697,068 |
530,918 |
| 193 |
Marius et Jeannette |
Dec 5, 1997 |
New Yorker |
Romantic Comedy |
$2,552,768 |
502,513 |
| 194 |
Mansfield Park |
Nov 18, 1999 |
Miramax |
Drama |
$2,472,250 |
486,663 |
| 195 |
Princess Mononoke |
Oct 29, 1999 |
Miramax |
Action |
$2,374,107 |
467,343 |
| 196 |
Windhorse |
Feb 12, 1999 |
Shadow |
Drama |
$2,297,017 |
452,168 |
| 197 |
Fantasia 2000 (Theatrical R… |
Dec 31, 1999 |
Walt Disney |
Musical |
$2,290,525 |
450,890 |
| 198 |
Liberty Heights |
Nov 17, 1999 |
Warner Bros. |
Drama |
$2,286,654 |
450,128 |
| 199 |
Babe: Pig in the City |
Nov 25, 1998 |
Universal |
Adventure |
$2,185,790 |
430,273 |
| 200 |
A Dog of Flanders |
Aug 27, 1999 |
Warner Bros. |
Drama |
$2,165,637 |
426,306 |
| 201 |
Siegfried & Roy: Masters of… |
Oct 1, 1999 |
IMAX Films |
Documentary |
$2,162,167 |
425,623 |
| 202 |
Limbo |
Jun 4, 1999 |
Sony Pictures |
Drama |
$2,160,710 |
425,336 |
| 203 |
All About My Mother |
Nov 5, 1999 |
Sony Pictures Cla… |
Drama |
$2,133,411 |
419,962 |
| 204 |
Down in the Delta |
Dec 25, 1998 |
Miramax |
Drama |
$2,084,653 |
410,364 |
| 205 |
Autumn Tale |
Jul 9, 1999 |
October Films |
Drama |
$2,082,061 |
409,854 |
| 206 |
Ravenous |
Mar 19, 1999 |
20th Century Fox |
Horror |
$2,062,406 |
405,985 |
| 207 |
Trick |
Jul 23, 1999 |
Fine Line |
Comedy |
$2,049,595 |
403,463 |
| 208 |
Three Seasons |
Apr 30, 1999 |
October Films |
Drama |
$2,046,492 |
402,852 |
| 209 |
Happy, Texas |
Oct 1, 1999 |
Miramax |
Comedy |
$2,039,192 |
401,415 |
| 210 |
Besieged |
May 21, 1999 |
Fine Line |
Drama |
$2,032,621 |
400,122 |
| 211 |
Better Than Chocolate |
Aug 13, 1999 |
Trimark |
Romantic Comedy |
$2,011,254 |
395,916 |
| 212 |
Hum Saath-Saath Hain |
Sep 10, 1999 |
Eros Entertainment |
Musical |
$2,005,094 |
394,703 |
| 213 |
Taal |
Aug 13, 1999 |
Eros Entertainment |
Musical |
$1,980,398 |
389,842 |
| 214 |
Crazy in Alabama |
Oct 22, 1999 |
Sony Pictures |
Drama |
$1,954,202 |
384,685 |
| 215 |
Goodbye, Lover |
Apr 16, 1999 |
Warner Bros. |
Comedy |
$1,940,299 |
381,948 |
| 216 |
Wildfire: Feel The Heat |
Mar 12, 1999 |
Primesco |
Documentary |
$1,850,683 |
364,307 |
| 217 |
There's Something About Mary |
Jul 15, 1998 |
20th Century Fox |
Romantic Comedy |
$1,772,686 |
348,953 |
| 218 |
The Dreamlife of Angels |
Apr 2, 1999 |
Sony Pictures Cla… |
Drama |
$1,734,831 |
341,502 |
| 219 |
Pleasantville |
Oct 23, 1998 |
New Line |
Comedy |
$1,699,907 |
334,627 |
| 220 |
Tango |
Feb 12, 1999 |
Sony Pictures Cla… |
Drama |
$1,687,311 |
332,147 |
| 221 |
Astérix et Obélix contre Cé… |
Jun 4, 1999 |
Distributor Unknown |
Adventure |
$1,644,060 |
323,633 |
| 222 |
The Silence |
Nov 10, 1999 |
New Yorker |
Drama |
$1,602,015 |
315,357 |
| 223 |
Romance |
Sep 17, 1999 |
Trimark |
Drama |
$1,585,642 |
312,134 |
| 224 |
The End of the Affair |
Dec 3, 1999 |
Sony Pictures |
Drama |
$1,555,329 |
306,167 |
| 225 |
Antz |
Oct 2, 1998 |
Dreamworks SKG |
Adventure |
$1,432,193 |
281,927 |
| 226 |
Hideous Kinky |
Apr 16, 1999 |
Stratosphere Ente… |
Drama |
$1,368,627 |
269,414 |
| 227 |
Hurlyburly |
Dec 25, 1998 |
Fine Line |
Comedy |
$1,333,030 |
262,407 |
| 228 |
Dancing at Lughnasa |
Nov 13, 1998 |
Sony Pictures Cla… |
Drama |
$1,170,543 |
230,421 |
| 229 |
Get Real |
Apr 30, 1999 |
Paramount Pictures |
Comedy |
$1,152,411 |
226,852 |
| 230 |
Cabaret Balkan |
Jul 23, 1999 |
Paramount Vantage |
Drama |
$1,152,411 |
226,852 |
| 231 |
Tumbleweeds |
Nov 24, 1999 |
Fine Line |
Drama |
$1,100,773 |
216,687 |
| 232 |
This is My Father |
May 7, 1999 |
Sony Pictures Cla… |
Drama |
$1,083,268 |
213,241 |
| 233 |
Meet Joe Black |
Nov 13, 1998 |
Universal |
Drama |
$1,064,265 |
209,500 |
| 234 |
The General |
Dec 18, 1998 |
Sony Pictures Cla… |
Drama |
$1,034,645 |
203,670 |
| 235 |
The King of Masks |
Apr 30, 1999 |
Goldwyn Entertain… |
Drama |
$1,014,895 |
199,782 |
| 236 |
The Castle |
May 7, 1999 |
Miramax |
Comedy |
$1,007,834 |
198,392 |
| 237 |
Straight From The Heart |
Jun 18, 1999 |
Video Sound |
Musical |
$1,007,446 |
198,316 |
| 238 |
Xiu Xiu: The Sent Down Girl |
May 7, 1999 |
Stratosphere Ente… |
Drama |
$1,006,518 |
198,133 |
| 239 |
Another Day in Paradise |
Dec 30, 1998 |
Trimark |
Drama |
$1,005,485 |
197,930 |
| 240 |
Twin Falls Idaho |
Jul 30, 1999 |
Sony Pictures Cla… |
Drama |
$985,341 |
193,964 |
| 241 |
The Children of Heaven |
Jan 22, 1999 |
Miramax |
Adventure |
$933,933 |
183,845 |
| 242 |
Edge of Seventeen |
Apr 30, 1999 |
Strand |
Comedy |
$868,348 |
170,934 |
| 243 |
Sweet and Lowdown |
Dec 3, 1999 |
Sony Pictures Cla… |
Romantic Comedy |
$867,523 |
170,772 |
| 244 |
Illuminata |
Aug 6, 1999 |
Artisan |
Drama |
$836,641 |
164,693 |
| 245 |
I Still Know What You Did L… |
Nov 13, 1998 |
Sony Pictures |
Horror |
$821,108 |
161,635 |
| 246 |
Galapagos |
Oct 29, 1999 |
IMAX Films |
Documentary |
$806,245 |
158,709 |
| 247 |
After Life |
May 12, 1999 |
Artistic License |
Drama |
$783,102 |
154,153 |
| 248 |
Cradle Will Rock |
Dec 8, 1999 |
Walt Disney |
Drama |
$771,052 |
151,781 |
| 249 |
The Siege |
Nov 6, 1998 |
20th Century Fox |
Action |
$768,568 |
151,292 |
| 250 |
Magnolia |
Dec 17, 1999 |
New Line |
Drama |
$764,945 |
150,579 |
| 251 |
Felicia's Journey |
Nov 12, 1999 |
Artisan |
Drama |
$761,929 |
149,986 |
| 252 |
Wings of Courage |
Apr 21, 1995 |
Sony Pictures Cla… |
Drama |
$752,935 |
148,215 |
| 253 |
Body Shots |
Oct 22, 1999 |
New Line |
Drama |
$699,964 |
137,788 |
| 254 |
Mark Twain's America 3D |
Jul 3, 1998 |
Sony Pictures Cla… |
Documentary |
$671,617 |
132,208 |
| 255 |
Guinevere |
Sep 24, 1999 |
Miramax |
Drama |
$668,099 |
131,515 |
| 256 |
Laura Cadieux .. La Suite |
Dec 3, 1999 |
Alliance Films |
Comedy |
$641,624 |
126,303 |
| 257 |
My Life So Far |
Jul 23, 1999 |
Miramax |
Drama |
$635,620 |
125,122 |
| 258 |
Trekkies |
May 21, 1999 |
Paramount Pictures |
Documentary |
$617,172 |
121,490 |
| 259 |
Psycho |
Dec 4, 1998 |
Universal |
Horror |
$603,955 |
118,888 |
| 260 |
American History X |
Oct 30, 1998 |
New Line |
Drama |
$598,075 |
117,731 |
| 261 |
The Third Man |
May 7, 1999 |
Rialto Pictures |
Thriller/Suspense |
$596,349 |
117,391 |
| 262 |
20 Dates |
Feb 26, 1999 |
Fox Searchlight |
Comedy |
$541,636 |
106,621 |
| 263 |
The Hurricane |
Dec 29, 1999 |
Universal |
Drama |
$541,225 |
106,540 |
| 264 |
Baadshah |
Aug 27, 1999 |
Eros Entertainment |
Action |
$535,021 |
105,319 |
| 265 |
Across The Sea of Time |
Oct 20, 1995 |
Sony Pictures Cla… |
Drama |
$505,005 |
99,410 |
| 266 |
Lovers of the Arctic Circle |
Apr 9, 1999 |
Fine Line |
Drama |
$504,223 |
99,256 |
| 267 |
Jerry Springer: Ringmaster |
Nov 25, 1998 |
Artisan |
Comedy |
$495,181 |
97,476 |
| 268 |
Ride With the Devil |
Nov 24, 1999 |
USA Films |
Western |
$491,069 |
96,667 |
| 269 |
The Harmonists |
Mar 12, 1999 |
Miramax |
|
$479,828 |
94,454 |
| 270 |
Still Crazy |
Jan 22, 1999 |
Sony Pictures |
|
$477,903 |
94,075 |
| 271 |
Plunkett & Macleane |
Oct 1, 1999 |
Gramercy |
|
$476,432 |
93,785 |
| 272 |
Earth |
Sep 10, 1999 |
Zeitgeist |
Drama |
$475,612 |
93,624 |
| 273 |
Dillagi |
Nov 19, 1999 |
|
|
$463,159 |
91,173 |
| 274 |
American Movie: The Making … |
Nov 5, 1999 |
Sony Pictures Cla… |
Documentary |
$459,537 |
90,460 |
| 275 |
Lucie Aubrac |
Sep 17, 1999 |
USA Films |
|
$458,557 |
90,267 |
| 276 |
Relax… It's Just Sex |
Apr 30, 1999 |
|
|
$452,654 |
89,105 |
| 277 |
Girl, Interrupted |
Dec 21, 1999 |
Sony Pictures |
Drama |
$434,810 |
85,592 |
| 278 |
My Son the Fanatic |
Jun 25, 1999 |
Miramax |
|
$428,287 |
84,308 |
| 279 |
Sarfarosh |
Apr 30, 1999 |
|
|
$427,973 |
84,246 |
| 280 |
Just the Ticket |
Feb 26, 1999 |
MGM |
|
$427,957 |
84,243 |
| 281 |
The Last Days |
Feb 5, 1999 |
October Films |
Documentary |
$419,762 |
82,630 |
| 282 |
The Loss of Sexual Innocence |
May 28, 1999 |
Sony Pictures |
Drama |
$399,793 |
78,699 |
| 283 |
The Celebration |
Oct 9, 1998 |
October Films |
Comedy |
$397,475 |
78,243 |
| 284 |
Steam: The Turkish Bath |
Nov 25, 1998 |
Strand |
Drama |
$391,450 |
77,057 |
| 285 |
Open Your Eyes |
Apr 16, 1999 |
Artisan |
Drama |
$370,720 |
72,976 |
| 286 |
The Minus Man |
Sep 10, 1999 |
Artisan |
Drama |
$370,668 |
72,966 |
| 287 |
Head On |
Aug 13, 1999 |
Strand |
|
$365,816 |
72,011 |
| 288 |
The Nutcracker |
Nov 25, 1998 |
IMAX Films |
Musical |
$355,476 |
69,975 |
| 289 |
Black Cat, White Cat |
Sep 10, 1999 |
USA Films |
Comedy |
$348,660 |
68,633 |
| 290 |
Home Fries |
Nov 25, 1998 |
Warner Bros. |
Black Comedy |
$347,576 |
68,420 |
| 291 |
My Name is Joe |
Jan 22, 1999 |
Artisan |
|
$346,696 |
68,247 |
| 292 |
Vampires |
Oct 30, 1998 |
Sony Pictures |
Horror |
$326,377 |
64,247 |
| 293 |
Enfants du Marais, Les |
Oct 1, 1999 |
|
Drama |
$324,006 |
63,780 |
| 294 |
La Grande Illusion |
Sep 12, 1938 |
Rialto Pictures |
Drama |
$316,050 |
62,214 |
| 295 |
Grey Owl |
Oct 1, 1999 |
|
|
$314,505 |
61,910 |
| 296 |
Hindustan Ki Kasam |
Jul 23, 1999 |
|
Action |
$310,330 |
61,088 |
| 297 |
Metroland |
Apr 9, 1999 |
Sony Pictures |
|
$303,909 |
59,824 |
| 298 |
SLC Punk! |
Apr 16, 1999 |
Sony Pictures Cla… |
|
$299,200 |
58,897 |
| 299 |
Simon Sez |
Sep 24, 1999 |
|
|
$292,152 |
57,510 |
| 300 |
Dil Kya Kare |
Sep 24, 1999 |
Eros Entertainment |
Musical |
$284,856 |
56,074 |
| 301 |
Splendor |
Sep 17, 1999 |
Goldwyn Entertain… |
|
$284,119 |
55,928 |
| 302 |
The Legend of 1900 |
Oct 29, 1999 |
Fine Line |
Musical |
$262,933 |
51,758 |
| 303 |
Twice Upon a Yesterday |
May 28, 1999 |
Trimark |
Comedy |
$258,464 |
50,878 |
| 304 |
Living Out Loud |
Oct 30, 1998 |
New Line |
Drama |
$251,396 |
49,487 |
| 305 |
Hello Brother |
Sep 10, 1999 |
Video Sound |
Action |
$245,034 |
48,235 |
| 306 |
Dog Park |
Sep 24, 1999 |
New Line |
|
$242,093 |
47,656 |
| 307 |
Dancemaker |
Mar 5, 1999 |
Artistic License |
Documentary |
$240,514 |
47,345 |
| 308 |
A Place Called Chiapas |
Apr 9, 1999 |
|
Documentary |
$237,779 |
46,806 |
| 309 |
The Bicycle Thief |
Oct 2, 1998 |
|
Drama |
$231,896 |
45,648 |
| 310 |
One Man's Hero |
Sep 24, 1999 |
MGM |
Action |
$229,311 |
45,139 |
| 311 |
Endurance |
May 14, 1999 |
Walt Disney |
|
$229,128 |
45,103 |
| 312 |
Babar: King of the Elephants |
Feb 26, 1999 |
|
Adventure |
$227,374 |
44,758 |
| 313 |
West Beirut |
Sep 3, 1999 |
Cowboy Pictures |
|
$219,167 |
43,143 |
| 314 |
Hote Hote Pyar Ho Gaya |
Jul 2, 1999 |
|
Action |
$214,574 |
42,238 |
| 315 |
Beefcake |
Oct 13, 1999 |
Strand |
Drama |
$213,166 |
41,961 |
| 316 |
Rosetta |
Nov 5, 1999 |
USA Films |
Drama |
$196,796 |
38,739 |
| 317 |
Urban Legend |
Sep 25, 1998 |
Sony Pictures |
Horror |
$191,295 |
37,656 |
| 318 |
Angela's Ashes |
Dec 24, 1999 |
Paramount Pictures |
Drama |
$186,032 |
36,620 |
| 319 |
Revelation |
May 7, 1999 |
|
|
$179,640 |
35,362 |
| 320 |
Breakfast of Champions |
Sep 17, 1999 |
Walt Disney |
Comedy |
$178,287 |
35,095 |
| 321 |
Sugar Town |
Sep 17, 1999 |
October Films |
Comedy |
$178,095 |
35,058 |
| 322 |
The Swindle |
Oct 24, 1997 |
New Yorker |
Comedy |
$174,662 |
34,382 |
| 323 |
The Emperor and the Assassin |
Dec 17, 1999 |
Sony Pictures Cla… |
Drama |
$173,078 |
34,070 |
| 324 |
The Source |
Aug 25, 1999 |
WinStar Cinema |
Documentary |
$167,773 |
33,026 |
| 325 |
Train of Life |
Nov 5, 1999 |
Paramount Pictures |
Drama |
$159,303 |
31,358 |
| 326 |
Mast |
Oct 15, 1999 |
Eros Entertainment |
Drama |
$158,928 |
31,285 |
| 327 |
Last Night |
Oct 23, 1998 |
Lionsgate |
Drama |
$158,900 |
31,279 |
| 328 |
Topsy Turvy |
Dec 17, 1999 |
USA Films |
Musical |
$158,696 |
31,239 |
| 329 |
Stop Making Sense |
Oct 19, 1984 |
Cinecom |
Concert/Perfor… |
$148,443 |
29,221 |
| 330 |
Snow Falling on Cedars |
Dec 24, 1999 |
Universal |
Drama |
$143,105 |
28,170 |
| 331 |
The Acid House |
Aug 6, 1999 |
Zeitgeist |
Drama |
$142,783 |
28,106 |
| 332 |
Dry Cleaning |
Feb 5, 1999 |
Strand |
|
$142,363 |
28,024 |
| 333 |
Silsila Hai Pyar Ka |
Apr 16, 1999 |
|
Romantic Comedy |
$141,528 |
27,859 |
| 334 |
The Hi-Lo Country |
Dec 30, 1998 |
Gramercy |
|
$140,085 |
27,575 |
| 335 |
Histoires d'hiver |
Feb 26, 1999 |
|
|
$138,411 |
27,246 |
| 336 |
Matroni et Moi |
Oct 8, 1999 |
|
Comedy |
$130,572 |
25,703 |
| 337 |
The City |
Oct 22, 1999 |
Zeitgeist |
Drama |
$125,296 |
24,664 |
| 338 |
Belly |
Nov 4, 1998 |
Artisan |
Drama |
$125,123 |
24,630 |
| 339 |
Tour Truffaut |
Apr 23, 1999 |
|
|
$118,228 |
23,273 |
| 340 |
The Lovers on the Bridge |
Jul 2, 1999 |
Miramax |
Drama |
$117,569 |
23,143 |
| 341 |
The Apple |
Feb 19, 1999 |
|
Drama |
$116,758 |
22,983 |
| 342 |
Unconditional Love |
Feb 12, 1999 |
|
Action |
$115,202 |
22,677 |
| 343 |
Happiness |
Oct 16, 1998 |
Good Machine Rele… |
Comedy |
$110,829 |
21,816 |
| 344 |
The 24 Hour Woman |
Jan 29, 1999 |
Artisan |
Comedy |
$109,148 |
21,485 |
| 345 |
Eternity and a Day |
May 28, 1999 |
Artistic License |
Drama |
$106,486 |
20,961 |
| 346 |
Show Me Love |
Oct 15, 1999 |
Strand |
|
$100,573 |
19,797 |
| 347 |
Friends and Lovers |
Apr 16, 1999 |
Lionsgate |
Drama |
$100,111 |
19,706 |
| 348 |
The Adventures of Sebastian… |
Aug 6, 1999 |
Paramount Vantage |
Comedy |
$100,041 |
19,693 |
| 349 |
Perfect Blue |
Aug 20, 1999 |
|
|
$99,389 |
19,564 |
| 350 |
Desert Blue |
Jun 4, 1999 |
Goldwyn Entertain… |
|
$99,147 |
19,517 |
| 351 |
Sunshine |
Dec 17, 1999 |
Paramount Vantage |
Drama |
$97,677 |
19,227 |
| 352 |
Beloved |
Oct 16, 1998 |
Walt Disney |
Drama |
$96,526 |
19,001 |
| 353 |
The Very Thought of You |
Aug 27, 1999 |
Miramax |
Romantic Comedy |
$94,176 |
18,538 |
| 354 |
Such a Long Journey |
Feb 25, 1999 |
Shooting Gallery |
|
$92,569 |
18,222 |
| 355 |
Caligula |
Sep 17, 1999 |
|
Drama |
$92,200 |
18,149 |
| 356 |
I'll Be Home For Christmas |
Nov 13, 1998 |
Walt Disney |
Comedy |
$92,092 |
18,128 |
| 357 |
Ronin |
Sep 25, 1998 |
MGM |
Action |
$88,492 |
17,419 |
| 358 |
The Saragossa Manuscript |
May 21, 1999 |
Cowboy Pictures |
Comedy |
$87,418 |
17,208 |
| 359 |
Titus |
Dec 24, 1999 |
20th Century Fox |
Drama |
$86,328 |
16,993 |
| 360 |
Peeping Tom |
Feb 5, 1999 |
|
|
$83,957 |
16,526 |
| 361 |
Lal Baadshah |
Mar 5, 1999 |
|
Action |
$81,873 |
16,116 |
| 362 |
Vaastar |
Oct 15, 1999 |
|
Action |
$81,367 |
16,017 |
| 363 |
Julien Donkey-Boy |
Oct 8, 1999 |
Fine Line |
|
$80,226 |
15,792 |
| 364 |
Thicker Than Water |
Oct 27, 1999 |
Palm Pictures |
Drama |
$79,823 |
15,713 |
| 365 |
Dr. Akagi |
Jan 15, 1999 |
Kino International |
|
$71,832 |
14,140 |
| 366 |
Kohram |
Aug 6, 1999 |
Video Sound |
Action |
$70,257 |
13,830 |
| 367 |
Stiff Upper Lips |
Aug 27, 1999 |
Cowboy Pictures |
Comedy |
$69,582 |
13,697 |
| 368 |
Late August, Early September |
Jul 9, 1999 |
Zeitgeist |
Drama |
$68,206 |
13,426 |
| 369 |
Holy Smoke |
Dec 3, 1999 |
Miramax |
Drama |
$65,328 |
12,859 |
| 370 |
Among Giants |
Mar 26, 1999 |
Fox Searchlight |
Romantic Comedy |
$64,359 |
12,669 |
| 371 |
The Joyriders |
Apr 16, 1999 |
|
Drama |
$64,098 |
12,617 |
| 372 |
Dahek |
Dec 17, 1999 |
|
|
$63,886 |
12,575 |
| 373 |
Those Who Love Me Can Take … |
Aug 4, 1999 |
Kino International |
Drama |
$63,651 |
12,529 |
| 374 |
Joe the King |
Oct 15, 1999 |
Trimark |
|
$60,279 |
11,865 |
| 375 |
The Mirror |
Nov 25, 1998 |
|
|
$57,808 |
11,379 |
| 376 |
The War Zone |
Dec 10, 1999 |
Lot 47 Films |
Drama |
$57,291 |
11,277 |
| 377 |
I Stand Alone |
Mar 17, 1999 |
Strand |
Drama |
$56,847 |
11,190 |
| 378 |
God Said, 'Ha!' |
Feb 12, 1999 |
Miramax |
|
$52,324 |
10,300 |
| 379 |
The Gambler |
Aug 4, 1999 |
|
Drama |
$51,773 |
10,191 |
| 380 |
Meeting People is Easy |
Mar 26, 1999 |
Seventh Art Relea… |
Documentary |
$51,282 |
10,094 |
| 381 |
Sirf Tum |
Jun 11, 1999 |
Eros Entertainment |
Drama |
$50,785 |
9,997 |
| 382 |
8½ |
Jun 25, 1963 |
Kino International |
Drama |
$50,690 |
9,978 |
| 383 |
Six Ways to Sunday |
Mar 5, 1999 |
Stratosphere Ente… |
|
$50,334 |
9,908 |
| 384 |
Leila |
May 14, 1999 |
First Run Features |
Drama |
$50,133 |
9,868 |
| 385 |
The Grandfather |
Oct 8, 1999 |
Miramax |
Drama |
$50,037 |
9,849 |
| 386 |
Following |
Apr 2, 1999 |
Zeitgeist |
|
$48,482 |
9,543 |
| 387 |
Grizzly Falls |
Oct 8, 1999 |
|
|
$48,375 |
9,522 |
| 388 |
Just a Little Harmless Sex |
Jun 11, 1999 |
Phaedra Cinema |
|
$46,231 |
9,100 |
| 389 |
The Ogre |
Dec 11, 1998 |
Kino International |
|
$45,666 |
8,989 |
| 390 |
Virtual Sexuality |
Dec 3, 1999 |
Sony Pictures |
|
$43,865 |
8,634 |
| 391 |
Get Bruce |
Sep 17, 1999 |
Miramax |
Documentary |
$43,155 |
8,495 |
| 392 |
The Third Miracle |
Dec 29, 1999 |
Sony Pictures |
Drama |
$41,549 |
8,178 |
| 393 |
On The Ropes |
Aug 18, 1999 |
|
|
$40,933 |
8,057 |
| 394 |
L'Ennui |
Oct 8, 1999 |
Phaedra Cinema |
Drama |
$36,666 |
7,217 |
| 395 |
Whiteboyz |
Sep 10, 1999 |
Fox Searchlight |
Drama |
$36,025 |
7,091 |
| 396 |
The Eel |
Aug 21, 1998 |
New Yorker |
|
$35,217 |
6,932 |
| 397 |
B. Monkey |
Sep 10, 1999 |
Miramax |
Thriller/Suspense |
$34,524 |
6,796 |
| 398 |
The Velocity of Gary |
Jul 16, 1999 |
Sony Pictures |
|
$34,145 |
6,721 |
| 399 |
Mr. Death: The Rise and Fal… |
Dec 29, 1999 |
Lionsgate |
Documentary |
$33,516 |
6,597 |
| 400 |
Man of the Century |
Oct 29, 1999 |
Fine Line |
|
$33,031 |
6,502 |
| 401 |
Shiloh 2: Shiloh Season |
Jun 25, 1999 |
Warner Bros. |
|
$33,000 |
6,496 |
| 402 |
Genghis Blues |
Jul 9, 1999 |
Roxie Releasing |
Documentary |
$32,606 |
6,418 |
| 403 |
My Best Fiend |
Nov 5, 1999 |
New Yorker |
Documentary |
$31,460 |
6,192 |
| 404 |
Beyond the Clouds |
Dec 3, 1999 |
|
Drama |
$30,890 |
6,080 |
| 405 |
Free Enterprise |
Jun 4, 1999 |
Regent Releasing |
|
$30,193 |
5,943 |
| 406 |
Ever After: A Cinderella Story |
Jul 31, 1998 |
20th Century Fox |
Drama |
$28,807 |
5,670 |
| 407 |
Same Old Song |
Oct 15, 1999 |
Artistic License |
|
$28,152 |
5,541 |
| 408 |
Finding North |
Jun 4, 1999 |
Cowboy Pictures |
Romantic Comedy |
$26,909 |
5,297 |
| 409 |
Eight Days a Week |
Feb 26, 1999 |
Legacy Releasing |
|
$26,347 |
5,186 |
| 410 |
Let it Come Down: The Life … |
Apr 28, 1999 |
Zeitgeist |
Documentary |
$26,336 |
5,184 |
| 411 |
Cucaracha, La |
Apr 23, 1999 |
|
Drama |
$26,276 |
5,172 |
| 412 |
Best Laid Plans |
Sep 10, 1999 |
20th Century Fox |
Thriller/Suspense |
$25,651 |
5,049 |
| 413 |
Like It Is |
Aug 28, 1998 |
First Run Features |
|
$25,517 |
5,023 |
| 414 |
The Theory of Flight |
Dec 23, 1998 |
Fine Line |
|
$25,068 |
4,934 |
| 415 |
Bandits |
Sep 24, 1999 |
Stratosphere Ente… |
Drama |
$24,187 |
4,761 |
| 416 |
All the Little Animals |
Sep 3, 1999 |
Lionsgate |
Thriller/Suspense |
$23,349 |
4,596 |
| 417 |
Regret to Inform |
Jun 25, 1999 |
Artistic License |
Documentary |
$22,627 |
4,454 |
| 418 |
Love is the Devil |
Oct 7, 1998 |
Strand |
|
$22,048 |
4,340 |
| 419 |
A Map of the World |
Dec 3, 1999 |
USA Films |
Drama |
$20,878 |
4,109 |
| 420 |
New Rose Hotel |
Oct 1, 1999 |
Avalanche Releasing |
|
$20,416 |
4,018 |
| 421 |
Hard |
Jun 25, 1999 |
|
|
$19,596 |
3,857 |
| 422 |
That's the Way I Like It |
Oct 15, 1999 |
Miramax |
|
$19,319 |
3,802 |
| 423 |
Beauty |
Mar 19, 1999 |
|
Drama |
$18,629 |
3,667 |
| 424 |
Sticky Fingers of Time |
Jan 8, 1999 |
Strand |
Thriller/Suspense |
$18,195 |
3,581 |
| 425 |
Molly |
Oct 22, 1999 |
MGM |
|
$17,396 |
3,424 |
| 426 |
Mighty Peking Man |
Apr 23, 1999 |
|
Horror |
$16,756 |
3,298 |
| 427 |
2by4 |
Nov 26, 1999 |
Strand |
Drama |
$16,637 |
3,275 |
| 428 |
Bedrooms and Hallways |
Sep 3, 1999 |
First Run Features |
Comedy |
$16,459 |
3,239 |
| 429 |
My Dinner with Andre |
May 14, 1999 |
New Yorker |
|
$15,063 |
2,965 |
| 430 |
Broken Vessels |
Jul 2, 1999 |
|
Drama |
$15,030 |
2,958 |
| 431 |
42 Up |
Nov 17, 1999 |
First Run Features |
Documentary |
$14,576 |
2,869 |
| 432 |
Shattered Image |
Dec 4, 1998 |
Lionsgate |
|
$14,168 |
2,788 |
| 433 |
Jeanne and the Perfect Guy |
Apr 16, 1999 |
Strand |
Musical |
$13,936 |
2,743 |
| 434 |
Blood, Guts, Bullets and Oc… |
Jan 15, 1999 |
Lionsgate |
Comedy |
$13,674 |
2,691 |
| 435 |
Miss Julie |
Dec 10, 1999 |
MGM |
|
$13,107 |
2,580 |
| 436 |
Diamonds |
Dec 10, 1999 |
Miramax |
Comedy |
$12,895 |
2,538 |
| 437 |
I'm Losing You |
Jul 16, 1999 |
Lionsgate |
|
$12,688 |
2,497 |
| 438 |
Clubland |
Apr 16, 1999 |
Legacy Releasing |
|
$12,598 |
2,479 |
| 439 |
Dial M for Murder (1954) |
May 29, 1954 |
|
Thriller/Suspense |
$12,562 |
2,472 |
| 440 |
Some Fish Can Fly |
Nov 5, 1999 |
Artistic License |
Romantic Comedy |
$12,499 |
2,460 |
| 441 |
Frogs for Snakes |
May 21, 1999 |
Artisan |
|
$12,191 |
2,399 |
| 442 |
Existo |
Sep 17, 1999 |
|
Comedy |
$12,175 |
2,396 |
| 443 |
Women |
Sep 17, 1999 |
|
|
$11,720 |
2,307 |
| 444 |
Welcome Back Mr. McDonald |
Sep 8, 1999 |
|
Comedy |
$11,507 |
2,265 |
| 445 |
Pizzicata |
Feb 5, 1999 |
|
|
$11,350 |
2,234 |
| 446 |
Spanish Fly |
Dec 2, 1999 |
Miramax |
|
$11,147 |
2,194 |
| 447 |
The Empty Mirror |
Mar 19, 1999 |
Lionsgate |
|
$10,750 |
2,116 |
| 448 |
Naturally Native |
Oct 8, 1999 |
|
|
$10,508 |
2,068 |
| 449 |
Taxman |
Sep 17, 1999 |
|
Comedy |
$9,871 |
1,943 |
| 450 |
Marcello Mastroianni - I Re… |
Aug 13, 1999 |
First Look |
Documentary |
$9,829 |
1,934 |
| 451 |
Rosie |
Jul 23, 1999 |
New Yorker |
|
$9,579 |
1,885 |
| 452 |
Beyond the Mat |
Oct 22, 1999 |
Universal |
Documentary |
$9,532 |
1,876 |
| 453 |
Hell's Kitchen |
Dec 3, 1999 |
Cowboy Pictures |
|
$9,122 |
1,795 |
| 454 |
Onegin |
Dec 17, 1999 |
Goldwyn Entertain… |
|
$8,855 |
1,743 |
| 455 |
Simpatico |
Dec 17, 1999 |
Phaedra Cinema |
Comedy |
$8,854 |
1,742 |
| 456 |
Private Confessions |
Jan 6, 1999 |
Kino International |
|
$8,759 |
1,724 |
| 457 |
The Thief |
Jul 17, 1998 |
Stratosphere Ente… |
Drama |
$8,713 |
1,715 |
| 458 |
No |
Apr 23, 1999 |
New Yorker |
|
$8,380 |
1,649 |
| 459 |
Fest of the Best |
Oct 22, 1999 |
|
|
$7,911 |
1,557 |
| 460 |
Six-String Samurai |
Sep 18, 1998 |
Palm Pictures |
|
$7,902 |
1,555 |
| 461 |
Dreaming of Joseph Lees |
Oct 29, 1999 |
Fox Searchlight |
|
$7,680 |
1,511 |
| 462 |
The Cruise |
Oct 23, 1998 |
Artisan |
|
$7,329 |
1,442 |
| 463 |
Raising the Stakes |
Aug 20, 1999 |
|
|
$7,092 |
1,396 |
| 464 |
The Inheritors |
Oct 9, 1998 |
Stratosphere Ente… |
|
$6,606 |
1,300 |
| 465 |
Les Bonnes Femmes |
Aug 13, 1999 |
|
Drama |
$6,578 |
1,294 |
| 466 |
The Red Dwarf |
Jun 18, 1999 |
Goldwyn Entertain… |
Comedy |
$6,499 |
1,279 |
| 467 |
Agnes Browne |
Dec 3, 1999 |
USA Films |
Comedy |
$6,322 |
1,244 |
| 468 |
Where's Marlowe |
Nov 12, 1999 |
Paramount Vantage |
Comedy |
$5,985 |
1,178 |
| 469 |
The Underground |
Mar 31, 1999 |
|
Action |
$5,809 |
1,143 |
| 470 |
The Suburbans |
Oct 29, 1999 |
Sony Pictures |
|
$5,797 |
1,141 |
| 471 |
The Last Cigarette |
Jun 9, 1999 |
New Yorker |
Documentary |
$5,674 |
1,116 |
| 472 |
Floating |
Sep 3, 1999 |
Phaedra Cinema |
Drama |
$5,651 |
1,112 |
| 473 |
The Winners |
Jan 20, 1999 |
First Run Features |
|
$5,508 |
1,084 |
| 474 |
Sparkler |
Mar 19, 1999 |
Strand |
|
$5,494 |
1,081 |
| 475 |
Getting to Know You |
Jan 22, 1999 |
|
|
$5,000 |
984 |
| 476 |
At Sachem Farm |
Jun 5, 1999 |
Distributor Unknown |
Drama |
$5,000 |
984 |
| 477 |
Harvest |
Mar 12, 1999 |
|
|
$5,000 |
984 |
| 478 |
Giving It Up |
Jan 17, 1999 |
Lionsgate |
Romantic Comedy |
$5,000 |
984 |
| 479 |
Ayn Rand: A Sense of Life |
Feb 13, 1998 |
Strand |
Documentary |
$4,737 |
932 |
| 480 |
The Mating Habits of the Ea… |
Oct 8, 1999 |
|
|
$4,634 |
912 |
| 481 |
Modulations |
Sep 4, 1998 |
Strand |
|
$4,604 |
906 |
| 482 |
Five Wives, Three Secretari… |
Oct 8, 1999 |
Castle Hill Produ… |
Documentary |
$4,450 |
875 |
| 483 |
Pusher |
May 7, 1999 |
First Run Features |
|
$4,440 |
874 |
| 484 |
Men Cry Bullets |
Oct 8, 1999 |
Phaedra Cinema |
|
$4,100 |
807 |
| 485 |
And Baby Makes 2 |
Jun 25, 1999 |
First Run Features |
Documentary |
$4,058 |
798 |
| 486 |
A Moment of Innocence |
Nov 10, 1999 |
New Yorker |
|
$3,997 |
786 |
| 487 |
Portraits Chinois |
Nov 5, 1999 |
Phaedra Cinema |
|
$3,972 |
781 |
| 488 |
Suits |
Sep 24, 1999 |
|
|
$3,676 |
723 |
| 489 |
Play it to the Bone |
Dec 24, 1999 |
Walt Disney |
Comedy |
$3,366 |
662 |
| 490 |
Strawberry Fields |
Jun 4, 1999 |
Phaedra Cinema |
Drama |
$3,347 |
658 |
| 491 |
How Stella Got Her Groove Back |
Aug 14, 1998 |
20th Century Fox |
Drama |
$3,321 |
653 |
| 492 |
Iris Blonde |
May 14, 1999 |
Miramax |
Romantic Comedy |
$3,303 |
650 |
| 493 |
East Palace West Palace |
Jul 24, 1998 |
Strand |
|
$3,270 |
643 |
| 494 |
When Love Comes |
Jun 25, 1999 |
|
Drama |
$3,242 |
638 |
| 495 |
Tinseltown |
Jan 22, 1999 |
MGM |
Comedy |
$3,169 |
623 |
| 496 |
The Imposters |
Oct 2, 1998 |
Fox Searchlight |
Comedy |
$3,046 |
599 |
| 497 |
The Boys |
Oct 15, 1999 |
Stratosphere Ente… |
Drama |
$2,930 |
576 |
| 498 |
Close-Up |
Dec 31, 1999 |
|
|
$2,670 |
525 |
| 499 |
Slaves of Hollywood |
Oct 29, 1999 |
|
Comedy |
$2,648 |
521 |
| 500 |
Fever Pitch |
Sep 24, 1999 |
Phaedra Cinema |
Romantic Comedy |
$2,519 |
495 |
| 501 |
Jerome |
Dec 10, 1999 |
Phaedra Cinema |
|
$2,500 |
492 |
| 502 |
Hard Core Logo |
Nov 13, 1998 |
Miramax |
Comedy |
$2,472 |
486 |
| 503 |
Western |
Jul 24, 1998 |
New Yorker |
|
$2,400 |
472 |
| 504 |
A Girl Called Rose Marie |
Oct 15, 1999 |
Castle Hill Produ… |
Drama |
$2,379 |
468 |
| 505 |
Heaven |
Apr 30, 1999 |
Miramax |
Thriller/Suspense |
$1,983 |
390 |
| 506 |
Pink Narcissus |
Dec 24, 1999 |
|
|
$1,724 |
339 |
| 507 |
Young and Dangerous, Parts … |
Jul 23, 1999 |
|
Action |
$1,624 |
319 |
| 508 |
Virtue |
Feb 5, 1999 |
Margin Films |
Comedy |
$1,565 |
308 |
| 509 |
Sixth Happiness |
Nov 5, 1999 |
Regent Releasing |
Drama |
$1,540 |
303 |
| 510 |
Terror Firmer |
Oct 29, 1999 |
|
|
$1,434 |
282 |
| 511 |
Doctor Dolittle |
Jun 26, 1998 |
20th Century Fox |
Adventure |
$1,346 |
264 |
| 512 |
Lilian's Story |
Mar 26, 1999 |
Phaedra Cinema |
Drama |
$1,220 |
240 |
| 513 |
Wallowitch & Ross: This Moment |
Dec 10, 1999 |
First Run Features |
|
$1,145 |
225 |
| 514 |
The Milky Way |
Jan 22, 1999 |
Kino International |
|
$1,098 |
216 |
| 515 |
Flushed |
Aug 13, 1999 |
|
|
$935 |
184 |
| 516 |
The Underground Comedy Movie |
May 14, 1999 |
Phaedra Cinema |
Comedy |
$856 |
168 |
| 517 |
Olympia |
May 21, 1999 |
|
Drama |
$640 |
125 |
| 518 |
Summerspell |
Jul 2, 1999 |
|
Drama |
$603 |
118 |
| 519 |
The Last Big Thing |
Sep 25, 1998 |
Stratosphere Ente… |
|
$254 |
50 |
| Total Gross of All Movies | $7,338,894,852 | |
| Total Tickets Sold | 1,444,664,086 |
Our Theatrical Market pages are based on the Domestic Theatrical Market performance only. The Domestic Market is defined as the North American movie territory (consisting of the United States, Canada, Puerto Rico and Guam).
The yearly amounts on our Theatrical Market pages are based on box office years. Each box office year starts on the first Monday of the year, so the previous year ends on the Sunday before the first Monday. For example, the "2017 box office year" started on January 2, 2017 so the "2016 box office year" ended on Sunday, January 1, 2017.


| Author | Year | Title | Type | Category | SubCategory | Summary |
|---|---|---|---|---|---|---|
| Tolchok & Krovvy | 1962 | Milkbars and Ultra-Violence | review | Category A | Category A-1 | This article is about... |
| Hoagey, Ray & Miranda | 2017 | The Woes of Graduate Life | experimental | Category A | Category A-2 | This article is about... |
| Mulligan & Belmont | 2016 | Ahead of their Time | meta-analysis | Category B | Category B-1 | This article is about... |
Writing a Literature Review
“Writing a literature review was so fun and easy!” - No one ever
I recently completed my first comprehensive literature review as part of a graduate school milestone project. Before starting, I sought guidance from online blogs and university workshops held by our library. The tips I learned from these resources were extremely helpful, but not everything worked for me. This is simply a list of things that worked/did not work for me during the reading and writing process of my literature review. Feel free to comment below on what worked & and what didn’t work for you!
Start!
If you are anything like me, you are reading this because you are apprehensive about starting the daunting task of a literature review, and understandably so. I wanted to be as efficient as possible, so I scoured websites, attended workshops, and signed up for writing groups. After you are done reading this, take the first step and START! Although it’s great to seek advice and guidance for something like this, everyone has their own unique experience when writing. Starting is the best way to learn what works and does not work for you.
Take digital notes
I learned about 2 months into the process that physically writing notes into legal pads about the papers I was reading was inefficient and simply not working for me. You always hear the concept that “Writing notes on paper helps you remember it later on.” For me, not true. I type much faster than I write, so writing notes was painfully slow for me and I would often write illegibly. So I began taking notes in a single Word document, often limiting myself to one page of notes per paper. Importantly, the first line of every page had the authors, year, and title of the paper. Therefore, if I needed to find my notes on a particular paper, I could simply type COMMAND + F (I’m a mac user), and search the paper using the title. This is much faster than rifling through dozens of legal pad pages and paper notes. Also, searching for terms used in papers, such as keywords, was much easier in electronic format.
When doing a literature review, COMMAND + F is your friend!
Have a system
Develop a system and be ready to change it if you notice something not working for you. Briefly, here’s the system I used:
I would find a paper that I wanted to read and enter its information into an Excel document. The spreadsheet looked something like this
I then would import the paper into EndNote and ensure the citation was correct. I then would read the paper and take notes in a Word document, with roughly 1 Word doc page per paper.
Tip: pressing COMMAND + SHIFT + 4 on a Mac will allow you make a selection on your screen for a screen shot. Adding screenshots of helpful figures or tables to your Word document emphasizes the important results and helps jog your memory.
I learned that a note taking system is a critical component of a lit review. Being able to find your notes quickly, as well as other papers that are similar, is made very easy with electronic notes and an efficient system.
I took notes using this format in my Word document:
- Author(s) - date - title of paper
- Keywords of the paper (tip: create your own if they are not in the paper already)
- Intro - things I learned
- Methods - important info to understand the results
- Results/Discussion - main findings and bottom line
Using this format made it very easy to COMMAND + F the paper I was looking for and other similar papers by searching keywords
“Wait, why use the Excel document if you are taking notes in a Word document?” The Excel sheet is a great way to organize your materials globally by keywords, category, authors, and year of publication. Sorting your articles based on category and year helps group papers that are similar in topic and provides a historical perspective on a body of work. This may elucidate recurrent themes in your literature, such as debates across time, or provide unique insights into your review. I also used the Excel sheet as a way to mark down papers that I wanted to read, but wasn’t ready to find them yet. I simply entered TO READ in the cells to remind me.
Use a citation manager
As mentioned in the “Have a System” section, I used EndNote to manage my citations. Citation managers are software programs that organize your papers/citations for easy citing while writing. Some other common reference managers are Mendeley and RefWorks.
I strongly advise against doing citations “by hand.” That is, manually typing or copying from online citation generators into your reference page. Citation managers streamline this process by building your in-text citations and reference pages for you. An added bonus is that you can switch citation styles (e.g., APA to MLA) very easily. I don’t even want to think about the pain of doing that by hand!
Citation managers will also ensure that your in-line and reference page citations are correctly furnished and ready for submission. Of course, I recommend checking your work and editing style guides as necessary to be in accordance with journal requirements. Not having to worry about citations is a HUGE advantage when writing a literature review. I encourage those that are apprehensive about making the switch to using citation managers to do it now. Putting the time in now to learn one of these programs will save you time and stress later!
Read/Write everyday
Writing a literature review is similar to preparing for a marathon. Training for the big race requires a slow and steady approach of practice everyday that gradually builds until race day. When reading and writing for a lit review, it is best to take a similar approach and try reading and/or writing every day for a certain amount of time (adjusted to your deadline, of course).
Try to write every day and develop a rhythm.
Initially, I began with a 1 hour per day approach. It was quite tough at the beginning and I would begin to fatigue fairly quickly, often not even finishing a whole paper or article. I’m also a slow reader and get distracted easily. However, as time went on, I began building my lit review endurance and I noticed my ability to read multiple papers and write more sentences increased. By the end, I was well exceeding the 1 hour per day benchmark I had set for myself. I think this was because I learned a lot about the literature, which in turn made paper reading faster, which in turn led me to organize and write more effectively, which in turn led to excitement that the end was near! Also, my deadline was approaching :)
Limit distractions
No matter if you follow my advice about reading/writing everyday, not limiting distractions will prolong the process. In my experience, 2 hours of work with distractions was roughly equivalent to 1 hour of work with no distractions.
I noticed a huge increase in the amount of work I was able to get done in 1 hour when I turned off notifications from my electronic devices and worked in an enviornment when no one could bother me. Turning my phone on silent helped, but turning off badge & banner e-mail notifications on my Mac REALLY helped. Try it out!
Focus on the main idea
I really wish someone would have told this to me when first starting. At the beginning, I began with review articles to introduce myself into the field and to see what has been already reviewed (this is something I highly recommend). I certainly didn’t want to reinvent the wheel, but contribute new things that I thought were important to the field.
However, some of the reviews and book chapters I read were very well written and covered a wide range of topics that were important, but on the periphery of what I wanted to study. So I thought, “Well, if I’m going to do a literature review, it’s gotta be big and comprehensive. I should include this background information to make sure I have all my bases covered.” This was defintely not the way to go.
I began reading too off topic and straying from my main ideas. This ended up making a few of my early sections seem unorganized and less connected. It wasn’t until I really focused in on my topic that I began gaining confidence and feeling less overwhelmed. Therefore, focusing in on my topic helped me, while worrying too much about the background work of others detracted from the paper’s coherence. Start focused, then zoom out if needed.
Enjoy the process
I know this sounds crazy, but look on the bright side! You are committing all this time and energy into learning how our understanding of a specific topic has evolved over time. You are going to come out confident and well-versed in an area of research—an expert of sorts. Realize that it takes time to get there and be patient with the process.
Hopefully this was helpful and don’t be shy to comment below on things that worked/did not work for you!


Hi, I'm Marcel, nice to meet you! Take a look at my most recent commissions or contact me if you would like me to paint a picture for you!
Find Out MoreDo you need someone to photoshop your photo? Do you have an idea for a small animation that you would love to see come to live? I got you covered - let's talk about the details!

Using Photoshop, I can turn your Facebook profile picture into a cartoon!
Bla bla bla.
Promised!
Ready to start a project with me? That's great! Send me an email or give me a call and I will get back to you as soon as possible!


Great instructions for Lets Encrypt with Collaborator: https://blog.fabiopires.pt/running-your-instance-of-burp-collaborator-server/
Override Burp’s default launcher
You should be able to locate this file in [BURP_LAUNCHER]. As root, edit this file. Near the top of the file, you are going to want to change:
# Uncomment the following line to add additional VM parameters
#INSTALL4J_ADD_VM_PARAMS=
To
# Uncomment the following line to add additional VM parameters
INSTALL4J_ADD_VM_PARAMS="-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts"
This will tell the virtual machine to use the Java KeyStore which contains the LetsEncrypt certificates we inserted at an earlier date.


Spec
BlastTabularFileOutFormattedFileOut abstraction for BlastTabular
| Extends | FormattedFileOut |
|---|---|
| All Extended | FormattedFile, FormattedFileOut |
| Defined in | <seqan/blast.h> |
| Signature |
template <typename TBlastIOContext>
using BlastTabularFileOut = FormattedFile<BlastTabular, Output, TBlastIOContext>;
|
Member Function Overview
Member Functions Inherited From FormattedFile
Interface Function Overview
-
void writeFooter(blastTabularOut);
Write the footer of a BlastTabular file. -
void writeHeader(blastTabularOut);
Write the header (top-most section) of a BlastTabular file (this is a NOOP). -
void writeRecord(blastTabularOut, blastRecord);
Write a BlastRecord including it's BlastMatches and possible comment lines to a file.
Interface Functions Inherited From FormattedFile
Interface Functions Inherited From FormattedFileOut
Interface Metafunction Overview
Interface Metafunctions Inherited From FormattedFile
Detailed Description
This is a FormattedFile specialization for writing BlastTabular formats. For details on how to influence the writing of files and how to differentiate between the tabular format with and without comment lines, see BlastIOContext. Please note that you have to specify the type of the context as a template parameter to BlastTabularFileOut, see the example below.
Overview
- open BlastTabularFileOut,
- configure the BlastIOContext
- writeHeader
- writeRecord repeated up to n times
- writeFooter
The following members of the context have to be defined before writing:
- blastProgram (unless fixed at compile-time)
- scoringScheme
- dbName
- dbTotalLength
- dbNumberOfSeqs
For a detailed example have a look at the Blast IO tutorial.
Strictly speaking the writeHeader() call is not required for BlastTabular, but for consistency with other (blast) formats and the read interface it is recommended.
See Also
Interface Functions Detail
void writeFooter(blastTabularOut);
Parameters
blastTabularOut
|
A BlastTabularFileOut formattedFile. |
|---|
Thrown Exceptions
IOError |
On low-level I/O errors. |
|---|
Data Races
See Also
void writeHeader(blastTabularOut);
Parameters
blastTabularOut
|
A BlastTabularFileOut formattedFile. |
|---|
Thrown Exceptions
IOError |
On low-level I/O errors. |
|---|
Data Races
See Also
void writeRecord(blastTabularOut, blastRecord);
Parameters
blastTabularOut
|
A BlastTabularFileOut formattedFile. |
|---|---|
blastRecord
|
The BlastRecord you wish to print. |
Remarks
This function first writes the comment lines of the record and then writes match lines for every match in it. If the context's tabularSpec is set to BlastTabularSpec::NO_COMMENTS, no comment lines will be written and this function immediately prints the match lines.
Comment lines
The contents of the comment lines is largely defined by the members of the context.
If the context's versionString is set, this will be written, otherwise a stanadard version string is generated.
The context's dbName is printed as the database name / path.
If either the context's fields or fieldsAsStrings member are specified these will be printed as column labels. If both are specified than fieldsAsStrings is given preference. Please note that it is recommended to use fields and not fieldsAsStrings to stay "standards"-compliant. Also only fields has an influence on the values printed in the match lines.
Matches
Please note that BLAST is 1-indexed and considers the last position to be the back, not the end, i.e. last one included in a match/sequence/..., not the one behind it (as SeqAn does); this functions corrects for both of these bahaviours, so you don't have to. Additionally, based on the context's blastProgram, positions are transformed back to DNA space, if translation has taken place. Please note also that query and subject IDs are truncated at the first space character in NCBI BLAST, this is also done by default here.
By setting the context's fields meber you can specify which columns you wish to print (if you don't want defaults); the same conversions mentioned above will me made. See BlastMatchField::Enum for a list of fields available. If the context's legacy-flag is set (legacyFormat) the fields variable is ignored.
Many guides recommend always printing the default 12 columns and using only additional columns with additional (custom) data.
Thrown Exceptions
IOError |
On low-level I/O errors. |
|---|


The data below is retrieved from musicdata.json from the node server
The data below is retrieved from bookdata.json from the node server


Get greetings from the REST server
We wont't tell anybody else that the REST server greets you, promised.
Request a greet


This guide shows you how to create a JS/HTML Cordova application and deploy them to various native mobile platforms using the cordova command-line interface (CLI). For detailed reference on Cordova command-line, review the CLI reference
1.Download and install Node.js. On installation you should be able to invoke node and npm on your command line.
2.Install the cordova module using npm utility of Node.js. The cordova module will automatically be downloaded by the npm utility.
on OS X and Linux:
$ sudo npm install -g cordova
C:\>npm install -g cordov
Go to the directory where you maintain your source code, and create a cordova project:
$ cordova create KMSMob com.teamSAD.kms KMSMob
All subsequent commands need to be run within the project's directory, or any subdirectories:
$ cd KMSMob
Add the platforms that you want to target your app. We will add the 'ios' and 'android' platform and ensure they get saved to config.xml:
$ cordova platform add ios --save $ cordova platform add android --save
Then bring all directory structure of Kindergarten Management Software(KMS) for Mobile from GitHub
https://github.com/BillelHip/KMSMob
By default, cordova create script generates a skeletal web-based application whose start page is the project's www/index.html file. Any initialization should be specified as part of the deviceready event handler defined in www/js/index.js.
Run the following command to build the project for all platforms:
$ cordova build android
$ cordova build ios


## Async Google Font Loading
The browser will always give CSS the highest priority when opening the page, and begin downloading stylesheets immediately. This is nice, however how do we step up from sync loading to the async one, which does not prevent rendering from happening until the stylesheet is loaded? Let's try to do it with JavaScript. Instead of adding a `link` tag, we'll add a script which will create such tag dynamically. This script will be the first thing in our document:
```html
```
Now because the browser does not know that the stylesheet will be embedded, it will not start downloading it straight away like in the previous case. Instead, it will wait until the script is evaluated to begin the download. What is more, it will continue parsing HTML, and block the main thread so that if the stylesheet is not downloaded quickly, it will have to wait to be inserted until the end of the initial page render.
* The stylesheet doesn't gets downloaded immediately like it would with a `link` tag, and is loaded only after the browser already parsed HTML and began its job of first page render (Run Microtasks + Layout). During this time, the thread is blocked (semi-opaque orange rectangle), so the stylesheet has to wait before being inserted.
* The stylesheet is finally applied which leads to quite expensive layout reflow taking 84ms. Despite the fact that the fonts are not loaded at all, and there will be no visual change to the page, the browser still recalculates styles and does a reflow. It's an unnecessary work and a waste of valuable ms (the yellow "evaluate scripts" job just before the layout is scripts evaluated at the bottom of the page that also block main thread thus delaying this layout).
* Finally, like in the previous experiment, fonts arrive one by one, and cause 2 new layout reflows.
This strategy allows to actually load _Google Fonts_ asynchronously and solves the _Lighthouse_ warning. However, it introduced an extra reflow due to the stylesheet insertion that happens after the initial render. There are additional improvements that we could make to the page. We can use the preload hint to make the browser download the stylesheet immediately, in hope that dynamically inserted element will be able to pick up that style:
```html
```
OK we've got it! We had to add a `crossOrigin` attribute to both links (in markup and in JS) since the style comes from another domain and preload links have to respect that, and the style link has to match preload link's _crossorigin_.
The stylesheet is downloaded straight away and inserted before the initial render. There's no reflow due to stylesheet being inserted after first pain like previously, because the preload link allowed us to download the stylesheet much faster than just using JavaScript.
* The fonts arrive at the same time, and cause a single reflow only.
That's good, and we've achieved the result we wanted, that is to load _Google Fonts_ asynchronously. However, from the graph above we can see a gap between fonts starting to download, and the stylesheet arriving, i.e., fonts will begin do download only just prior to the layout task despite the stylesheet referencing them being available for quite some time already, and we'll look into this issue below, but that's how the browser works, and nothing to do with our setup.
Another thing we need to do is to add a polyfill for users who disabled _JavaScript_ execution.
```html
```
Despite the working version of async web font stylesheet loading (thus achieving the goal), we assume that the connection is good, and that the stylesheet will be able to download prior to initial page render. Moreover, I've been testing the webpage with another external stylesheet, which loads very fast on localhost, but in reality it would actually take some time and block the browser. If the styles were embedded onto the page, so that there are no render-blocking resources, the browser would not have enough time to download the _Google Font_ stylesheet prior to first render. Therefore, I've simulated a situation when:
* The connection is slower than standard DSL/cable internet (fast 3G preset).
* There are no blocking resources such as external CSS that prevent direct page rendering.
The page starts rendering as soon as all HTML arrives, but the stylesheet starts to download even before that. Because the connection is slow, the stylesheet arrives during the time when the main thread is blocked by rendering (semi-opaque orange rectangle, light-purple line), so it has to wait for rendering to complete (purple line). When that happens, it's inserted into DOM and triggers a reflow.
* The first font arrives, triggers reflow.
* The all other font arrive and trigger reflow and repaint.
So the next step is to make sure that there's only one reflow for the style and fonts. As a side note, there's a technique outlined on the Alligator blog: Preload and Prefetch that contracts the JS into a one-liner:
```html
```
I think the `onload` attribute must be `onload="this.rel = 'stylesheet'; this.onload = null"`, otherwise once the preload link is changed into a stylesheet link, the onload will be triggered again. Although theoretically, setting the rel attribute to `stylesheet` when it's already a `stylesheet` shouldn't cause problems, I used to get the stylesheet downloaded twice. However now I struggle to reproduce this and I think it's rather to do with internal browser logic, or maybe the browser got updated.
Never mind still, it doesn't hurt to remove the `onload` attribute by setting it to `null`. Additionally, this `onload` attribute solution requires a polyfill for browsers that don't support preload which I'll show in the second part, but what I'm really concerned here is *WHEN* the onload is fired. Let's add some performance markers so that we can see a detailed breakdown on the process with the `onload` method.
```html
```
The `performance.measure` function is a very handy util to add markers to the timeline to visualise the break-down. We're going to measure WHEN the `onload` event fired, and compare it to when the preload actually finished. One might assume that these points should follow one another (onload after download), however don't forget to account for the lock on the main thread during the initial render (I've said this phrase so many times now, it just shows that it's an important takeaway point).
Just at the start of the body, I added an interval to fire every 10ms to draw a bar (`layout block proof`) on the performance graph. If the thread is locked, this time will not be 10ms, as the interval will have to wait until it can fire. The second bar `layout block` will stretch from when parsing of HTML began until it finished. Finally, as the very first thing I'm going to measure when the preload began and finished as `link-onload` bar, after which the preload will be converted into a stylesheet. Experiment Link
The stylesheet is preloaded quickly, however the thread has already been locked as seen by the `layout-block-proof` yellow bar, which spawns 462ms instead of 10ms interval I'd set. The preload is finished, however we can't convert it into a stylesheet, because the thread is blocked, and have to wait until it's freed.
* The thread is freed, and the preload link becomes a stylesheet in 50ms. This triggers fonts download and a reflow. Again, the reflow is unnecessary as no fonts are yet downloaded. Maybe _Chrome_ developers can potentially address this internally.
* Fonts arrive and trigger 2 reflows.
Let's compare that to the implementation using a standalone script tag rather than the `onload` attribute. I'm going to add 100ms timeout so that the preload event is visible on the timeline. Remember, we added the stylesheet only after the `onload` event fired previously. Now, using the script tag, we're adding the stylesheet right away. Experiment Link (might need x6 CPU throttling to reproduce).
```html
```
The stylesheet link is added to the DOM immediately after starting to parse HTML using the script tag. This is pretty much exactly the same as the sync version, but without blocking the page!
It arrives before the browser applied the lock, and can be used in the first layout, despite the `onload` event not having fired on either the stylesheet or preload links.
* The stylesheet is applied during the first render, and fonts begin download.
* The initial paint is done, main thread is freed and the preload event fires on our `link rel="preload"` element (_preload-onload_ yellow bar). Compared to the previous case, where we'd inserted the stylesheet only at this point, causing a reflow, here we avoided the reflow and are already halfway through font-downloading.
~Hare~ Here, we've managed to insert the link tag with the stylesheet into DOM without the cost of reflow and without having to wait for `onload` event which most certainly happens only after the layout: on the graph above it can be seen that even though the preload finished before the lock, the `onload` event didn't fire. The Run Microtasks and first Layout time increased so that the lock now takes 100ms longer, but I'm not sure if that's to do with styles, or just a fluke. Also if the stylesheet arrived when the lock was already set, it would not have been applied, so this use case is for when the web font styles are downloaded quickly, in say 100ms, but initial parsing takes longer, e.g., 150ms. On modern machines rendering should be really fast, but for older ones and devices this is still applicable, therefore think it's worth targeting this scenario and writing the proper script instead of `onload` _rel_ substitution.
Don't use the `onload` attribute on a link element with a web font stylesheet to swap its _rel_ from *preload* to *stylesheet*. Even if the stylesheet was ready before the initial layout started, the `onload` event will only fire after it, causing a reflow due to new styles. It's better to add a stylesheet dynamically with _JavaScript_ in a script tag just underneath the preload element, so that it's immediately injected into DOM during the initial parsing of HTML and will not impose a cost of a reflow that has no effect due to fonts not being available yet.


|
Merlin
1.0
|
Define a variable for graphical models. More...
#include <variable.h>
Public Member Functions | |
| variable () | |
| Default constructor. More... | |
| variable (size_t label, size_t states) | |
| Constructor. More... | |
| size_t | label () const |
| Return the label of the variable. | |
| size_t | states () const |
| Return the domains size of the variable. | |
| bool | operator< (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a < b). | |
| bool | operator<= (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a <= b). | |
| bool | operator> (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a > b). | |
| bool | operator>= (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a >= b). | |
| bool | operator== (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a == b). | |
| bool | operator!= (const variable &v) const |
| Compare variables by their labels under a lexicographic order (a != b). | |
| operator size_t () const | |
| Index operator. | |
Define a variable for graphical models.
Definition at line 36 of file variable.h.
|
inline |
Default constructor.
Create a variable with label 0 and 0 states.
Definition at line 49 of file variable.h.
|
inline |
Constructor.
Create a variable with a given label and number of states.
Definition at line 58 of file variable.h.


--- layout: post title: "Small methods are easy to troubleshoot" description: "Write small methods. How small? Small enough that any unhandled exception is easy to troubleshoot." date: 2019-11-18 6:48 UTC tags: [Code] --- {% include JB/setup %}
{{ page.description }}
Imagine that you receive a bug report. This one include a logged exception:
System.NullReferenceException: Object reference not set to an instance of an object. at Ploeh.Samples.BookingApi.Validator.Validate(ReservationDto dto) at Ploeh.Samples.BookingApi.ReservationsController.Post(ReservationDto dto) at lambda_method(Closure , Object , Object[] ) at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Oh, no, you think, not a NullReferenceException.
If you find it hard to troubleshoot NullReferenceExceptions, you're not alone. It doesn't have to be difficult, though. Open the method at the top of the stack trace, Validate
:
public static class Validator { public static string Validate(ReservationDto dto) { if (!DateTime.TryParse(dto.Date, out var _)) return $"Invalid date: {dto.Date}."; return ""; } }
Take a moment to consider this method in the light of the logged exception. What do you think went wrong? Which object was null?
You may form one of a few hypotheses about which object was null. Could it be dto
? dto.Date
? Those are the only options I can see.
When you encounter a bug in a production system, if at all possible, reproduce it as a unit test.
If you think that the problem is that dto.Date
is null, test your hypothesis in a unit test:
[Fact] public void ValidateNullDate() { var dto = new ReservationDto { Date = null }; string actual = Validator.Validate(dto); Assert.NotEmpty(actual); }
If you think that a null dto.Date
should reproduce the above exception, you'd expect the test to fail. When you run it, however, it passes. It passes because DateTime.TryParse(null, out var _)
returns false
. It doesn't throw an exception.
That's not the problem, then.
That's okay, this sometimes happens. You form a hypothesis and fail to validate it. Reject it and move on.
If the problem isn't with dto.Date
, it must be with dto
itself. Write a unit test to test that hypothesis:
[Fact] public void ValidateNullDto() { string actual = Validator.Validate(null); Assert.NotEmpty(actual); }
When you run this test, it does indeed fail:
Ploeh.Samples.BookingApi.UnitTests.ValidatorTests.ValidateNullDto Duration: 6 ms Message: System.NullReferenceException : Object reference not set to an instance of an object. Stack Trace: Validator.Validate(ReservationDto dto) line 12 ValidatorTests.ValidateNullDto() line 36
This looks like the exception included in the bug report. You can consider this as validation of your hypothesis. This test reproduces the defect.
It's easy to address the issue:
public static string Validate(ReservationDto dto) { if (dto is null) return "No reservation data supplied."; if (!DateTime.TryParse(dto.Date, out var _)) return $"Invalid date: {dto.Date}."; return ""; }
The point of this article, however, is to show that small methods are easy to troubleshoot. How you resolve the problem, once you've identified it, is up to you.
Methods are usually more complex than the above example. Imagine, then, that you receive another bug report with this logged exception:
System.NullReferenceException: Object reference not set to an instance of an object. at Ploeh.Samples.BookingApi.MaîtreD.CanAccept(IEnumerable`1 reservations, Reservation reservation) at Ploeh.Samples.BookingApi.ReservationsController.Post(ReservationDto dto) at lambda_method(Closure , Object , Object[] ) at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
When you open the code file for the MaîtreD
class, this is what you see:
public class MaîtreD { public MaîtreD(int capacity) { Capacity = capacity; } public int Capacity { get; } public bool CanAccept(IEnumerable<Reservation> reservations, Reservation reservation) { int reservedSeats = 0; foreach (var r in reservations) reservedSeats += r.Quantity; if (Capacity < reservedSeats + reservation.Quantity) return false; return true; } }
This code throws a NullReferenceException
, but which object is null
? Can you identify it from the code?
I don't think that you can. It could be reservations
or reservation
(or both). Without more details, you can't tell. The exception is ambiguous.
The key to making troubleshooting easy is to increase your chances that, when exceptions are thrown, they're unambiguous. The problem with a NullReferenceException
is that you can't tell which object was null
.
Consider the CanAccept
method. Clearly, it requires both reservations
and reservation
in order to work. This requirement is, however, currently implicit. You can make it more explicit by letting the method protect its invariants. (This is also known as encapsulation. For more details, watch my Pluralsight course Encapsulation and SOLID.)
A simple improvement is to add a Guard Clause for each argument:
public bool CanAccept(IEnumerable<Reservation> reservations, Reservation reservation) { if (reservations is null) throw new ArgumentNullException(nameof(reservations)); if (reservation is null) throw new ArgumentNullException(nameof(reservation)); int reservedSeats = 0; foreach (var r in reservations) reservedSeats += r.Quantity; if (Capacity < reservedSeats + reservation.Quantity) return false; return true; }
If you'd done that from the start, the logged exception would instead have been this:
System.ArgumentNullException: Value cannot be null. Parameter name: reservations at Ploeh.Samples.BookingApi.MaîtreD.CanAccept(IEnumerable`1 reservations, Reservation reservation) at Ploeh.Samples.BookingApi.ReservationsController.Post(ReservationDto dto) at lambda_method(Closure , Object , Object[] ) at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
It's now clear that it was the reservations
argument that was null
. Now fix that issue. Why does the CanAccept
receive a null
argument?
You may now consider examining the next frame in the stack trace: ReservationsController.Post
:
public ActionResult Post(ReservationDto dto) { var validationMsg = Validator.Validate(dto); if (validationMsg != "") return BadRequest(validationMsg); var reservation = Mapper.Map(dto); var reservations = Repository.ReadReservations(reservation.Date); var accepted = maîtreD.CanAccept(reservations, reservation); if (!accepted) return StatusCode( StatusCodes.Status500InternalServerError, "Couldn't accept."); var id = Repository.Create(reservation); return Ok(id); }
The Post
code only calls CanAccept
once, so again, you can unambiguously deduce where the null
reference comes from. It comes from the Repository.ReadReservations
method call. Now go there and figure out why it returns null
.
Notice how troubleshooting is trivial when the methods are small.
 How large does a method have to be before it's no longer small?
A method is small when you can easily troubleshoot it based exclusively on a logged exception.
Until you get the hang of it, it can be hard to predict if a method is going to be easy to troubleshoot. I therefore also follow another rule of thumb:
For languages like C#, methods should have a maximum size of 80x24 characters.
What if you already have bigger methods? Those are much harder to troubleshoot. If you have a method that spans hundreds of lines of code, a logged exception is rarely sufficient for troubleshooting. In order to save space, I'm not going to show en example of such a method, but I'm sure that you can easily find one in the code base that you professionally work with. Such a method is likely to have dozens of objects that could be null
, so a NullReferenceException
and a stack trace will contain too little information to assist troubleshooting.
I often see developers add tracing or logging to such code in order to facilitate troubleshooting. This makes the code even more bloated, and harder to troubleshoot.
Instead, cut the big method into smaller helper methods. You can keep the helper methods private
so that you don't change the API. Even so, a logged exception will now report the helper method in its stack trace. Keep those helper methods small, and troubleshooting becomes trivial.
Small methods come with many benefits. One of these is that it's easy to troubleshoot a small method from a logged exception. Small methods typically take few arguments, and use few variables. A logged exception will often be all that you need to pinpoint where the problem occurred.
A large method body, on the other hand, is difficult to troubleshoot. If all you have is a logged exception, you'll be able to find multiple places in the code where that exception could have been thrown.
Refactor big methods into smaller helper methods. If one of these helper methods throws an exception, the method name will be included in the stack trace of a logged exception. When the helper method is small, you can easily troubleshoot it.
Keep methods small. Size does matter.
Comments
How did you create those exception stack traces?
Compared to your examples, I am used to seeing each stack frame line end with the source code line number. (Although, sometimes I have seen all line numbers being 0, which is equivalent to having no line numbers at all.) The exception stack trace in your unit test includes line numbers but your other exception stack traces do not. This Stack Overflow answer contains an exception stack trace like with line numbers like I am used to seeing.
The line containing "lambda_method" also seem odd to me. As I recall, invoking a lambda expression also contributes more information to the stack trace than your examples include. Although, that information is cryptic enough that I don't remember off the top of my head what it means. (After a quick search, I didn't find a good example of how I am used to seeing lambda expressions displayed in a stack trace.)
With this additional informaiton, the methods can be longer while reamining unambiguous (in the sense you described).
Tyson, thank you for writing. IIRC, you only see line numbers for code compiled with debug information. That's why you normally don't see line numbers for .NET base class library methods, ASP.NET Core, etc.
While you can deploy and run an application in Debug mode, I wouldn't. When you compile in Release mode, the compiler makes optimisations (such as in-lining) that it can't do when it needs to retain a map to a specific source. In Debug mode, you squander those optimisations.
I've always deployed systems in Release mode. To make the examples realistic, I didn't include the line numbers in the stack trace, because in Release mode, they aren't going to be there.
When you're troubleshooting by reproducing a logged exception as a unit test, on the other hand, it's natural to do so in Debug mode.
I just tried to verify this. I didn't find any difference between compiling in Debug or Release mode as well as no fundemental issue with in-lining. In all four cases (debug vs release and in-lining vs no inlining), exception stack traces still included line numbers. When in-lining, the only different was the absense of the in-lined method from the stack trace.
Instead, I found that line numbers are included in exception stack traces if and only if the corresponding .pdb file is next to the .exe file when executed.
Tyson, that sounds correct. To be honest, I stopped putting effort into learning advanced debugging skills a long time ago. Early in my career we debugged by writing debug statements directly to output! Then I learned test-driven development, and with that disappeared most of the need to debug full systems. At the time I began working with systems that logged unhandled exceptions, the habit of writing small methods was already so entrenched that I never felt that I needed the line numbers.
FWIW, more than five years ago, I decided to publish symbols with AutoFixture, but I never found it useful.
I recommend setting DebugType to Embedded in every project file. This puts the PDB file inside the DLL. Having separate files is harmful in the same way that NuGet package restore is harmful. I don't think of this as an advanced debugging skill. It is trivial for one person to add the required line to each project. Then every future stack trace seen by any developer will include line numbers. Seems like an easy win to me.


Get help
Run Arbor over the web or install it yourself
Full documentation for functions and workflows
Add to the Arbor code base
Contact us


ECB: Record-low rates causing 'excessive risk-taking' in some sectors
by Harry RobertsonRecord-low interest rates in the Eurozone have led to “excessive risk-taking in some sectors” as financial firms pursue profits, the European Central Bank (ECB) has warned.
The ECB defended low rates in its latest financial stability report, however, saying they were necessary to support economic activity in the struggling Eurozone.
“While the low interest rate environment supports the overall economy, we also note an increase in risk-taking which warrants continuous and close monitoring”, said Luis de Guindos, Vice-President of the ECB.
“Authorities should use available tools to address the build-up of vulnerabilities where possible.”
The ECB warned that non-banks such as investment funds, insurance companies and pension funds have taken on more risk in response to low interest rates, which limit the amount of money that can be earned from bonds.
“In the event of a sudden repricing of financial assets, growing credit and liquidity risk in some parts of the euro area non-bank financial sector… may lead non-banks to respond in ways that cause stress to spread to the wider financial system,” the ECB’s report said.
More to follow.


Choose how Wlodzimierz looks for you.
How are you?
5:02 PM
Everything is fine, we are developing the server side of the application.
5:17 PM


A vast majority of colleges comply with the laws when it comes to crime, but some purposely underreport crimes to protect their images
Learn more


For more details see ${component.title} documentation.
Review the ACS AEM Commons compatibility matrix for more details.


Playtonic's Steve Mayles Releases Special Donkey Kong Country Artwork To Mark Its 25th Birthday
As other staffers share mementoes from the period
by Damien McFerranDonkey Kong Country turned 25 yesterday, an event which is sure to have made many of us feel very old indeed. To celebrate the anniversary, Playtonic's Steve Mayles – who worked on the game during his tenure at Rare – has posted a special piece of artwork showcasing the game's heroes:
Mayles also shared some amusing photos of himself wearing an iconic item of clothing from his Rare / Nintendo days:
Not to be outdone, Mayles' brother Gregg – who is still working at Rare – offered up some items from his own personal DKC archive:
And finally, Playtonic's Chris Sutherland – another ex-Rare staffer who worked on the title – gave us a wee glimpse of what it was like to work at Rare's old Manor House HQ:
Don't forget, we ran an exclusive 'making of' feature for Donkey Kong Country a while back which is still worth a read.


WITNESS LIST Nominations Committee April 4, 2005 - 2:00P Nomination to the Texas Higher Education Coordinating Board FOR: McWilliams, George (Self), Texarkana, TX Neal, Nancy (Self), Lubbock, TX Riter, III, A. W. "Whit" (Self), Tyler, TX Shepard, Robert (Self), Harlingen, TX Nomination to the Supreme Court of Texas FOR: Johnson, Philip The Honorable (Self), Amarillo, TX Nomination to the Texas Funeral Service Commission FOR: Fish, Laurens (Self), Austin, TX Nomination to the Texas Higher Education Coordinating Board FOR: Bricker, Laurie (Self), Houston, TX Foster, Paul (Self), El Paso, TX