Lyman Ray Patterson

Lyman Ray Patterson (18 February 1929 5 November 2003) was an American law professor and an influential copyright scholar and historian.

Biography

Patterson was born in Macon, Georgia. He graduated from Mercer University, and obtained a master's degree in English from Northwestern University. After teaching English at Middle Georgia College, he joined the Army where he studied Russian at the Army Language School. During the Korean War he served as a translator of Russian radio broadcasts. Following the Army he attended law school at Mercer University. After practicing law for two years with the firm of Matthews, Maddox, Walton and Smith in Rome, Georgia he returned to the Mercer Law School to teach.

During Patterson's tenure at Mercer he attended Harvard Law School and wrote his S.J.D. dissertation on the history of copyright law. He received the S.J.D. degree from Harvard in 1966. The dissertation became the foundation for his influential book Copyright in Historical Perspective, published in 1968 and still in print as of 2007.

Patterson joined the faculty at Vanderbilt University Law School in 1963, and served as an assistant United States Attorney while teaching at Vanderbilt. In 1973 Patterson joined the faculty at the Emory University School of Law and was that school's Dean. In 1987, he joined the University of Georgia (UGA) School of Law faculty and remained there until his death in 2003. During his career he was a visiting professor at Georgia State University Law School, Duke University School of Law, and the University of Texas School of Law.

The ALA L. Ray Patterson Copyright Award was established in his honor.[1] The first three winners were Kenneth Crews (2005); Prue Adler (2006); and Peter Jaszi (2007).

Ray Patterson died at age 74. He is succeeded by his wife, Laura Patterson and two daughters Adelyn Hilado and Ida Patterson. He also left behind four grandchildren who consider him an inspiration to this day. He constantly stressed the importance of an education to which all four grand children took to heart. His oldest grandson, Thomas Ray Hilado, also attended Mercer University in his grandfather's footsteps. His oldest granddaughter, Laura Carol Hilado attends Emory University; where Patterson served as the Dean of the Emory University School of Law.

Bibliography

  • Copyright in Historical Perspective (Nashville: Vanderbilt University Press, 1968)
  • The Nature of Copyright: A Law of Users' Rights (Athens: University of Georgia Press, 1991) (with Stanley W. Lindberg)

Notes

  1. American Library Association, L. Ray Patterson Copyright Award Archived 2 July 2007 at the Wayback Machine (website last visited, 7 May 2009).

Further reading

  • Symposium in Honor of Professor L. Ray Patterson, Journal of Intellectual Property Law, v.10, n.2 (Spring 2003).
gollark: I can come up with a thing to transmit ubqmachine™ details to osmarks.net or whatever which people can embed in their code.
gollark: It's an x86-64 system using debian or something.
gollark: > `import hashlib`Hashlib is still important!> `for entry, ubq323 in {**globals(), **__builtins__, **sys.__dict__, **locals(), CONSTANT: Entry()}.items():`Iterate over a bunch of things. I think only the builtins and globals are actually used.The stuff under here using `blake2s` stuff is actually written to be ridiculously unportable, to hinder analysis. This caused issues when trying to run it, so I had to hackily patch in the `/local` thing a few minutes before the deadline.> `for PyObject in gc.get_objects():`When I found out that you could iterate over all objects ever, this had to be incorporated somehow. This actually just looks for some random `os` function, and when it finds it loads the obfuscated code.> `F, G, H, I = typing(lookup[7]), typing(lookup[8]), __import__("functools"), lambda h, i, *a: F(G(h, i))`This is just a convoluted way to define `enumerate(range))` in one nice function.> `print(len(lookup), lookup[3], typing(lookup[3])) #`This is what actually loads the obfuscated stuff. I think.> `class int(typing(lookup[0])):`Here we subclass `complex`. `complex` is used for 2D coordinates within the thing, so I added some helper methods, such as `__iter__`, allowing unpacking of complex numbers into real and imaginary parts, `abs`, which generates a complex number a+ai, and `ℝ`, which provvides the floored real parts of two things.> `class Mаtrix:`This is where the magic happens. It actually uses unicode homoglyphs again, for purposes.> `self = typing("dab7d4733079c8be454e64192ce9d20a91571da25fc443249fc0be859b227e5d")`> `rows = gc`I forgot what exactly the `typing` call is looking up, but these aren't used for anything but making the fake type annotations work.> `def __init__(rows: self, self: rows):`This slightly nonidiomatic function simply initializes the matrix's internals from the 2D array used for inputs.> `if 1 > (typing(lookup[1]) in dir(self)):`A convoluted way to get whether something has `__iter__` or not.
gollark: If you guess randomly the chance of getting none right is 35%ish.
gollark: Anyway, going through #12 in order:> `import math, collections, random, gc, hashlib, sys, hashlib, smtplib, importlib, os.path, itertools, hashlib`> `import hashlib`We need some libraries to work with. Hashlib is very important, so to be sure we have hashlib we make sure to keep importing it.> `ℤ = int`> `ℝ = float`> `Row = "__iter__"`Create some aliases for int and float to make it mildly more obfuscated. `Row` is not used directly in anywhere significant.> `lookup = [...]`These are a bunch of hashes used to look up globals/objects. Some of them are not actually used. There is deliberately a comma missing, because of weird python string concattey things.```pythondef aes256(x, X): import hashlib A = bytearray() for Α, Ҙ in zip(x, hashlib.shake_128(X).digest(x.__len__())): A.append(Α ^ Ҙ) import zlib, marshal, hashlib exec(marshal.loads(zlib.decompress(A)))```Obviously, this is not actual AES-256. It is abusing SHAKE-128's variable length digests to implement what is almost certainly an awful stream cipher. The arbitrary-length hash of our key, X, is XORed with the data. Finally, the result of this is decompressed, loaded (as a marshalled function, which is extremely unportable bytecode I believe), and executed. This is only used to load one piece of obfuscated code, which I may explain later.> `class Entry(ℝ):`This is also only used once, in `typing` below. Its `__init__` function implements Rule 110 in a weird and vaguely golfy way involving some sets and bit manipulation. It inherits from float, but I don't think this does much.> `#raise SystemExit(0)`I did this while debugging the rule 110 but I thought it would be fun to leave it in.> `def typing(CONSTANT: __import__("urllib3")):`This is an obfuscated way to look up objects and load our obfuscated code.> `return getattr(Entry, CONSTANT)`I had significant performance problems, so this incorporates a cache. This was cooler™️ than dicts.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.