empire

Special Report: Deceit, Disrepair and Death Inside a Southern California Rental Empire

; Credit: Illustration: Dan Carino

Aaron Mendelson | LAist

Bedbugs. Mold. Typhus. The list of problems at some of Southern California’s low-rent properties is extensive. Many of the tenants who endure these issues all have one thing in common: a management company, PAMA Management, and a landlord, Mike Nijjar, with a long track record of frequent evictions and health and safety violations.

Read the full article at LAist




empire

The End of America's Well-Intentioned Empire

Dan Perry: The world was hugely interested in the U.S. presidential election -- and everywhere people are wondering what the return of Donald Trump will mean in geopolitics. But is America interested in the world?




empire

'Jump ball' for Alex Jones' media empire as it hits the auction block today

Live bidding will be private, and the future owner of Jones' company will be public once court papers are filed. The proceeds will go to pay Sandy Hook families who won defamation cases against Jones.




empire

Amazon: Empires Collection - The Dynasties - Egypt's Golden Empire / **The Medici: Godfathers of the Renaissance / Japan: Memoirs of a Secret Empire / The Roman Empire in the First Century / The Greeks: Crucible of Civilization) - Empires Collection:

Egypt's Golden Empire: In 1570 B.C., when Rome was still a marsh and the Acropolis was an empty rock, Egypt was already 1000 years old. Although the period of the pyramid-builders was long over, Egypt lay on the threshold of its greatest age. The New Kingdom would be an empire forged by conquest, maintained by intimidation and diplomacy, and remembered long after its demise. Led by a dynasty of rich personalities, whose dramatic lives changed the course of civilization, Egypt's Golden Empire presents the most extraordinary period in Egyptian history: from 1570 B.C. to 1070 B.C., when the Egyptian Empire reached its zenith. -- The Medici: Godfathers of the Renaissance - From a small Italian community in 15th century Florence, the Medici family would rise to rule Europe in many ways. Using charm, patronage, skill, duplicity and ruthlessness, they would amass unparalleled wealth and unprecedented power. They would also ignite the most important cultural and artistic revolution in Western history- the European Renaissance. But the forces of change the Medici helped unleash would one day topple their ordered world. An epic drama played out in the courts, cathedrals and palaces of Europe, this series is both the tale of one family's powerful ambition and of Europe's tortured struggle to emerge from the ravages of the Dark Ages. -- Japan: Memoirs Of A Secret Empire - Commanding shoguns and samurai warriors, exotic geisha and exquisite artisans -- all were part of the Japanese "renaissance" -- a period between the 16th and 19th centuries when Japan went from chaos and violence to a land of ritual refinement and peace. But stability came at a price: for nearly 250 years, Japan was a land closed to the Western world, ruled by the Shogun under his absolute power and control. Japan: Memoirs of a Secret Empire brings to life the unknown story of a mysterious empire, its relationship to the West, and the forging of a nation that would emerge as one of the most important countries in the world. -- The Roman Empire in the First Century: Two thousand years ago, at the dawn of the first century, the ancient world was ruled by Rome. Through the experiences, memories and writings of the people who lived it, this series tells the story of that time - the emperors and slaves, poets and plebeians, who wrested order from chaos, built the most cosmopolitan society the world had ever seen and shaped the Roman empire in the first century A.D. -- The Greeks: Crucible [melting pot] of Civilization - The Greeks - Classical Greece of the 4th and 5th centuries, B.C. was a magnificent civilization that laid the foundations for modern science, politics, warfare, and philosophy, and produced some of the most breathtaking art and architecture the world has ever known. Through the eyes and words of the great heroes of ancient Greece, this dazzling production charts the rise, triumph, and eventual decline of the world's first democracy. Now, through dramatic storytelling and state-of-the-art computer animation, you witness history, art, and government with giants like Pericles, Socrates, Plato, and Aristotle.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire
  • Christian Videos

empire

{Occult Infiltration of the Roman Catholic Church} The Revised Roman Empire - Christian and Rosicrucian Kabbalah [esoteric (hidden) teachings - the real NWO - New Age bible] - The origional Jewish [Witchcraft - King Solomon] Kabbalah --> Christian myst

Lull based his Art on the importance which Christian, Moslem [Islam], and Jew each attached to the Divine Names or Attributes, or, as he called them, Dignities. Lull mentioned nine Dignities (or Dignitaries): Bonitas (Goodness), Magnitudo (Greatness), Eternitas (Eternity), Potestas (Power), Sapientia (Wisdom), Voluntas (Will), Virtus (Virtue), Veritas (Truth), and Gloria (Glory). These are shown in the follwing diagram. ... In addition we also find the incorporation of the four elements [earth, water, air and fire] and the qualities, the seven planets and twelves [astrological] signs, medicine, alchemy, geometry, a letter notation, and so on. There is an elaborate system of correspondences, in that the nine Dignitaries have their correspondences in the celestial sphere, the human level, and the animal, plant, and material creation. In all this we see the influence, not only of Kabbalah, but also of Aristotlean categories, Augustinian Platonism (nearly all the Lullian Dignities can be found listed as Augustine's Divine Attributes), and the celestial hierarchies of angels of the Christian Neoplatonist Dionysius. [Frances A. Yates, The Occult Philosophy in the Elizabethan Age, pp.9-12]. -- Renaissance Kabbalah: Renaissance Christian Kabbalah was derived from a number of sources. Firstly, the christological speculations of a number of Jewish converts from the late 13th to the late fifteenth centuries. Secondly, the philosophical Christian and Renaissance speculation concerning the Kabbalah that developed around the Platonic Acadamy founded by the Medici family in Florence. Pico della Mirandola The Florentines, headed by the renowned Renaissance hermeticist Giovanni Pico della Mirandola (1463-94) believed they had discovered in Kabbalah a lost divine revelation that could give the key to understanding both the teachings of Pythagoras, Plato, and the Orphics, and the inner secrets of Catholic Christianity. Pico himself had a considerable amount of Kabbalistic literature translated into Latin by the scholarly convert Samuel ben Nissim Abulfaraj. Among the 900 theses Pico presented for public debate in Rome was the claim that "no science can better convince us of the divinity of Jesus Christ than magic and the Kabbalah", and he believed he could prove the dogmas of the Trinity and the Incarnation through Kabbalistic axioms. All this caused a sensation in the intellectual Christian world, and the writings of Pico and his follower Johannes Reuchlin (1455-1522) led on the one hand to great interest in the doctrine of Divine Names and in practical (magical) Kabbalah (culminating in Cornelius Agrippa of Nettesheim's De Occult Philosophia (1531) and on the other to further attempts at a synthesis between Kabbalah and Christian theology. [Gershom Scholem, Kabbalah, pp.197-8] -- Rosicrucian Kabbalah: By the late 16th century Christian Kabbalah began to be permeated with alchemical symbolism; a trend that continued through the 17th and 18th century. Well known representatives are the Rosucrucian philosopher and alchemist Robert Fludd (1574-1637) and the alchemist Thomas Vaughan (1622-1666) among others. One of the works of Fludd presents an interpretation of the Sefirotic Tree which he illustrates as a Palm (left), whose ten spreading branches raying forth from the lowest world suggest that man on earth is a microcosm or reflection of the macrocosm or universe. In the second half of the 18th century this alchemical kabbalah was combined with Freemasonic numerology and occultism, from which was ultimately to develop the extraordinary occult/magickal revival of the late 19th century known as the Hermetic Order of the Golden Dawn illustration (left) from World Trees by Hazel Minot Kircher's Tree from Oedipus Aegyptiacus published in 1652 by Athanasius Kircher, a Jesuit priest and hermetic philosopher -- Occult Kabbalah: By the 19th century the occultists of the French magician revival, such as Eliphas Levi (Alphonse Louis Constant; 1810-1875) and Papus (Gerard Encausse; 1868-1916) had lost all understanding of the original Jewish meaning of Kabbalah, and brought in various extraneous elements such as Tarot. Levi was an influential figure both on the Theosophy of Blavatsky and even more so the Golden Dawn Order of Mathers and Westcott, with it's unique Kabbalistic (or Qabalistic, to use the prefered spelling) formulation of Sefirot and paths, through which Kabbalah established itself in the contemporary Western Occult Tradition.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire

empire

{Occult Infiltration of the Roman Catholic Church} The Revised Roman Empire - 'Occult' power: the politics of witchcraft and superstition in Renaissance Florence - In Florence, how did one family--the Medici--secure their power after over a centur

Lawrence's interpretation, however narrow and flawed, does highlight an indisputable element of Grazzini's tale of Dr. Manente: its cruelty and "monstrosity," traits that, I will argue, provide insight into the social structures of the mid-sixteenth century, particularly those that rely upon coersion and force. In Florence, how did one family--the Medici--secure their power after over a century of struggle, and how did they come to construct a myth of their own legitimacy? ... It is important to remember that, from 1494--when the friar himself gained widespread support and offered a major threat to the rule of the Medici family--until long after his execution in 1498, Savonarola bequeathed a powerful religious and political vision that was not dependent on his leadership for survival--a fact that fascinated the political theorist Niccolo Machiavelli. Savonarola's followers--called the Piagnoni first by their enemies and later, proudly, by themselves--remained politically active after his execution, through the Republic that lasted until 1513, when the first Medici pope, Leo X, used the considerable influence of this position to help his family and their allies to return to Florence, and again after the sack of Rome in 1527, which occurred during the pontificate of another Medici, Clement VII. The Piagnoni continued to be active even after the Medici, first Alessandro and then Cosimo I, openly turned Florence onto the path of absolutism [unlimited, centralized authority and absolute sovereignty] by accepting the [nobility] title of Duke. ... Lorenzo's manipulation of the Church comes into play in the next phase of the beffa. ... At this point, Grazzini emphasizes not only that many friars and priests were ignorant, but, more importantly, that the kind of people Lorenzo elevated to positions of power in the Florentine church hierarchy were either superstitious [occult] or corrupt, criticisms that Savonarola also often made of the Medici.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire

empire

{Occult Infiltration of the Roman Catholic Church} The Revised Roman Empire - The Medici Family [generally considered the most Occult family of Medieval Europe] - Other Prominent Medici were *Pope Leo X (1475-1521); Pope Clement VII (1478-1534); Catherine

Medici, an Italian family of merchants and bankers who ruled the republic of Florence through economic power and personal influence. By their patronage of the arts they made Florence the center of the Italian Renaissance. The Medici were created dukes of Florence by Holy Roman Emperor Charles V in 1531, and grand dukes of Tuscany by Emperor Maximilian II in 1575. The last Medici grand duke was deposed by the Austrians in 1737. Important members of the Medici family included the following. Giovanni De' Medici: (1360-1429) established the family fortune and made himself ruler of Florence's merchant oligarchy. Cosimo De' Medici: (1389-1464), his son, used his banking business to gain political power and led Florence in a long period of prosperity and artistic achievement. Lorenzo the Magnificent: (1449-1492), grandson of Cosimo, gained fame as a statesman and patron of arts and letters. He was recognized as a poet himself and was largely responsible for the Tuscan dialect becoming the national speech of Italy. Cosimo (I) the Great: (1519-1574) succeeded to the dukedom in 1537 and ruled as a despot. He restored the duchy of Tuscany by conquering the other republics that had been part of it.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire

empire

{Occult Infiltration of the Roman Catholic Church} The Revised Roman Empire - The [two] Medici Popes - Pope Leo X [1513 - 1521] known for being the Pope that challenged Martin Luther's [1517 A.D.] 95 Theses -- Pope Clement VII [1523 - 1534] (Medici co

Pope Leo X - Giovanni de'Medici, 1475 - 1513 - 1521: Giovanni de'Medici, second son of Lorenzo and younger brother of the fatuous Piero, became the first of the Medici Popes (Leo X - Leone Decimo) at the age of 38 on 11 March 1513. Prior to this his life had been a complete roller coaster. Brought up in Medici luxury alongside Michelangelo (who was included in the Medici household by Lorenzo), older brother Piero and cousin Giulio (who was adopted by Lorenzo after his father (who was Lorenzo's brother) was killed in the Pazzi Conspiracy in 1478), he had access to the incomes of several wealthy monasteries, including Badia a Passignano, and was made a Cardinal at the age of 13. All this came to an abrupt end in 1494 when, in the wake of Lorenzo's death, the incompetent surrender of his brother Piero the Fatuous to the French, and the ensuing Savanorola stirred turbulence, he had to sneak out of Florence dressed as a Franciscan Friar, and then live in hiding with his cousin for the next decade, latterly being protected by the Habsburg Emperor Maximilian (who ironically was to be a major cause of the collapse of the Bruges branch of the Medici Bank) and then by the dreadful Cesare Borgia and his father Pope Alessandro VI (1431 - 1492 - 1503 (72)) in Rome. ... Pope Clement VII Giulio de'Medici, 1478 - 1523 - 1534 (56) Illegitimate son of Lorenzo's (Pazzi murdered) brother Giuliano, adopted son of Lorenzo, and companion in exile to Lorenzo's son Giovanni (Leo X), who was three years his senior, Giulio de'Medici became Pope Clement VII (Clemente Settimo). He was good looking, intellectually sophisticated, a talented musician and a political disaster. In reality he also faced the legacy of the corrupt practices of his cousin Leo X, and the impossible task of operating in the emergent nation state Europe dominated by Charles V, Francis I, and Henry VIII (whom he excommunicated), and threatened by Suleiman the Magnificent, plus Martin Luther dealing the protestants into the game as well - see Insight Page. He lost England, and was humiliated by having to flee in disguise from Rome when it was barbarically sacked by Charles V's rabble army after Clement mistakenly got too close to flashy Francis I of France.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire

empire

The Revised Roman Empire - Saint Helena - the mother of Emperor Constantine I - She is traditionally credited with finding the relics of the True Cross, with which she is invariably represented in Christian iconography - Constantine appointed his mother H

Family life: The bishop and historian Eusebius of Caesarea states that she was about 80 [years old] on her return from Palestine (Israel). Since that journey has been dated to 326-28, Helena was probably born in 248 or 250. Little is known of her early life. Fourth-century sources, following Eutropius' "Breviarium," record that she came from a low background. Saint Ambrose was the first to call her a stabularia, a term translated as "stable-maid" or "inn-keeper". He makes this fact a virtue, calling Helena a bona stabularia, a "good stable-maid". Other sources, especially those written after Constantine's proclamation as emperor, gloss over or ignore her background. ... Relic discoveries: Constantine appointed his mother Helen as Augusta Imperatrix, and gave her unlimited access to the imperial treasury in order to locate the relics of Judeo-Christian tradition. In 326-28 Helena undertook a trip to the Holy Places in Palestine. According to Eusebius of Caesarea she was responsible for the construction or beautification of two churches, the Church of the Nativity, Bethlehem, and the Church on the Mount of Olives, sites of Christ's birth and ascension. Local founding legend attributes to Helena's orders the construction of a church in Egypt to identify the Burning Bush of Sinai. The chapel at St. Catherine's Monastery--often referred to as the Chapel of Saint Helen-is dated to the year AD 330. -- Jerusalem was still rebuilding from the destruction of Emperor Hadrian, who had built a temple dedicated, according to conflicting accounts, to Venus or Jupiter over the site of Jesus's tomb near Calvary and renamed the city Aelia Capitolina. According to tradition, Helena ordered the temple torn down and, according to the legend that arose at the end of the fourth century, in Ambrose, On the Death of Theodosius (died 395) and at length in Rufinus' chapters appended to his translation into Latin of Eusebius' Ecclesiastical History, which does not mention the event, chose a site to begin excavating, which led to the recovery of three different crosses. Then, Rufinus relates, refusing to be swayed by anything but solid proof, the empress (perhaps through Bishop Macarius of Jerusalem) had a woman who was already at the point of death brought from Jerusalem. When the woman touched the first and second crosses, her condition did not change, but when she touched the third and final cross she suddenly recovered, and Helena declared the cross with which the woman had been touched to be the True Cross. On the site of discovery, Constantine ordered built the Church of the Holy Sepulchre as well as those on other sites detected by Helena. -- She also found the nails of the crucifixion. To use their miraculous power to aid her son, Helena allegedly had one placed in Constantine's helmet, and another in the bridle of his horse. Helena left Jerusalem and the eastern provinces in 327 to return to Rome, bringing with her large parts of the True Cross and other relics, which were then stored in her palace's private chapel, where they can be still seen today. Her palace was later converted into the Basilica of the Holy Cross in Jerusalem. This has been maintained by Cistercian monks in the monastery which has been attached to the church for centuries. Tradition says that the site of the Vatican Gardens was spread with earth brought from Golgotha by Helena to symbolically unite the blood of Christ with that shed by thousands of early Christians, who died in the persecutions of Nero. -- According to one tradition, Helena acquired the Holy Tunic on her trip to Jerusalem and sent it to Trier. Several of Saint Helena's treasures are now in Cyprus, where she spent some time. Some of them are a part of Jesus Christ's tunic, pieces of the holy cross and the world's only pieces of the rope to which Jesus was tied with on the Cross. The latter has been held at the Stavrovouni Monastery, which was also founded by Saint Helena.



  • Christian Church History Study
  • 2. 313 A.D. to 1521 A.D. - Revised Rome and the Holy Roman Empire

empire

Bishops - Part 52: The Fall of the Ottoman Empire

Fr. Tom takes up his series on the bishops and structure of the Church and moves to the 19th Century fall of the Ottoman Empire.




empire

The Formation of a Christian Subculture in the Pagan Roman Empire

Fr. John explores what could be called the catacomb culture of the Church in relation to the Roman Empire.




empire

The Consolidation of Christianity in the Byzantine Empire

Fr. John addresses the uncertainty in Byzantium following the death of Constantine and then the consolidation of Christianity shortly after that.




empire

Halesowen's Norma Hyde gets British Empire Medal

Norma received her award for services to the Special Olympics Sandwell.




empire

Empire Moulding and Millwork Opens New Distribution Center to Service the New England Market

Novo Building Products is pleased to announce the opening of a new Empire Moulding and Millwork distribution facility in Amherst, New Hampshire. Strategically located 60 miles north of Boston, the new 217,000-square-foot facility services 750 independent lumberyards, specialty millwork shops, stair manufacturers, door fabricators, ProDealers and home centers across New England.




empire

Saving the children: Humanitarianism, internationalism and empire: Emily Baughan, 2022, Oakland, California: University of California Press, 314 pp., ISBN 9780520343726.

Children's Geographies; 08/01/2023
(AN 167303415); ISSN: 14733285
Academic Search Premier




empire

Three wars that caused the Russian Empire to collapse

Since 1478, Russia has taken part in 138 wars and suffered defeat in 18 of them. Three of those wars led to most severe territorial and human losses for Russia.  Livonian War (1558 - 1583) The conflict sparked after the Livonian Confederation refused to pay tribute that Russia had imposed  since the previous war in 1481. The Livonians actively obstructed the development of Russian trade in the Baltic Sea and concluded an offensive-defensive treaty with Poland and Lithuania. Having realised that the war with the Baltic would be inevitable, Ivan the Terrible organised a crusade to Livonia. At first, Russia was winning, and both Livonia and Lithuania were completely defeated. However, the European countries joined their forces in the face of the threat from the Russian army. 




empire

The Debt Slaves Of The Student Loan Empire

New Book Exposes Dysfunction of Student Loan System




empire

Why Do Empires Fall? The Fall of the Roman (American) Emoire

Unveiling the Parallels Between Ancient Rome and Modern America in Hector Felix Byrd's Groundbreaking New Book




empire

GAFAM Empire. An exploration of acquisitions by big tech companies

Since the mid-1970s, the world has witnessed the rise and... more




empire

Sam Bankman-Fried and the fall of a crypto empire

Sam Bankman-Fried built a reputation as the one reliable crypto bro. But within the span of days, his empire came crashing down. What the rise and fall of crypto's 30-year-old elder statesman says about the story of crypto so far.

Subscribe to Planet Money+ in Apple Podcasts or at plus.npr.org/planetmoney

Learn more about sponsor message choices: podcastchoices.com/adchoices

NPR Privacy Policy




empire

Empire and Me: A Newsround Special

Newsround presenter De-Graft Mensah tells the story of his trip to Ghana where he found out more about his family's history and the impact of the British Empire in the West African nation.




empire

Sasser Restoration Opens Satellite Office in the Inland Empire

Sasser Restoration, a commercial restoration company, has expanded its operations and opened an office in California’s Inland Empire. Through this expansion, Sasser Restoration aims to provide high-quality restoration services to commercial businesses experiencing water, fire, and mold disasters throughout Riverside and San Bernardino counties. 




empire

Seeking the Next Great Photographer: Winner of New “Empire State of Mind” Photo Contest to be Announced at NAB Show New York

WASHINGTON, D.C. – NAB Show New York will shine a spotlight on creativity, innovation and collaboration, announcing the winner and full contest review of “Empire State of Mind presented by Bamboo.” This first-of-its-kind photo contest is seeking the next great photographer for a chance to direct a photoshoot on the streets of New York City with social media influencer and expert strategist Avori Henderson, shoot her next merch drop, speak at NAB Show New York and win $4000.




empire

Empire AI

Last summer I sat down with Tom Secunda, who co-founded Bloomberg LP with Mike Bloomberg, to talk about areas of shared philanthropic interest. Tom told me that academic institutions do not have access to the kind of AI/ML infrastructure that the top tech companies have and he wanted to fix that. His idea was a […]




empire

Tecta America Completes the Acquisition of Empire Roofing Inc.

Empire employs over 700 roofing and office professionals in the industry, and will operate going forward as Empire Roofing, a Tecta America Company.




empire

X Empire Hits Record All-Time High: Can It Sustain the Current Momentum?

For the first time after the launch in late October, X Empire has entered an upward trend hitting the all-time high after weeks of long downturn. The token has been underperforming in the crypto market since it was introduced to the ecosystem. Now it has reached its all-time high of $0.0002165. X Empire, id officially [...]




empire

Fate of Google’s search empire could rest in Trump’s hands

Trump may sway DOJ away from breaking up Google.




empire

Three empires, three cities: identity, material culture and legitimacy in Venice, Ravenna and Rome, 750-1000

Location: Electronic Resource- 




empire

From City of Empire to City of Diversity

Jessica Harris visits a photography exhibition showing Birmingham's sense of community.




empire

Tales of the Empire | Official Trailer

SOCIAL MEDIA follow us on YouTube: ??????????????????????????????????????????????????? ?????????????????https://youtube.com/channel/UCRUWxD1OKGkZW5ETHyrtyJg????????????????? ??????????????????????????????????????????????????? LOST HYPERSPACE Website....

This item belongs to: audio/opensource.

This item has files of the following types: Archive BitTorrent, Metadata, VBR MP3





empire

TurtleWare: Dynamic Vars - The Empire Strikes Back

Table of Contents

  1. Thread Local storage exhausted
  2. The layer of indirection
  3. I can fix her
  4. Let's write some tests!
  5. Summary

Thread Local storage exhausted

In the last post I've described a technique to use dynamic variables by value instead of the name by utilizing the operator PROGV. Apparently it works fine on all Common Lisp implementations I've tried except from SBCL, where the number of thread local variables is by default limited to something below 4000. To add salt to the injury, these variables are not garbage collected.

Try the following code to crash into LDB:

(defun foo ()
  (loop for i from 0 below 4096 do
    (when (zerop (mod i 100))
      (print i))
    (progv (list (gensym)) (list 42)
      (values))))
(foo)

This renders our new technique not very practical given SBCL popularity. We need to either abandon the idea or come up with a workaround.

The layer of indirection

Luckily for us we've already introduced a layer of indirection. Operators to access dynamic variables are called DLET, DSET and DREF. This means, that it is enough to provide a kludge implementation for SBCL with minimal changes to the remaining code.

The old code works the same as previously except that instead of SYMBOL-VALUE we use the accessor DYNAMIC-VARIABLE-VALUE, and the old call to PROGV is now DYNAMIC-VARIABLE-PROGV. Moreover DYNAMIC-EFFECTIVE-SLOT used functions BOUNDP and MAKUNBOUND, so we replace these with DYNAMIC-VARIABLE-BOUND-P and DYNAMIC-VARIABLE-MAKUNBOUND. To abstract away things further we also introduce the constructor MAKE-DYNAMIC-VARIABLE

(defpackage "EU.TURTLEWARE.BLOG/DLET"
  (:local-nicknames ("MOP" #+closer-mop "C2MOP"
                           #+(and (not closer-mop) ecl) "MOP"
                           #+(and (not closer-mop) ccl) "CCL"
                           #+(and (not closer-mop) sbcl) "SB-MOP"))
  (:use "CL"))
(in-package "EU.TURTLEWARE.BLOG/DLET")

(eval-when (:compile-toplevel :execute :load-toplevel)
  (unless (member :bordeaux-threads *features*)
    (error "Please load BORDEAUX-THREADS."))
  (when (member :sbcl *features*)
    (unless (member :fake-progv-kludge *features*)
      (format t "~&;; Using FAKE-PROGV-KLUDGE for SBCL.~%")
      (push :fake-progv-kludge *features*))))

(defmacro dlet (bindings &body body)
  (flet ((pred (binding)
           (and (listp binding) (= 2 (length binding)))))
    (unless (every #'pred bindings)
      (error "DLET: bindings must be lists of two values.~%~
                Invalid bindings:~%~{ ~s~%~}" (remove-if #'pred bindings))))
  (loop for (var val) in bindings
        collect var into vars
        collect val into vals
        finally (return `(dynamic-variable-progv (list ,@vars) (list ,@vals)
                           ,@body))))

(defmacro dset (&rest pairs)
  `(setf ,@(loop for (var val) on pairs by #'cddr
                 collect `(dref ,var)
                 collect val)))

(defmacro dref (variable)
  `(dynamic-variable-value ,variable))

;;; ...

(defmethod mop:slot-boundp-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-bound-p (slot-dvar object slotd)))

(defmethod mop:slot-makunbound-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-makunbound (slot-dvar object slotd)))

With these in place we can change the portable implementation to conform.

#-fake-progv-kludge
(progn
  (defun make-dynamic-variable ()
    (gensym))

  (defun dynamic-variable-value (variable)
    (symbol-value variable))

  (defun (setf dynamic-variable-value) (value variable)
    (setf (symbol-value variable) value))

  (defun dynamic-variable-bound-p (variable)
    (boundp variable))

  (defun dynamic-variable-makunbound (variable)
    (makunbound variable))

  (defmacro dynamic-variable-progv (vars vals &body body)
    `(progv ,vars ,vals ,@body)))

I can fix her

The implementation for SBCL will mediate access to the dynamic variable value with a synchronized hash table with weak keys. The current process is the key of the hash table and the list of bindings is the value of the hash table. For compatibility between implementations the top level value of the symbol will be shared.

The variable +FAKE-UNBOUND+ is the marker that signifies, that the variable has no value. When the list of bindings is EQ to +CELL-UNBOUND+, then it means that we should use the global value. We add new bindings by pushing to it.

#+fake-progv-kludge
(progn
  (defvar +fake-unbound+ 'unbound)
  (defvar +cell-unbound+ '(no-binding))

  (defclass dynamic-variable ()
    ((tls-table
      :initform (make-hash-table :synchronized t :weakness :key)
      :reader dynamic-variable-tls-table)
     (top-value
      :initform +fake-unbound+
      :accessor dynamic-variable-top-value)))

  (defun make-dynamic-variable ()
    (make-instance 'dynamic-variable))

  (defun dynamic-variable-bindings (dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (gethash process tls-table +cell-unbound+)))

  (defun (setf dynamic-variable-bindings) (value dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (setf (gethash process tls-table +cell-unbound+) value))))

We define two readers for the variable value - one that simply reads the value, and the other that signals an error if the variable is unbound. Writer for its value either replaces the current binding, or if the value cell is unbound, then we modify the top-level symbol value. We use the value +FAKE-UNBOUND+ to check whether the variable is bound and to make it unbound.

#+fake-progv-kludge
(progn
  (defun %dynamic-variable-value (dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (dynamic-variable-top-value dvar)
          (car tls-binds))))

  (defun dynamic-variable-value (dvar)
    (let ((tls-value (%dynamic-variable-value dvar)))
      (when (eq tls-value +fake-unbound+)
        (error 'unbound-variable :name "(unnamed)"))
      tls-value))

  (defun (setf dynamic-variable-value) (value dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (setf (dynamic-variable-top-value dvar) value)
          (setf (car tls-binds) value))))

  (defun dynamic-variable-bound-p (dvar)
    (not (eq +fake-unbound+ (%dynamic-variable-value dvar))))

  (defun dynamic-variable-makunbound (dvar)
    (setf (dynamic-variable-value dvar) +fake-unbound+)))

Finally we define the operator to dynamically bind variables that behaves similar to PROGV. Note that we PUSH and POP from the thread-local hash table DYNAMIC-VARIABLE-BINDINGS, so no synchronization is necessary.

#+fake-progv-kludge
(defmacro dynamic-variable-progv (vars vals &body body)
  (let ((svars (gensym))
        (svals (gensym))
        (var (gensym))
        (val (gensym)))
    `(let ((,svars ,vars))
       (loop for ,svals = ,vals then (rest ,svals)
             for ,var in ,svars
             for ,val = (if ,svals (car ,svals) +fake-unbound+)
             do (push ,val (dynamic-variable-bindings ,var)))
       (unwind-protect (progn ,@body)
         (loop for ,var in ,svars
               do (pop (dynamic-variable-bindings ,var)))))))

Let's write some tests!

But of course, we are going to also write a test framework. It's short, I promise. As a bonus point the API is compatibile with fiveam, so it is possible to drop tests as is in the appropriate test suite.

(defvar *all-tests* '())

(defun run-tests ()
  (dolist (test (reverse *all-tests*))
    (format *debug-io* "Test ~a... " test)
    (handler-case (funcall test)
      (serious-condition (c)
        (format *debug-io* "Failed: ~a~%" c))
      (:no-error (&rest args)
        (declare (ignore args))
        (format *debug-io* "Passed.~%")))))

(defmacro test (name &body body)
  `(progn
     (pushnew ',name *all-tests*)
     (defun ,name () ,@body)))

(defmacro is (form)
  `(assert ,form))

(defmacro pass ())

(defmacro signals (condition form)
  `(is (block nil
         (handler-case ,form
           (,condition () (return t)))
         nil)))

(defmacro finishes (form)
  `(is (handler-case ,form
         (serious-condition (c)
           (declare (ignore c))
           nil)
         (:no-error (&rest args)
           (declare (ignore args))
           t))))

Now let's get to tests. First we'll test our metaclass:

(defclass dynamic-let.test-class ()
  ((slot1 :initarg :slot1 :dynamic nil :accessor slot1)
   (slot2 :initarg :slot2 :dynamic t   :accessor slot2)
   (slot3 :initarg :slot3              :accessor slot3))
  (:metaclass class-with-dynamic-slots))

(defparameter *dynamic-let.test-instance-1*
  (make-instance 'dynamic-let.test-class
                 :slot1 :a :slot2 :b :slot3 :c))

(defparameter *dynamic-let.test-instance-2*
  (make-instance 'dynamic-let.test-class
                 :slot1 :x :slot2 :y :slot3 :z))

(test dynamic-let.1
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (with-slots (slot1 slot2 slot3) o1
      (is (eq :a slot1))
      (is (eq :b slot2))
      (is (eq :c slot3)))
    (with-slots (slot1 slot2 slot3) o2
      (is (eq :x slot1))
      (is (eq :y slot2))
      (is (eq :z slot3)))))

(test dynamic-let.2
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (signals error (slot-dlet (((o1 'slot1) 1)) nil))
    (slot-dlet (((o1 'slot2) :k))
      (is (eq :k (slot-value o1 'slot2)))
      (is (eq :y (slot-value o2 'slot2))))))

(test dynamic-let.3
  (let ((o1 *dynamic-let.test-instance-1*)
        (exit nil)
        (fail nil))
    (flet ((make-runner (values)
             (lambda ()
               (slot-dlet (((o1 'slot2) :start))
                 (let ((value (slot2 o1)))
                   (unless (eq value :start)
                     (setf fail value)))
                 (loop until (eq exit t) do
                   (setf (slot2 o1) (elt values (random (length values))))
                   (let ((value (slot2 o1)))
                     (unless (member value values)
                       (setf fail value)
                       (setf exit t))))))))
      (let ((r1 (bt:make-thread (make-runner '(:k1 :k2))))
            (r2 (bt:make-thread (make-runner '(:k3 :k4))))
            (r3 (bt:make-thread (make-runner '(:k5 :k6)))))
        (sleep .1)
        (setf exit t)
        (map nil #'bt:join-thread (list r1 r2 r3))
        (is (eq (slot2 o1) :b))
        (is (null fail))))))

Then let's test the dynamic variable itself:

(test dynamic-let.4
  "Test basic dvar operators."
  (let ((dvar (make-dynamic-variable)))
    (is (eql 42 (dset dvar 42)))
    (is (eql 42 (dref dvar)))
    (ignore-errors
     (dlet ((dvar :x))
       (is (eql :x (dref dvar)))
       (error "foo")))
    (is (eql 42 (dref dvar)))))

(test dynamic-let.5
  "Test bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dset dvar 15)
    (is (dynamic-variable-bound-p dvar))
    (dynamic-variable-makunbound dvar)
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.6
  "Test makunbound operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (finishes (dynamic-variable-makunbound dvar))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.7
  "Test locally bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dlet ((dvar 15))
      (is (dynamic-variable-bound-p dvar)))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.8
  "Test locally unbound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (dlet ((dvar nil))
      (is (dynamic-variable-bound-p dvar))
      (finishes (dynamic-variable-makunbound dvar))
      (is (not (dynamic-variable-bound-p dvar))))
    (is (dynamic-variable-bound-p dvar))))

(test dynamic-let.9
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                              ; at the same time
    (let ((dvars (loop repeat 4096 collect (make-dynamic-variable))))
      ;; ensure tls variable
      (loop for v in dvars do
        (dlet ((v 1))))
      (loop for i from 0 below 4096
            for r = (random 4096)
            for v1 in dvars
            for v2 = (elt dvars r) do
              (when (zerop (mod i 64))
                (pass))
              (dlet ((v1 42)
                     (v2 43))
                (values))))))

(test dynamic-let.0
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                             ; can be gc-ed
    (loop for i from 0 below 4096 do
      (when (zerop (mod i 64))
        (pass))
      (dlet (((make-dynamic-variable) 42))
        (values)))))

All that is left is to test both dynamic variable implementations:

BLOG/DLET> (lisp-implementation-type)
"ECL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

And with the kludge:

BLOG/DLET> (lisp-implementation-type)
"SBCL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

Summary

In this post we've made our implementation to work on SBCL even when there are more than a few thousand dynamic variables. We've also added a simple test suite that checks the basic behavior.

As it often happens, after achieving some goal we get greedy and achieve more. That's the case here as well. In the next (and the last) post in this series I'll explore the idea of adding truly thread-local variables without a shared global value. This will be useful for lazily creating context on threads that are outside of our control. We'll also generalize the implementation so it is possible to subclass and implement ones own flavor of a dynamic variable.






empire

Rainforest Café fans: don't miss this Empire State Building pop-up

Earlier this year on April Fools' Day, the Empire State Building announced that they would be opening at a Rainforest Café on the iconic building's 86th floor observatory. If you got your hopes up just to find out it was all an April Fools' joke, rejoice, because now the joke is about to become reality. — Read the rest

The post Rainforest Café fans: don't miss this Empire State Building pop-up appeared first on Boing Boing.



  • Post
  • all of your jungle-themed restaurant dreams are coming true
  • April Fools Day joke turns into reality
  • Empire State Building
  • pop-ups
  • Rainforest Cafe

empire

Empire in Retreat? The Future of the United States




empire

Reflections at 100: Empire and decolonization

Reflections at 100: Empire and decolonization Audio MVieira 1 November 2022

How did leading academics and policymakers think about and impact imperialism and decolonization from the 1920s to 1970s?

This episode of Reflections at 100, marking the centenary of International Affairs, looks at how empire and decolonization have been discussed in the journal.

Isabel and Krisztina speak to Meera Sabaratnam about how thinkers and policymakers from the 1920s to 1970s understood both empire and then decolonization. Meera highlights four tensions present within the discussions, and how these may impact the international order today.

Inderjeet Parmar delves deeper into the influence of Chatham House at the time and situates these discussions in the broader think-tank and global context.

Reflections at 100 is a mini-series accompanying the journal’s centenary Archive Collections. The collections bring together articles from our archive which speak to the past, present, and future of current affairs issues. In each podcast episode we speak to editors and contributors to the collection and explore what the research tells us about policymaking today. 

Explore the Archive Collection, free to access until mid-November 2022, including Meera’s introduction: 100 years of empire and decolonization.

International Affairs was started at Chatham House in 1922 to communicate research to members who could not attend in person. Over the past 100 years it has transformed into a journal that publishes academically rigorous and policy relevant research. It is published for Chatham House by Oxford University Press. Read the latest issue here. 




empire

The Enterprising Woman Who Built—and Lost, and Rebuilt—a Booming Empire During the Klondike Gold Rush

With flinty perseverance and a golden touch, Belinda Mulrooney earned an unlikely fortune in the frozen north and reshaped the Canadian frontier




empire

Nomads thrived in Greece after the collapse of the Roman Empire

Analysis of pollen in sediment cores from a large lake in Greece shows that nomadic livestock herders took over the region after the collapse of the Western Roman Empire




empire

Here’s a new launch trailer for Attenborough-em-up RTS Empire Of The Ants, out this week

Much the same as anyone with a soul, I find ants deeply fascinating and, much the same as anyone who occasionally drops small pieces of sandwich on the floor, I will continue to uphold my respect for them as long as they come nowhere near my feet. Yes. I admit it: I am a bug hypocrite, loudly extolling their virtue and beauty at a distance then getting irritated if they decide to come sit on me.

Fortunately, real time strategy Empire Of The Ants understands that the best place for insects to be is inside a screen, where they can be appreciated but cannot under any circumstances touch you. It’s out this week, as it happens, and here’s a new launch trailer to celebrate. Follow your pheromone trail to the video below.

Read more




empire

Musou Games on Steam Deck – Samurai Warriors, Dynasty Warriors, Warriors Orochi, Empires, and Much More Tested on Steam Deck OLED

One of the biggest advantages to PC gaming is having access to multiple generations of game releases. We’ve seen entire …





empire

‘Total War: Empire’ Is Coming to iOS and Android This Fall From Feral Interactive

Feral Interactive’s tease seemingly was about Total War: Empire from Creative Assembly and SEGA because the developer just announced that …




empire

Inside Gary Lineker’s Goalhanger podcast empire as host ends Match of the Day tenure

As Lineker prepares for life away from the BBC, his podcast empire is proving there is life away from football




empire

Psychiatry and Empire [Electronic book] / edited by Sloan Mahone, Megan Vaughan.

London : Palgrave Macmillan UK : Imprint: Palgrave Macmillan, 2007.




empire

Propaganda and empire : the manipulation of British public opinion, 1880-1960 [Electronic book] / John M. MacKenzie.

Manchester, UK : Manchester University Press, Date of production or publication2017.




empire

Population, providence and empire : The churches and emigration from nineteenth-century Ireland [Electronic book] / Sarah Roddy.

Manchester : Manchester University Press, [2019]




empire

The other empire : Metropolis, India and progress in the colonial imagination [Electronic book] / John Marriott.

Manchester : Manchester University Press, [2018]




empire

Legislating authority : sin and crime in the Ottoman Empire and Turkey [Electronic book] / Ruth A. Miller.

New York ; Abingdon, Oxon : Routledge, 2005.




empire

Female imperialism and national identity : Imperial Order Daughters of the Empire [Electronic book] / Katie Pickles.

Manchester : Manchester University Press, [2018]