Gerhard Dünnhaupt

Gerhard Dünnhaupt, FRSC (born August 15, 1927 in Bernburg (Saale)) is a German bibliographer, literary historian, emeritus professor of the University of Michigan, an honorary life member of the Modern Language Association of America, and a Life Member of the Academies of Arts, Humanities and Sciences of Canada. In September 1983, he chaired the international "Martin Luther Quincentennial Conference" in Ann Arbor, MI. He is the author of the only annotated bibliography of German Baroque literature.

Ancestry and background

Dünnhaupt is the son of a printer and newspaper publisher in Köthen (Anhalt). Beginning in 1964, he studied Modern Languages and Literatures at the University of Toronto, and, at Brown University in 1972, he submitted his dissertation about the German versions of the Epics of Ludovico Ariosto and Torquato Tasso.

Beginning in 1972, he taught German Literature and Bibliography at the University of Washington; four years later, he relocated to the University of Michigan in Ann Arbor where he taught German Literature and Comparative Literature until 1992. During these years, he also fulfilled visiting professorships at the University of Illinois, the Universität Göttingen and Cornell University. Since 1992 he has been Professor Emeritus at the University of Michigan and Adjunct Professor at Queen's University in Kingston (Canada). Dünnhaupt is an honorary life member of the Modern Language Association and has been elected as Fellow of the Royal Society of Canada.

Main research

Dünnhaupt's main research interests involve German Renaissance and Baroque literature, history of printing and publishing, bibliography, and cultural history of the Early Modern Period; his scholarly articles deal frequently with the Fruitbearing Society as well as the history of his homeland of Anhalt. He was Editor of Rarissima litterarum and Book Review Editor for Michigan Germanic Studies. In September 1983, he organised the "Martin Luther Quincentennial Conference".

Honours

He was awarded the Prix Triennal de Bibliographie by the International League of Antiquarian Booksellers (ILAB) for his annotated Bibliographisches Handbuch der Barockliteratur.

Publications

  • Bibliographisches Handbuch der Barockliteratur: Hundert Personalbibliographien deutscher Autoren des 17. Jahrhunderts. 3 vols. Hiersemann, Stuttgart 1980–1981, ISBN 3-7772-8029-1
  • Diederich von dem Werder. Versuch einer Neuwertung seiner Hauptwerke. Herbert Lang, Bern 1973, ISBN 3-261-01084-3
  • Die Fürstliche Druckerei zu Köthen. (AGB XX.4). Buchhändler-Vereinigung, Frankfurt am Main 1979, ISBN 3-7657-0934-4
  • Personalbibliographien zu den Drucken des Barock. 6 vols. Anton Hiersemann, Stuttgart 1990–1993, ISBN 3-7772-9013-0

Editions

  • Rarissima litterarum (Editor)
  • Torquato Tasso (Ed.), Diederich von dem Werder (Trans.): Gottfried von Bulljon. Niemeyer, Tübingen 1974, ISBN 3-484-16020-9
  • Andreas Gryphius: Horribilicribrifax Teutsch. Scherzspiel. Critical Edition. Reclam, Stuttgart 1976 u.ö. ISBN 3-15-000688-0
  • Andreas Gryphius: Absurda Comica oder Herr Peter Squenz. Schimpfspiel. Critical Edition. Reclam, Stuttgart 1983 u.ö. ISBN 3-15-007982-9
  • Giovanni Francesco Loredano (Ed.), Diederich von dem Werder (Trans.): Dianea oder Rähtselgedicht. Reprint of the 1644 edition. Peter Lang, Bern 1984, ISBN 3-261-01833-X
  • Martin Luther Quincentennial. Wayne State Univ. Press, Detroit 1985, ISBN 0-8143-1774-X
  • Abraham a Sancta Clara: Stern so aus Jacob aufgangen Maria. Hiersemann, Stuttgart 1994, ISBN 3-7772-9423-3
  • Johann Ludwig Prasch: Gründliche Anzeige von Fürtrefflichkeit und Verbesserung teutscher Poesie. Hiersemann, Stuttgart 1995, ISBN 3-7772-9426-8
  • Gabriel Rollenhagen: Vier Bücher wunderbarlicher … und unglaublicher indianischer Reisen. Hiersemann, Stuttgart 1995, ISBN 3-7772-9424-1
  • "Perseus Sperantes" (Ps.): Der Königliche Einspruch (anon. German version of the anon. French novel 'Jehan de Paris', ca. 1494). Hiersemann, Stuttgart 1995, ISBN 3-7772-9514-0
  • probably Johannes Riemer: Der ausgekehrte politische Feuermäuerkehrer. Hiersemann, Stuttgart 1996, ISBN 3-7772-9605-8
  • Johann Joseph Beckh: Elbianische Florabella … nach Arth einer Schäfferey. Hiersemann, Stuttgart 1997, ISBN 3-7772-9627-9
  • Johann Vogel mit Georg Philipp Harsdörffer: Icones mortis(Dance of Death). Hiersemann, Stuttgart 1998. ISBN 3-7772-9822-0
  • Conrad Vetter: Paradeißvogel. Hiersemann, Stuttgart 1999 (roman catholic hymnal 1613). ISBN 3-7772-9923-5

Sources

  • Adalbert Elschenbroich: Modell eines Handbuchs. Gerhard Dünnhaupts monumentale Bibliographie. In: Die Zeit. Jahrgang 37, Nr. 49 (1982), Lit. S. 5.
  • Europäische Literatur der Spätrenaissance und der Barockzeit, meist aus der Sammlung Prof. Gerhard Dünnhaupt. Bassenge, Berlin 1996 (380 pages).
  • Karl F. Otto Jr.: Dünnhaupt's Handbuch der Barockliteratur, in: Monatshefte 76 (1984), 332–340.
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.
gollark: The tiebreaker algorithm is vulnerable to any attack against Boris Johnson's Twitter account.
gollark: I can't actually shut them down, as they run on arbitrary google services.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.