Sunday, January 6, 2013

A list of Oscar winners and their Rotten Tomatoes ratings


Here's the list. Enjoy!


Title Year Critics Audience
Rebecca 1940 100 91
The Lost Weekend 1945 100 87
All About Eve 1950 100 94
On the Waterfront 1954 100 94
The Godfather 1972 100 97
An American in Paris 1951 98 77
Lawrence of Arabia 1962 98 91
The French Connection 1971 98 85
The Godfather, Part II 1974 98 96
Annie Hall 1977 98 92
The Artist 2011 98 89
All Quiet on the Western Front 1930 97 85
It Happened One Night 1934 97 92
Casablanca 1942 97 94
The Best Years of Our Lives 1946 97 91
Patton 1970 97 92
Unforgiven 1992 97 91
Schindler's List 1993 97 96
The Hurt Locker 2008 97 83
You Can't Take It with You 1938 96 86
Gone With the Wind 1939 96 91
The Bridge on the River Kwai 1957 96 90
In the Heat of the Night 1967 96 90
One Flew Over the Cuckoo's Nest 1975 96 95
Amadeus 1984 96 94
The Silence of the Lambs 1991 96 93
No Country for Old Men 2007 95 84
The King's Speech 2010 95 93
My Fair Lady 1964 94 87
The Lord of the Rings: The Return of the King 2003 94 83
Slumdog Millionaire 2008 94 90
Mutiny on the Bounty 1935 93 79
The Apartment 1960 93 93
West Side Story 1961 93 82
Shakespeare in Love 1998 93 76
The Departed 2006 93 92
The Sting 1973 92 93
Million Dollar Baby 2004 92 87
Mrs. Miniver 1942 91 84
Rocky 1976 91 65
The Deer Hunter 1978 91 91
Ordinary People 1980 91 85
The Last Emperor 1987 91 86
Midnight Cowboy 1969 90 86
Ben-Hur 1959 89 81
Terms of Endearment 1983 89 81
How Green Was My Valley 1941 88 82
From Here to Eternity 1953 88 82
Kramer vs. Kramer 1979 88 85
Chariots of Fire 1981 88 76
Gandhi 1982 88 90
Rain Man 1988 88 88
American Beauty 1999 88 90
Platoon 1986 87 91
Titanic 1997 87 69
Chicago 2002 87 80
Grand Hotel 1932 86 76
The Sound of Music 1965 84 86
Gentleman's Agreement 1947 83 78
A Man for All Seasons 1966 83 85
The English Patient 1996 83 81
Tom Jones 1963 81 58
Braveheart 1995 80 83
Driving Miss Daisy 1989 79 78
Dances With Wolves 1990 78 84
Gladiator 2000 78 85
A Beautiful Mind 2001 78 91
Wedding Crashers 2005 75 70
Gigi 1958 74 74
Cavalcade 1933 71 33
Going My Way 1944 71 78
Forrest Gump 1994 71 93
The Life of Emile Zola 1937 70 71
The Great Ziegfeld 1936 59 58
Out of Africa 1985 59 83
The Greatest Show on Earth 1952 41 60

Here's the script.
 
#!/usr/bin/python

import urllib
import simplejson
import sys

apikey = 'XXXXXXXXXXXXXXXXXXXX'

for l in open('d'):
    l = l[:-1]
    q = urllib.urlencode({'q': l, 'apikey': apikey})
    url = 'http://api.rottentomatoes.com/api/public/v1.0/movies.json?'+ q
    search_results = urllib.urlopen(url)
    j = simplejson.loads(search_results.read())
    if j['total'] > 0:
        m = j['movies'][0]
        title = m['title']
        year = m['year']
        critics = m['ratings']['critics_score']
        audience = m['ratings']['audience_score']
    print title, year, critics, audience
 
The 'd' input file contains the Oscar winner titles from WikiPedia (http://en.wikipedia.org/wiki/Academy_Award)

Monday, January 26, 2009

UTF-8 strings in trivial-ldap field values

Everybody using LDAP and Common Lisp probably knows the trivial-ldap library. It's a nifty, simple and concise implementation of the LDAP protocol in pure Common Lisp - i.e. no foreign library is needed to access your directory using this package. Trivial-ldap documentation states that UTF-8 strings are not supported, although the non-ascii string attribute value is properly passed in trivial-ldap:entry slots. Here is how you can easily get UTF-8 string attribute in Allegro CL:
(defun ldap-utf-8 (user pass base filter attribute)
  (let ((ldap (trivial-ldap:new-ldap :user user
                                     :pass pass
                                     :base base)))
    (trivial-ldap:bind ldap)
    (unwind-protect
         (when (trivial-ldap:search ldap filter)
           (loop for res = (trivial-ldap:next-search-result ldap)
                 while res
                 do (return-from ldap-utf-8
                      (octets-to-string
                       (string-to-octets
                        (car (trivial-ldap:attr-value res attribute))
                        :external-format :8-bit)
                       :external-format :utf8))))
      (trivial-ldap:unbind ldap))))
The arguments are self explanatory.

Tuesday, January 20, 2009

Blindness - A Movie by Fernando Meirelles

Definitely one of the best movies I've seen in a couple of months. Based on a excellent book by Jose Saramago, I've read 2 years ago. Pretty original story about a city affected by an epidemic of blindness. Caused by some contagious virus spread by unknown means, which cripples everyone except one woman - a doctor's wife (excellent Julianne Moore in this role). While there were numerous pretty effective depictions of an epidemic (28 Days After and it's sequel 28 Weeks After come to mind), none was so touching and personal in depiction of radical change in human nature affected by loss of senses. Noteworthy performance by Gael García Bernal. Well worth the time and highly recommended.

Sunday, January 18, 2009

I/O in Allegro CL multiprocessing code

Recent posting by one Timur Sufiev on slime-devel mailing list about tracing not working in threaded sbcl made me check how it looks for Allegro CL. First I found out what swank does in Allegro backend when you set swank:*globally-redirect-io* in your ~/.swank.lisp. It occurs that it creates a set of bindings in excl:*cl-default-special-bindings* for common stream variables:
  • *terminal-io*
  • *query-io*
  • *debug-io*
  • *standard-input*
  • *standard-output*
  • *trace-output*
  • *error-output*
Each of them pointing to a synonym stream connected to current slime session streams. Unfortunately Allegro CL doesn't use this variable on every mp:make-process (or mp:process-run-function wrapper for that matter). Franz treats this variable as a set of sensible defaults which you can use in your own process creating code with the keyword argument :initial-bindings to mp:make-process or mp:process-run-function. OK - I read too much into the documentation :-/ It was all kindly explained to me by a Franz engineer in a swift follow-up to a "bug-report" I submited. Unfortunately there are situations where you don't want or simply can't modify code spawning a subprocess (notable example being hunchentoot or any other MP enabled web server). It would make you patch each and every new release of the software either by modifying the source code or replacing it's internal functions - both things a huge no-no. So - what to do if you really want to direct I/O from a subprocess to your slime session? The answer is pretty simple - use advice or fwrap facility in Allegro CL to instrument mp:process-run-function or mp:make-process invocation to add these defaults when you need it. Here is a relevant snippet:
(excl:def-fwrapper default-special-bindings (&rest args)
 (declare (special user::*provide-initial-bindings*))
 (when (and (boundp 'user::*provide-initial-bindings*)
            user::*provide-initial-bindings*)
   (let ((name-or-args (car args)))
     (when (not (listp name-or-args))
       (setq name-or-args (list :name name-or-args))) ;listify
     (unless (getf name-or-args :initial-bindings)    ;update arglist
       (setf (car args)
             (list* :initial-bindings
                    excl:*cl-default-special-bindings*
                    name-or-args)))))
 (call-next-fwrapper))

(excl:fwrap 'mp:process-run-function 'dsb 'default-special-bindings)

The way you enable this is not complicated as well. Just start the main thread with special variable user::*provide-initial-bindings* bound to non nil value. Like this:
CL-USER> (let ((user::*provide-initial-bindings* t))
         (hunchentoot:start-server))
Now every I/O you you do the above-mentioned streams should appear in your slime repl window. Function tracing of course will work as well.

Saturday, January 17, 2009

Intro

This entry starts my "on-line diary". Blog is so last century and I'm not quite sure what weblog is ;) But - honest to blog, I will try to maintain it fairly often to hopefully increase signal/noise ratio in the Internet and even entertain my gentle readers from time to time. I'm an IT enthusiast, so - as for stuff which I will enter here - it's going to be mostly net-related. Sometimes cultural, sometimes technical. Anyway - keep your eyes peeled for the blizzard of entries.