text:
A beginner's guide to the Renaissance
Expanding the Renaissance: a new Smarthistory initiative
Tiny timeline: global Europe
Do you speak Renaissance? Carlo Crivelli, Madonna and Child
Why commission artwork during the renaissance?
Types of renaissance patronage
Female artists in the renaissance
Images of African Kingship, Real and Imagined
Introduction to gender in renaissance Italy
Sex, Power, and Violence in the Renaissance Nude
Confronting power and violence in the renaissance nude
Italy and Spain in the 14th century:
Late Gothic
Introduction to Late Gothic art
Distorting the Madonna in Medieval art
The conservator's eye: Taddeo Gaddi, Saint Julian
Gold-ground panel painting
Remaking a fourteenth-century triptych
Florence in the Late Gothic period, an introduction
Dante's Divine Comedy in Late Medieval and Early Renaissance art
Cimabue, Virgin and Child Enthroned, and Prophets (Santa Trinità Maestà)
Cimabue, Santa Trinita Madonna and Child Enthroned
Cimabue and Giotto compared
Giotto, The Ognissanti Madonna and Child Enthroned
Giotto, St. Francis of Assisi Receiving the Stigmata
Giotto, Arena (Scrovegni) Chapel
The Arena Chapel (and Giotto's frescos) in virtual reality
Giotto, Arena (Scrovegni) Chapel (part 1 of 4)
Giotto, The Entombment of Mary
Andrea Pisano, Reliefs for the Florence Campanile
Siena in the Late Gothic, an introduction
Duccio, Maestà
Duccio, Heaven on earth— The Rucellai Madonna
Duccio, The Virgin and Child with Saints Dominic and Aurea
Ambrogio Lorenzetti
Palazzo Pubblico frescos: Allegory and Effects of Good and Bad Government
Presentation of Jesus in the Temple
Pietro Lorenzetti, Birth of the Virgin
Simone Martini
Simone Martini, Annunciation
Simone Martini, Saint Louis of Toulouse
Pisa, Pistoia and Rome
Nicola Pisano, Pulpit, Pisa Baptistery, and Giovanni Pisano, Slaughter of the Innocents, Pulpit, Sant'Andrea church, Pistoia (Italy)
Giovanni Pisano, Pisa Pulpit
Pietro Cavallini, The Last Judgment
Ferrer Bassa and the murals of Pedralbes
Italy in the 15th century:
How to recognize Italian Renaissance art
Napoleon's appropriation of Italian cultural treasures
Illustrating a Fifteenth-Century Italian Altarpiece
The study of anatomy
Contrapposto explained
Florence in the Early Renaissance
Alberti's revolution in painting
Linear Perspective: Brunelleschi's Experiment
How one-point linear perspective works
Early applications of linear perspective
Gentile da Fabriano
Adoration of the Magi
Adoration of the Magi (reframed)
Virgin and Child Enthroned
Tribute Money and Expulsion, Brancacci Chapel
Expulsion of Adam and Eve from Eden in the Brancacci Chapel
The Annunciation and Life of the Virgin (c. 1426)
The Annunciation (c. 1438-47)
Paolo Uccello, Battle of San Romano
Madonna and Child with Two Angels
Portrait of a Man and Woman at a Casement
Filippino Lippi's Madonna and Child, an early image of enslaved people in renaissance Florence
Domenico Veneziano, Saint Lucy Altarpiece
Antonio Pollaiuolo, Battle of Ten Nudes or (Battle of Nude Men)
Perugino, Christ Giving the Keys of the Kingdom to St. Peter
Ghirlandaio, Life of the Virgin
Cassone with the Conquest of Trebizond
La Primavera (Spring)
Portrait of a Man with a Medal of Cosimo il Vecchio de' Medici
Fashion and a Portrait of a Young Woman
Dissecting Botticelli's Adoration of the Magi
Perugino, Decemviri Altarpiece
Piero della Francesca
The Baptism of Christ
Flagellation of Christ
Piero della Francesca, The Resurrection
Portraits of the Duke and Duchess of Urbino
Luca Signorelli, The Damned Cast into Hell
Sculpture and architecture
Filippo Brunelleschi and Lorenzo Ghiberti, Sacrifice of Isaac
Lorenzo Ghiberti, Gates of Paradise, East Doors of the Florence Baptistery
Old Sacristy, San Lorenzo
Dome of the Cathedral of Florence
Pazzi Chapel
Orsanmichele and Donatello's Saint Mark, Florence
Nanni di Banco, Four Crowned Saints
Feast of Herod
Madonna of the Clouds
Equestrian Monument of Gattamelata
Leon Battista Alberti
Palazzo Rucellai
Alberti, Façade of Santa Maria Novella, Florence
Sant'Andrea, Mantua
Northern Italy: Venice, Ferrara, and the Marches
Venetian art, an introduction
Oil paint in Venice
Ca' d'Oro
Devotional confraternities (scuole) in Renaissance Venice
Aldo Manuzio (Aldus Manutius): inventor of the modern book
Saving Venice
Carlo Crivelli
The Annunciation with Saint Emidius
Gentile Bellini, Portrait of Sultan Mehmed II
St. Francis in the Desert (or St. Francis in Ecstasy)
San Giobbe Altarpiece
San Zaccaria Altarpiece
Giovanni Bellini and Titian,The Feast of the Gods
St. James Led to his Execution
San Zeno Altarpiece
Dormition (or Death) of the Virgin
Camera Picta (Camera degli Sposi)
Dead Christ
Guido Mazzoni
Lamentation in Ferrara
Mazzoni and Renaissance Emotions
High Renaissance and Mannerism
Toward the High Renaissance, an introduction
Mannerism, an introduction
Renaissance woman: Isabella d'Este
The Medici collect the Americas
Medici porcelain, a failed experiment
Galileo and Renaissance art
Central and Northern Italy
Nicola da Urbino, a dinner service for a duchess
About Leonardo
Leonardo's Letter to the Duke of Milan
Leonardo: Anatomist
Leonardo and his drawings
The Virgin of the Rocks
The Virgin and Child with St. Anne and St. John the Baptist (Burlington House Cartoon)
Mona Lisa (from HENI Talks)
Tiny timelines: Michelangelo in context
About Michelangelo
Who was Michelangelo?
The many meanings of Michelangelo's David
Quarrying and carving marble
Carving marble with traditional tools
Ceiling of the Sistine Chapel
Studies for the Libyan Sibyl (recto); Studies for the Libyan Sibyl and a small Sketch for a Seated Figure (verso)
Last Judgment, Sistine Chapel
Medici Chapel (New Sacristy)
Laurentian Library
Raphael, an introduction
Marriage of the Virgin
Madonna of the Goldfinch
La belle jardinière (Madonna and Child with Saint John the Baptist)
School of Athens
The Alba Madonna
Portrait of Pope Julius II
Pope Leo X
Donato Bramante
Tempietto, Rome
Saint Peter's Basilica
Jacopo Pontormo, Entombment (or Deposition from the Cross)
Parmigianino, Madonna of the Long Neck
Parmigianino, Self-Portrait in a Convex Mirror
Rosso Fiorentino, The Dead Christ with Angels
An Allegory with Venus and Cupid
Portrait of Eleonora di Toledo with her son Giovanni
Bronzino and the Mannerist Portrait
Sofonisba Anguissola, Self-Portraits
Benvenuto Cellini, Perseus with the Head of Medusa
Giambologna, Abduction of a Sabine Woman
Synagogues in the Venetian Ghetto
Three Philosophers
The Adoration of the Shepherds
Pastoral Concert
Assumption of the Virgin
Madonna of the Pesaro Family
Bacchus and Ariadne
Two portraits of Pietro Aretino
Venus of Urbino
Christ Crowned with Thorns
Titian and Jacopo Palma il Giovane, Pietà
Jupiter and Io
Paolo Veronese
The Family of Darius before Alexander
The Dream of Saint Helena
Feast in the House of Levi
Transcript of the trial of Veronese
Jacopo Tintoretto
The Miracle of the Slave
The Finding of the Body of Saint Mark
The Origin of the Milky Way
Andrea Palladio
Northern Europe in the 15th century:
Claus Sluter and Claus de Werve
The Well of Moses
Mourners
Herman, Paul, and Jean de Limbourg
The Belles Heures of Jean de France, Duc de Berry
Campin and his workshop
Robert Campin, Christ and the Virgin
Portrait of a Man in a Red Turban (Self-Portrait?)
The Madonna in the Church
The Arnolfini Portrait
Petrus Christus
Portrait of a Carthusian
A Goldsmith in his Shop
Portrait of a Young Woman
Rogier van der Weyden
Crucifixion Triptych
The Crucifixion, with the Virgin and Saint John the Evangelist Mourning
The Holy Thorn Reliquary of Jean, duc de Berry
Enguerrand Quarton(?), Pietà of Villeneuve-lès-Avignon
Michael Pacher, St. Wolfgang Altarpiece
Baltic region
Renaissance and Mannerism
An introduction to the Northern Renaissance in the sixteenth century
Johannes Stradanus and Theodoor Galle, "The Discovery of America"
Last Judgment Triptych
Gerard David, The Virgin and Child with Saints and Donor
Jan Gossaert, Saint Luke Painting the Madonna
The Dutch Proverbs
Hunters in the Snow (Winter)
Peasant Wedding
Pieter Aertsen, Meat Stall
Bernard van Orley and Pieter de Pannemaker, The Last Supper
Boxwood pendant miniature in wood and feathers
Germany and England
Who was Albrecht Dürer?
Albrecht Dürer, The Triumphal Arch
Self-portrait, Study of a Hand and a Pillow (recto); Six Studies of Pillows (verso)
Self-Portrait (1498)
The Four Horsemen of the Apocalypse
The Large Piece of Turf
Adam and Eve (video from The Metropolitan Museum of Art)
Melencolia I
Decoding art: Dürer's Melencolia I
What is Melencolia?
The Four Apostles
Dürer's woodcuts and engravings
Grünewald, Isenheim Altarpiece
Lucas Cranach the Elder and workshop, Saint Maurice
Law and Gospel (Law and Grace)
Cupid complaining to Venus
Judith with the Head of Holofernes
Hans Holbein the Younger
About Hans Holbein the Younger
The Merchant Georg Gisze
Christina of Denmark, Duchess of Milan
Albrecht Altdorfer, The Battle of Issus
Portraits of Elizabeth I: Fashioning the Virgin Queen
The conservator's eye: a stained glass Adoration of the Magi
The Gallery of Francis I at Fontainebleau (and French Mannerism)
Follower of Bernard Palissy, rustic platter
Spain in the 15th and 16th centuries:
Renaissance in Spain, an introduction
Fifteenth-century Spanish painting, an introduction
The Master of Belmonte, St. Michael Defeats the Devil
The Morata Master, Virgin and Child Enthroned with Scenes from the Life of the Virgin
The Sopetrán Lamentation in wood
Bartolomé Bermejo, Piedad with Canon Lluís Desplà
Gil de Siloé
Saint James the Greater
Tomb of Juan II of Castile and Isabel of Portugal
Treasure from Spain, lusterware as luxury
Juan de Flandes
A miraculous appearance for a queen: Juan de Flandes, Christ Appearing to His Mother
Juan de Flandes, Marriage at Cana
Apostle or Saint, bringing the figure to life
Abraham and Isaac
Alejo Fernández, The Virgin of the Navigators
Sacred geometry in a mudéjar-style ceiling
Burial of the Count Orgaz
View of Toledo
Adoration of the Shepherds
Reformation & Counter-Reformation
The Protestant Reformation
Introduction to the Protestant Reformation (part 1 of 4): Setting the stage
Introduction to the Protestant Reformation (part 2 of 4): Martin Luther
Introduction to the Protestant Reformation (part 3 of 4): Varieties of Protestantism
Introduction to the Protestant Reformation (part 4 of 4): The Counter-Reformation
Lucas Cranach the Elder, Law and Gospel (Law and Grace)
Iconoclasm in the Netherlands in the Sixteenth Century
Baroque art, an introduction
How to recognize Baroque art
Francis Bacon and the Scientific Revolution
Restoring ancient sculpture in Baroque Rome
Pluto and Proserpina (or The Rape of Proserpina)
Baldacchino, Saint Peter's
Bust of Medusa
Ecstasy of Saint Teresa
Cathedra Petri (Chair of St. Peter)
St. Peter's Square
Sant'Andrea al Quirinale, Rome
Francesco Borromini, San Carlo alle Quattro Fontane, Rome
Annibale Carracci, Christ Appearing to Saint Peter on the Appian Way
Narcissus at the Source
Calling of St. Matthew
The Conversion of St. Paul (or The Conversion of Saul)
Crucifixion of St. Peter
Deposition (or Entombment)
Death of the Virgin
Caravaggio and Caravaggisti in 17th-century Europe
Guido Reni, Aurora
Artemisia Gentileschi, Judith Slaying Holofernes
Guercino, St. Luke Displaying a Painting of the Virgin
Il Gesù, Rome
Andrea Pozzo
Glorification of Saint Ignatius
St. Ignatius Chapel, Il Gesù, Rome
Pierre Le Gros the Younger, Stanislas Kostka on His Deathbed
The Rape of the Daughters of Leucippus
The Presentation of the Portrait of Marie de' Medici
Arrival (or Disembarkation) of Marie de Medici at Marseilles
The Apotheosis of Henry IV and the Proclamation of the Regency of Marie de' Médici
Venus, Mars and Cupid
The Consequences of War
Charles I at the Hunt
Dutch Republic
Singing Boy with Flute
Malle Babbe
The Women Regents
Rembrandt, The Anatomy Lesson of Dr. Tulp
Self-Portrait with Saskia
Girl at a Window
Christ Crucified between the Two Thieves: The Three Crosses
Aristotle with a Bust of Homer
Bathsheba at Her Bath
Rembrandt, Self-Portrait with Two Circles
The Jewish Bride
Gerrit Dou, A Woman Playing a Clavichord
The Glass of Wine
Young Woman with a Water Pitcher
Woman Holding a Balance
The Art of Painting
Saenredam, Interior of Saint Bavo, Haarlem
Jan Steen, Feast of St. Nicholas
Jacob van Ruisdael, View of Haarlem with Bleaching Grounds
Jacob van Ruisdael, The Jewish Cemetery
Rachel Ruysch
Fruit and Insects
Flower Still-Life
Jan van Huysum, Vase with Flowers
A Still Life of Global Dimensions: Antonio de Pereda's Still Life with Ebony Chest
Juan Sanchez de Cotán, Quince, Cabbage, Melon and Cucumber
The Waterseller of Seville
Los Borrachos (The Drunks), also known as The Triumph of Bacchus
Vulcan's Forge
Juan de Pareja
Francisco de Zurbarán, The Martyrdom of Saint Serapion
Jusepe de Ribera, The Martyrdom of Saint Philip
Juan Martínez Montañés and Francisco Pacheco, Christ of Clemency
Jerónimo de Balbás, Altar of the Kings (Altar de los Reyes)
France and England
Nicolas Poussin, Et in Arcadia Ego
Nicolas Poussin, Landscape with Saint John on Patmos
Antoine or Louis Le Nain, Peasant Family in an Interior
Hyacinthe Rigaud, Louis XIV
Louis le Vau, André le Nôtre, and Charles le Brun, Château de Versailles
Claude Perrault, East façade of the Louvre
Charles I with M. de St. Antoine
Equestrian Portrait of Charles I
Charles I as art collector
John Michael Wright, The Coronation Portrait of Charles II
The Banqueting House, Whitehall Palace
Different Places: Japanese porcelain with English gilt-bronze mounts
Wooldridge, Indians of Virginia
c. 1700 - 1775:
Rococo art, an introduction
The Formation of a French School: the Royal Academy of Painting and Sculpture
Antoine Watteau, Pilgrimage to Cythera
François Boucher, Madame de Pompadour
The Tiepolo Family
Élisabeth-Louise Vigée Le Brun
Self-Portrait with her Daughter
Madame Perregaux
The Progress of Love: The Meeting
Jean-Baptiste Greuze, The Village Bride
Bernard II van Risenburgh, Writing table
Architecture in 18th-century Germany
Late 18th century:
Neoclassicism, an introduction
The Age of Enlightenment, an introduction
Oath of the Horatii
The Lictors Returning to Brutus the Bodies of His Sons
Study for The Lictors Bringing Brutus the Bodies of his Sons
The Death of Marat
The Intervention of the Sabine Women
Napoleon Crossing the Alps
The Emperor Napoleon in His Study in the Tuileries
Angelica Kauffmann, Cornelia Pointing to her Children as Her Treasures
Anne-Louis Girodet, The Sleep of Endymion
Marie-Guillemine Benoist, Portrait of Madeleine
Paolina Borghese as Venus Victorious
Penitent Magdalene
Pierre-Alexandre Barthélémy Vignon, Church of La Madeleine
Jacques-Germain Soufflot, The Panthéon (Church of Ste-Geneviève), Paris
Britain in the 18th century
Wren, Saint Paul's Cathedral
A Rake's Progress
Marriage a-la-Mode
Thomas Gainsborough, Mr. and Mrs. Andrews
Joseph Wright of Derby, A Philosopher Giving a Lecture at the Orrery
Sir Joshua Reynolds, Lady Cockburn and Her Three Eldest Sons
by Dr. Susan Waller
Marie-Guillemine Benoist, Portrait of Madeleine (formerly known as Portrait of a Negress), 1800, oil on canvas, 81 x 65 cm (Musée du Louvre)
Marie-Guillemine Benoist's Portrait of Madeleine (formerly known as Portrait of a Negress) hangs today in the Louvre in a gallery devoted to paintings by Jacques-Louis David and his students. It is placed at the center of a wall displaying seven portraits, a location that asserts its importance. In 1800 the work was exhibited in the Louvre for the first time, at the Salon—the state-sponsored presentation of works by contemporary artists. It hung in the Salon Carré, one smallish work on a wall of paintings hung frame to frame, floor to ceiling, as was customary at the time. Contemporary art critics picked it out, but not all were impressed. The critic for a conservative paper derided it as a "noirceur" or "black stain." Why did this work provoke such a negative response when first exhibited?
Antoine Maxime Monsaldy, "View of the paintings exhibited at the Museum Centrale des Arts in the Year VIII," 1800, print (Bibliothèque nationale de France). Benoist's painting can be seen at the center left.
A portrait or an allegory?
Detail, Marie-Guillemine Benoist, Portrait of Madeleine (formerly known as Portrait of a Negress), 1800, oil on canvas, 81 x 65 cm (Musée du Louvre)
Jacques Louis David, Madame Raymond de Verninac, 1799, oil on canvas, 145 x 112 cm (Louvre)
The painting shows a young black woman seated in an armchair. Her body is oriented to her left, but she turns to face the viewer with a sober and self-possessed expression. The treatment of her face suggests this is a likeness of a particular individual. Most of her hair is covered in an elaborate white headwrap, and she wears a brilliant white garment that slips from her shoulders to reveal the warm dark skin of her right breast. The background is a plain beige field, but the trim on her chair suggests that she is sitting in a well-furnished interior. The only bright colors in this largely monochromatic work are the red of a ribbon holding the white cloth beneath her breasts and the blue of a shawl draped over the back of her chair.
Benoist's painting is consistent with the conventions of portraiture and the Neoclassical aesthetic prevailing in France in 1800. The woman's costume recalls the fashionable dress of the period, and her pose is similar to those seen in Jacques-Louis David's portraits, such as Madame Raymond de Verninac. The bared breast underlines the contrast of skin and fabric: in portraits, a convincing rendering of flesh tones was crucial, and in the European tradition, as far back as the sixteenth century, the skin of "Ethiopians"—as Africans were commonly called—was considered especially challenging to paint. Benoist's work is a striking demonstration of her capabilities as a portraitist.
Alcide Dessalines d' Orbigny, "A Slave Auction, Martinique, c. 1826," from Voyage pittoresque dans les deux Amériques (Paris, 1836), facing p. 14 (Bibliothèque nationale de France)
A respectable woman, however, would have been unlikely to agree to be represented with her breast exposed. The revealing costume of Laville-Leroulx's black sitter might have recalled, for some viewers, the slave markets in French colonies, where the bodies of black women were inspected by potential buyers. A bared breast was also, however, a motif frequently used in allegories. Elisabeth-Louise Vigée Le Brun, for example, had incorporated a bare breast in her painting Peace Bringing Back Abundance to evoke the generous riches that are the product of political concord. Other viewers, therefore, might have seen Benoist's figure as an allegory, especially as her costume included the blue, white, and red colors of the tricoleur flag that had been adopted by the French Revolutionary Government in 1789.
Élisabeth Louise Vigée Le Brun, Peace Bringing Back Abundance, 1780, oil on canvas, 103 x 133 cm (The Metropolitan Museum of Art)
Who was the sitter?
Benoist did not provide her sitter's name, but it was customary to protect sitters' privacy by using titles such as "Portrait of a Lady" when exhibiting works at the Salon. In this case we know something of the woman's status and background, if not her identity. Prior to the Revolution, slavery was not authorized on the French mainland. As early as the fourteenth century, King Louis X had decreed that "France signifies freedom" and that slaves setting foot on French soil should be freed. For this reason, when Thomas Jefferson was appointed ambassador to France from the new United States of America, the two slaves he brought with him—Sarah or "Sally" and James Hemings—were legally free while on French soil. Jefferson paid them a wage during their years in Paris, and when he prepared to return home, they renegotiated their status. Happily, recent scholarship has provided the sitter's first name, Madeleine.
Official decree of 1794, which abolished slavery in the French colonies, from La Révolution française et l'abolition de l'esclavage, vol. 12, p. 55 (Bibliothèque nationale de France)
In 1794, the radical revolutionary government led by the Jacobins and Maxmilien Robespierre extended the domain of liberty by abolishing slavery in French colonies as well as the mainland. French merchants would continue to profit from the slave trade, however, and monarchists in some French territories ignored the regulation, seeking to turn their allegiance to Britain.
Madeleine is thought to have been brought to France from the island of Guadeloupe by the artist's brother-in-law, a ship's purser and civil servant. She was likely born a slave in the colony and freed by the decree of 1794, but her actual status may have been ambiguous. Whether she was brought to France as a slave or a servant, she—unlike fashionable women who commissioned their portraits—would have had little influence on how Benoist represented her.
Who was the artist?
We know a good deal more about the artist than the sitter. Marie-Guillemine Laville-Leroulx (Benoist was her married name) was born into a middle-class family. Her father was a civil servant who had failed in business. He believed firmly that his two daughters should be educated to earn their own way—an unusual attitude in the eighteenth century. Marie-Guillemine and her sister first studied painting with Vigée Le Brun and later were among three women whom David took into his studio in the Louvre, challenging concerns about propriety raised by the government minister in charge of the palace.
Laville-Leroulx made her debut at the Salon of 1791, when the revolutionary government opened the exhibition to all artists for the first time. She was ambitious, exhibiting history paintings, which were widely considered beyond women's capacities. She listed herself as a student of David, even though the artist was a firm supporter of the Revolution, while her family remained loyal to the king. Two years later, she married Pierre Vincent Benoist, who was, like her family, a monarchist. During the Reign of Terror the couple's life was difficult. By 1800, however, Napoleon I had staged a coup d'etat and installed himself as First Consul of the Directory. With the change in government, Mme Benoist, as she was now known, was ready to take up her public career as an artist.
A politically-charged subject
Anne-Louis Girodet de Roussy-Trioson, Portrait of Citizen Jean-Baptiste Belley, Ex-Representative of the Colonies, 1797, oil on canvas, 159 x 113 cm (Palace of Versailles)
In choosing to paint a woman of color, Benoist selected an unusual subject for a portrait and engaged a politically contentious issue. The only other likeness of an African to be exhibited at the Salon during these years was Anne-Louis Girodet's Portrait of Citizen Jean-Baptiste Belley, Ex-Representative of the Colonies. Girodet, like Benoist, was a student of David. Belley, who was born in Senegal and enslaved in the French colony of Saint-Domingue, had been freed because of his military service in the French army and was elected one of the colony's three representatives to the French revolutionary government. Serving from 1793 to 1797, he became well-known as an advocate for racial equality. Girodet's painting, which juxtaposes Belley's head with a marble bust of the abolitionist philosopher Guillaume-Thomas Raynal, was understood by visitors to the Salon in 1798 as an argument for emancipation.
Two years later, however, Napoleon I was consolidating his power and began to lay the groundwork for reviving the institution of slavery. He recognized that the Revolutionary government's decision to free slaves in French territories had not only antagonized citizens of these colonies and other nations, but also had jeopardized the immense profits from the cultivation of sugar that were important to France's economy. His move was contentious, but it was supported by many who had a vested interest in the economics of slavery, including Benoist's husband.
Marie-Guillemine Benoist, Portrait of Pauline Bonaparte, Princess Borghese, 1808, oil on canvas, 200 x 142 cm (Musée national du Château de Fontainebleau)
The Salon critic who in 1800 dubbed Benoist's painting a "black stain" was surely influenced by arguments in favor of reinstating slavery. Twenty-first century viewers are more likely to sympathize with the situation of the woman who sat for Benoist. What was Benoist's purpose in exhibiting Portrait of Madeleine? In conveying the beauty and humanity of her sitter, was she suggesting that this anonymous woman and others of African descent should be free citizens of the French nation? Or was she simply trying to promote her considerable skills as a portraitist in the tradition of David and Girodet? Since Benoist left no statement to explain her work, we can only infer her intentions on the basis of the painting itself and the historical circumstances surrounding its creation.
In 1802 Napoleon reinstated slavery in France's overseas colonies. Benoist went on to receive commissions for portraits from Napoleon and several members of his family. After Napoleon was defeated, her husband was awarded an important post in the Restoration government of King Louis XVIII. Marie-Guillemine Laville-Leroulx Benoist—much to her dismay—was forced to relinquish her painting career, which was considered inappropriate for a woman of her position in the increasingly conservative political climate.
This work at the Musée du Louvre
Essay on 18th-century women painters in France from The Metropolitan Museum of Art's Heilbrunn Timeline of Art History
Mechthild Fend, "Marie-Guillemine Benoist's Portrait d'une Négresse and the visibility of skin colour," in Probing the Skin: Cultural Representations of Our Contact Zone, edited by Caroline Rosenthal and Dirk Vanderbeke (Newcastle upon Tyne, Cambridge Scholars Publishing, 2015).
Mechthild Fend, Fleshing Out Surfaces: Skin in French Art and Medicine, 1650-1850 (Manchester : Manchester University Press, 2017).
Darcy Grimaldo Grigsby, Extremities: Painting Empire in Post-Revolutionary France (London: Yale University Press, 2002).
Janell Hobson, "Portraits of Black Womanhood," in Black Perspectives, AAIHS, December 14, 2017.
Margaret A.Oppenheimer, "Three Newly Identified Paintings by Marie-Guillemine Benoist," Metropolitan Museum Journal 31 (1996), pp. 143-50.
Griselda Pollock, Differencing the Canon: Feminine Desire and the Writing of Art's Histories (NY: Routledge, 1999).
Viktoria Schmidt-Linsenho, "Who is the subject? Marie-Guilhemine Benoist's Portrait d'une négresse," in Slave Portraiture in the Atlantic World, edited by Agnes Lugo-Ortiz and Angela Rosenthal (Cambridge: Cambridge University Press, 2013).
James Smalls, "Slavery is a woman: "Race," Gender, and Visuality in Marie Benoist's Portrait d'une Negresse (1800)," Nineteenth-Century Art Worldwide 3 (Spring 2004).
Helen Weston, "The Cook, the Thief, his Wife and her Lover: La Ville-Leroulx's Portrait de Négresse and the signs of Misrecognition," in Work and the Image I, edited by Valerie Mainz and Griselda Pollock (Aldershot, England: Ashgate, 2000).
Cite this page as: Dr. Susan Waller, "Marie-Guillemine Benoist, Portrait of Madeleine," in Smarthistory, September 26, 2018, accessed January 18, 2021, https://smarthistory.org/benoist-portrait/.


We've been building quality homes in Georgia and Tennessee since 1988 and still going strong.
Aztec framing was founded by our president Juan Perez. On 1988 Since that lime we become one of the most notable contractors in Atlanta and Tennessee. Our houses are built with pride and workmanship.


These refinements send crucial messages to your workmates—during holiday-bonus season, no less. "The details convey whether you're the kind of guy who follows the crowd or blazes his own trail," says Eric Wind, a collector and writer for Hodinkee, an online watch magazine.
Pick the side you'd rather be on—and the amount you're willing to plunk down—and check our ratings to start making every second count.
The brand's Portuguese Chronograph Classic Laureus Edition watch is stylish and elegant, and features scratch-resistant sapphire face and a stainless steel case, so you'll have it for years to come.
With a band made from Alligator leather and a stainless steel case, the Luminor Marina watch ensures you'll be noticed wherever you go.
Stand out with the Transocean Chronograph Edition watch, one of only 1,915 ever made. It contains 33 different types of jewels, a Mercury silver dial, and is even water-resistant up to 100 meters.
If there's one word to describe the Big Bang Aero Bang Depeche Mode Steel, it's "bold." Made in Switzerland, which has a history of producing some of the most luxurious watches, it features scratch-resistant sapphire crystal and is water-resistant up to 100 meters, so you won't have to worry about a thing wherever you go.
Raymond Weil's Freelancer blends in with anything and everything you have in your wardrobe. The best part? You can see every mechanism doing its job with its visible balance wheel.
The Engineer Hydrocarbon NEDU watch is made of titanium, is waterproof up to 600 meters, and shows the day, date, hour, minute, small second, and chronograph. Is there anything this watch can't handle?
We're willing to bet you've never seen anything like this ChronoRacer ChronoScope DLC watch. Ernst Benz prides itself on the accuracy and durability of its products, and that's exactly what you'll get here. It features a handmade leather strap, a sapphire glass dial window, and anti-reflective treatment. Not to mention, it's water-resistant up to 50 meters.
Elegance is the name of the game with this Railroad Small Second watch. Made with black leather and stainless steel, its minimalist style is perfect for every man.
With night vision tubes, up to 200 meters of water resistance, and a stainless steel case, you really could take this SXC Steel GMT Space to outer space.
Add a pop of color to your outfit with this burgundy Origin watch. Its design is classic, clean, and simple—everything you'd want from a watch and more.
Not too conservative or wild, this Heritage Ranger watch strikes the perfect balance. It features a self-winding automatic movement and is also water-resistant up to 150 meters.
This Masterpiece Gravity watch looks pretty damn cool if you ask us. It's even got 35 types of jewels. You'll think every other watch is boring in comparison.
If you've ever wanted to know the time in another city, the Ghost Watch can tell you that and more. It's face simultaneously shows the time in 20 selected cities with an activated LCD screen. It's also made with stainless steel, rubberized carbon fiber, and aluminum, so it's not going anywhere anytime soon.
This Seiko watch is solar-powered, water-resistant up to 50 meters—so it's fine to shower or go for a swim with—and seriously classy looking. But that's not to say it isn't great for everyday use. Wear it to the office, dinner out, or your nephew's fifth birthday party—it fits any occasion.
Reminiscent of military watches from the 20th century, this Pilot 4001 has character. Once you put it on, you won't want to take it off ever again.
It should go without saying that if the Swiss Army stands behind a watch, it's probably a pretty good one. This Chrono Classic Two-Tone one is no different. It features anti-reflective sapphire and a Swiss quartz movement among many other things.
This contemporary looking watch has a stainless steel case, a leather strap, and is also Swiss quartz battery-powered. Based on looks alone, you won't be able to go anywhere without someone asking about it.
One of the most popular of the brand's watches, the Lader watch is plated in 18-karat gold and features a classic strap made of Italian leather. It's simple yet elegant, so you can dress it up or down.
The Runwell watch features the perfect color combination of a dark leather strap with a deep red face. It features a sub-second hand, anti-reflective sapphire, and a stainless steel case.
Celebrate the 2014 World Cup all over again with the Quickster Football, a watch created in honor of the sporting event. It even features three sub-dials displaying a 60-second, 60-minute, and match phase counter, which is used to time the phases of a soccer match. How's that for authentic?
No two colors go better together than cream-white and brown. The Intelligent Quartz Fly-Back Chronograph watch features two time zones, a watch dial that lights up when it gets dark, and a face that resembles the likes of a speedometer rather than a regular watch.
The crocodile-embossed leather strap and rose gold face gives this watch a look that rivals no other. It features a Japanese quartz movement with analog display, and is water-resistant up to 50 meters.
The Avion watch is inspired by the classic era of the 1950s. It's made of stainless steel and has a bold, black dial with three chronograph functions and a date display. It's a timeless piece that will never go out of style.
Thanks to its display, you can see exactly how this Kenneth Cole Automatic watch works. It's even self-winding with the motion of your arm. That's pretty sweet.
The Sentry SS features three hand for hours, minutes, and seconds, and a day and date window. It's comfortable, durable, and stylish to boot.


text:
Film & History: An Interdisciplinary Journal of Film and Television Studies
A Note on Emile de Antonio: Historical Documentarist
Terence Ripmaster
Center for the Study of Film and History
United States' allies," An Historical and Descriptive Analysis ofthe Why We Fight Series: With a New Introduction (New York: Arno Press, 1977), p. 14. 7 It is interesting to note that throughout the war Hollywood completely ignored Great Britain's colonial possessions. 8 Crowther "Passage to Marseilles,"p. 12. 9 Roy Kinnard and R. J. Viton, The American Films ofMichael Curtiz (Metuchen, NJ: Scarecrow Press, 1986), p. 88. 10Crowdler, "Passage to Marseilles,"p. 12. 1 1 Roy Kinnard and R. J. Viton, The American Films ofMichael Curtiz, p. 87. 12This scene was controversial and offended the Office of War Information because the killing ofunarmed soldiers was essentially undemocratic. Due to public and governmental pressure the scene was eventually deleted from the export version ofthe film, Koppes and Black, Hollywood Goes to War, p. 295. A Note on Emile de Antonio: Historical Documentarist Terence Ripmaster Terence Ripmaster ¿s Professor ofHistoiy at William Paterson College. Emile de Antonio died on December 15, 1989. He once said, "The documentary film artist lives in opposition.... My films come from the life and times of my country." Speaking about his satiric documentary on Richard Nixon, Mulhouse: A White Comedy (1971), Vincent Canby wrote, "de Antonio has no special interest in balanced reportage.... By this I don't mean to say that it's not true but rather than it shares with fiction the kind of truth that is greater than the sum of its factual parts." (New York Times, September 29, 1971) All of de Antonio's films are based on his clearly stated radical political philosophy. "We live in a police state," he charged. He referred to PBS as the Petroleum Broadcasting System and called the network "cringing, servile and bootlicking." This is not exactly the thinking and the language that wins academic and critical support for one's work. However, in many ways, it was his outspoken partisan stance that gave his films credibility. For example, Mulhouse is decidedly unbalanced; it is intended to be so. De Antonio's showing of Nixon as "tricky" Dick, of Watergate, and a host of Nixon's "dirty tricks" serves unquestionably to substantiate de Antonio's critical assessment of the man. If only one of de Antonio's films remained for future generations to evaluate, they might not judge it to be as one-sided as did his contemporary critics. De Antonio told this author that he regarded Mulhouse as his best film. In the Year of the Pig (3969) is an assemblage of news footage and interviews which presents viewpoints from Hanoi and the National Liberation Front, and which features a Russian reenactment of the battle of Dien Bien Phu. Pauline Kael wrote that In 31 the Year ofthe Pig was a "strong film that does what American television has failed to do." (New Yorker, November 15, 1969). By the time this film appeared, television journalists had had plenty of time to assemble and present some information on the "enemy" position in what was, after all, an undeclared war. While de Antonio's very partisan documentary clearly presents his personal view, it remains one of the fullest treatments of Washington's "official" justification for the war. Of course, it also predicts America's defeat in Viet Nam. De Antonio liked to remind us that Alistaire Cooke received awards for fatuously telling us what we were looking at. When criticized for the bias in his films, de Antonio insisted that documentary films had the right and duty to offset the conservative-corporate accounts that dominated post World War II American journalism. In 1964 every established newspaper and television journalist leaped to applaud the conclusions of the Warren Commission on President Kennedy's assassination. De Antonio produced Rush to Judgment. The documentary features Mark Lane, author of the book by the same title, interviewing witnesses who saw or thought they saw more than one assassin. At the time of the release of de Antonio's Rush to Judgment, critics giggled in their hands. Since that time two federal studies, the Church Senate Committee on Assassinations and the United States House of Representatives Select Committee disclosed that evidence did indeed point to a conspiracy in Dallas and to more...
Access options available:

redpajama_set_name: RedPajamaCommonCrawl


Lowe's has a proud history of supporting the communities we serve, and we are dedicated to continuing that philanthropy. After more than 70 years of developing extraordinary partnerships, we have revised our grant process to proactively identify projects by invitation only, leveraging those partnerships.
Lowe's has revised our grant process and no longer has an open application process. As we strive to support our markets as strategically as possible, we are proactively identifying projects leveraging our current partnerships.
If my organization has worked with Lowe's in the past, are we eligible for grant consideration?
Lowe's Community Relations team will reach out to the organizations with whom we are focusing our strategic philanthropy.
When will Lowe's reopen its grant application process?
We will update any changes to our grant application process on this website or via formal communication to existing partners with whom we are focusing our strategic philanthropy.
For more information on Lowe's community relations work, please visit Lowe's Open House, where you can also find Lowe's Corporate Social Responsibility reports. Please direct any questions to community@lowes.com.


An Overview of Best Drive Belts & Chains Products for Toy Shopping Guide and Buying Drive Belts & Chains (Hobbies) Online at wujus.com with low price.
Featured: Compatible With Almost All Dji Series Remote Controller: Dji Phantom 2-vision-vision+, Phantom 3 (professional / Advanced / Standard / 4k), Phantom 4, Inspire 1, Matrice M100.
Featured: This Lanyard Can Be Also Used On Other Brand Drone's Remote Controller With A Lanyard Hole Such As Xiaomi, Xiro, Yuneec.
Barbie dpy39 rainbow cove princess castle playset (mattel) enter the rainbow cove the barbie rainbow castle. three colorful floors highlight the rain..
Contemporary Chef Kitchen Junior Chefs Will Love To Pretend Play In The Contemporary Chef Kitchen By Step2. This Kids Play Kitchen Keep The Look And F..
O ball tubmarine bath the world loves oball and now oball is helping you get a grip on bath time like never before! it's time to take a deep dive into..
Melissa Doug Fridge Food Wooden (Melissa Doug) Unpack These "chilled" Wooden Groceries Into Your Play Fridge And Freezer For Delicious Food Play. Perf..
Gybber Mumu Wooden Preschool Puzzle (Gybber Mumu) It Is Very Sturdy And The Designs Are Painted On Which Is Good. Each Piece Is Well Shaped And Easy E..
Lego Dimensions Starter Pack Playstation 4 (Warner Home Video Games) When A Mysterious And Powerful Vortex Suddenly Appears In Various Lego Worlds, Di..


text:
Udghosh is the Annual Sports Festival of Indian Institute of Technology Kanpur. Started in 2002, it has now evolved into one of the largest college sports festivals held in Asia. With notable sportspersons, brand ambassadors and participants from across the country, this three-day-long festival has garnered substantial media attention over the years. As many as 450 colleges and 40 government organizations actively participate and support this ceremonious event. It not only features sports competitions but also talk shows, music performances, DJs and other fun-filled activities.

History

The 2017 edition was one of its kind, had registered great events and even greater personalities, such as an inspiring talk by Abhinav Bindra. Also had participation from  Gaurav Taneja and sports personalities such as Nuzhat Parween.

The 2018 edition of udghosh saw various mind-boggling performances, including standups by Nishant Tanwar and Aakash Gupta.

The 2021 edition witnessed some great events and inspiring talks by even greater personalities such as Avadh Ojha, Prakash Padukone, Kiran Bedi, Sangeeta Sindhi Bahl,  Sharad Kumar.

Notable events
Udghosh, in its true sense, is an exhibition of sporting fervour, and success in the meet has been ratified by the success of many of its winners higher up in the sporting hierarchy. It offers a common platform for the students of the top educational institutions from all over to exhibit their skills. The Fest has witnessed some nonpareil speakers like Prakash Padukone, Medha Patkar, Dr Kiran Bedi, Sangeeta Sindhi Bahl, and sports stars such as Ashwini Ponnappa,  Sharad Kumar, Sardar Singh. Udghosh umbrellas various events including sports competitions, talks with eminent celebrities, musical nights, standup events, dance performances and renowned pronite.
The sports events encompass competitions of various sports - badminton, athletics, basketball, cricket, football, hockey, tennis, kabaddi, squash, table tennis, powerlifting, volleyball, and weight-lifting. The fest also has cultural events of performances from comedians, artists, and celebrated bands like AIP and The Local Train.

References

Indian Institutes of Technology festivals
Culfests
IIT Kanpur
2002 establishments in Uttar Pradesh
Festivals established in 2002

redpajama_set_name: RedPajamaWikipedia


From the Saks IT LIST SUIT YOURSELF The new suit: equal parts precision tailoring and feminine fit. Elongating high-waist pants in flared silhouette Zip fly with concealed closure Side slash pockets Back welt pockets Lined Polyester Dry clean Made in USA of imported fabric SIZE & FIT Rise, about 10" Inseam, about 32" Model shown is 5'10" (177cm) wearing US size 4. Contemporary Sp - Alice + Olivia. Alice + Olivia. Color: Rose Tan. Size: 0.


text:
Q: How does a Gaussian Process define a probability distribution in the functions space? I am studying Gaussian Process Regression. I will post a text from the book Gaussian Process for Machine Learning, by C. E. Rasmussen & C. K. I. Williams:
We first consider a simple 1-d regression problem, mapping from an input x to an output f (x). In Figure 1.1 (a) we show a number of sample functions drawn at random from the prior distribution over functions specified by a particular Gaussian process which favors smooth functions. This prior is taken to represent our prior beliefs over the kinds of functions we expect to observe, before seeing any data.
The definition of a Gaussian process that I know of is given by:
Definition (Gaussian process) A random process $\left(X_{t}\right)_{t \in T}$ is called a Gaussian process if, for any finite subset $T_{0} \subset T,$ the random vector
$$
\left(X_{t}\right)_{t \in T_{0}}
$$
has normal distribution. Equivalently, $\left(X_{t}\right)_{t \in T}$ is Gaussian if every finite linear combination
$$
\sum_{t \in T_{0}} a_{t} X_{t}
$$
is a normal random variable.
I would like to better understand the connection of this definition with the possibility of defining a distribution in the functions space, because to draw functions according to a distribution, I would have to define sigma algebras in the function space and a measure of probability in this sigma algebra. Or perhaps there is another meaning when we say "sample functions drawn at random from the prior distribution over functions specified by a particular Gaussian process".
Does anyone help to build this bridge?

redpajama_set_name: RedPajamaStackExchange


text:
Immunization Issues
Thimerosal in Influenza Vaccines
Although thimerosal—a mercury-containing preservative—continues to be used as a preservative throughout the world1, in 1999 policy makers in the United States decided to reduce the exposure of infants less than 6 months of age to all forms of mercury, recommending that thimerosal in vaccines to be given to infants under 6 months of age be reduced to only trace amounts or be eliminated altogether. (See Mercury in Vaccines)
All vaccines recommended for universal immunization of infants less than 6 months of age in the United States are now manufactured without thimerosal as a preservative. Some vaccines may contain trace amounts of thimerosal from the manufacturing process.2
Trivalent inactivated influenza vaccine (TIV) has been recommended for all children 6 months to five years of age, in addition to the long-standing recommendations to give TIV to children and adults with certain medical conditions as well as older adults.3
Until recently, thimerosal-free TIV was not available in the United States (it was.available both with trace amounts of thimerosal and with thimerosal as a preservative). Without thimerosal as a preservative, the vaccine cannot be packaged in multiple dose vials, making delivery of vaccine to large numbers of people—as is often done with TIV—more difficult and making the vaccine more expensive. Packaging vaccine in single dose containers also takes more vaccine and thus may reduce the availability of vaccine for others.
In September, 2007, the FDA approved a new influenza vaccine for persons 18 years of age and older, available in single-dose, thimerosal-free syringes. It is still not known when this new vaccine will be widely available to the public.
Public health authorities have not expressed a preference for which formulation healthcare providers should use because:
there continues to be no scientific evidence that thimerosal as a preservative causes harm
the amount of mercury contained in TIV with preservative is within the range that is considered safe
TIV is not recommended for children less than 6 months of age.
Parents who would prefer that their child receive TIV without preservative can choose to have their child receive the vaccine that contains only trace amounts.
However, the amount of thimerosal in current inactivated influenza vaccines is so low that it should not raise concern. The issues in 1999 regarding thimerosal in childhood vaccines was for infants in the first 6 months of life and reflected uncertainty about the possible cumulative total ethyl mercury burden from all the thimerosal-containing products administered at newborn, 2, 4 and 6 months of age.
Legislation to prohibit use of TIV containing thimerosal in children and others—as has been enacted in some states—could compromise the availability of TIV for those people, particularly during time of vaccine shortage. In addition, the cost differences for the preservative-free vaccine could create disparities between insured and underinsured children receiving the vaccine.
The demonstrated benefits of influenza immunization far outweigh any theoretical risk from thimerosal exposure associated with full implementation of current US influenza vaccine recommendations.3
1. WHO (2003). Statement on thiomersal from the Global Advisory Committee on Vaccine Safety (GACVS).
2. FDA (2004). Thimerosal Content in Currently Manufactured U.S. Licensed Vaccines.
3. a. b. CDC (2004). Prevention and Control of Influenza: Recommendations of the Advisory Committee on Immunization Practices (ACIP). MMWR May 28, 2004 / 53(RR06);1-40.
Exposure Parties (3)
Immunization Policy (8)
IOM Reports (6)
Thimerosal-Mercury (4)
Vaccine Components (2)
Vaccine Safety (12)
Mercury in Vaccines
Thimerosal in Vaccines and Neurodevelopmental Outcomes
Vaccines and Autism, 2009


text:
Tlenek cyny (), SnO – nieorganiczny związek chemiczny z grupy tlenków amfoterycznych, w którym cyna występuje na II stopniu utlenienia. Występuje w dwóch formach – stabilnej o kolorze czarnogranatowej i czerwonej metastabilnej.

Tlenek cyny ma właściwości amfoteryczne − reaguje z silnymi kwasami dając sole cyny(II) oraz z silnymi zasadami tworząc anion .

W temperaturze powyżej 300 °C ulega dysproporcjonowaniu na ditlenek cyny i metaliczną cynę.

Przypisy

Bibliografia

Cyny, tlenek
Związki cyny


Republican House Represenative Justin Amash has announced that he is not "ruling out" a bid for the Libertarian Party in 2020. "I would never rule anything out," he said. However, he states that it is "not on his radar." at the moment. This quote surfaced as he was speaking about the border wall funding issue. He believes that Trump's emergency order for the wall is an unconstitutional measure. He also believes it could be further pervert the Constitution in the future.
The Libertarian Party of Ontario has seen impressive growth over the past several years. I had the pleasure of interviewing new party leader Rob Ferguson to find out the party's plan on how to improve, sustain and grow.
The party only fielded 5 libertarians in the 2003 election. This year, however, 117 candidates ran for office. This growth is immense and is the key to making a fringe party move towards legitimacy. In the 2011 race, the libertarians fielded 51 candidates out of a possible 107 and garnered 0.45% of the popular vote. But in 2014, improvements continued as the libertarians ran 74 out of a possible 107 and scored 0.81% of the vote.
With recent riding expansion, the 2018 election map for Ontario now has 124 districts. The Ontario libertarians were able to field 117 candidates (94.3%): almost a full slate. Even though the party only got 0.75% of the popular vote, they nonetheless picked up a record high of 42,918 voters across the province. The libertarians have now placed fifth in each of the last three provincial elections in Ontario. With the number of candidates that they ran last time, they are now a significant minor party in Ontario politics. I had the privilege of interviewing former deputy leader and now current leader of the Ontario Libertarian Party, Rob Ferguson.
Dubé: So, you've been a part of several political parties in the past, NDP, Family Coalition and now the Libertarians. can you go through how your experiences were with each party and how you came to the realization that the Libertarians are the best party for you?
Ferguson: I grew up in a conservative family and often helped to campaign as a youth for candidates in my hometown of Brantford. I can even remember our families home was turned into a campaign HQ on some occasions. As I grew up I decided to become a member of the New Democratic Party of Ontario. My stint with the party lasted less than a year after I realized my views didn't fully align with the party. I found myself then exploring the Family Coalition Party of Ontario. I had always been about family values and the party initially seemed to align well with my views. During my time with the party I worked to train candidates, I even ran for office in the 2007 provincial election.
During the time leading up to the provincial election in 2011, I found that my views didn't fully align with the party and following some disappointing circumstances I left the party and just hours later found myself in contact with some executive members of the Ontario Libertarian Party. I ended up coordinating and training 12 candidates in the 2011 provincial race, and I ran myself as well. I have always been about family values and the party's positions on individual liberties, property rights and personal responsibility fit me perfectly. I felt at home with the party, I came to the realization that yeah, this was the party for me.
Dubé: How would you define libertarianism and who are some of your biggest political influences?
Dubé: As the new leader of the Ontario Libertarian Party, how have you helped to ease the transition out of the Allen Small era? Also, how closely did you work with Allen Small during his time as party leader?
Ferguson: Allen Small did a ton for this party as its leader, and he has left us in a very good place going forward. I definitely worked as close as I could with Allen during his time as leader and we spoke with each other very often, maybe even on a day to day basis. Allen did a great job as the leader; he was always on top of things and he put a ton into his job. Now that I have taken the mantle from him I think that the number one priority should be to amend our party's constitution and make it more coherent with the digital age. This would open doors to our membership and make things a lot better within the party.
Dubé: You once stated during a debate that the Liberals are about big government, the Conservatives are about big business, the NDP are about big unions and the Greens are about big trees, was this something you previously thought of before going into the debate?
Ferguson: This was something that just came to me during the debate. We were in a school for the debate and I looked to the back and saw some tree paintings on the wall and the "big tree" line hit me. Actually, this became kind of a coined thing, each debate I saw larger gatherings and people actually said they were coming out now to hear me finish with that line. It became a recurring thing, it was quite funny.
Dubé: What is your opinion on Maxime Bernier's new party and would you advise Canadian libertarians to join them or stick with Tim Moen and the Libertarian Party of Canada in 2019?
Ferguson: Well it's refreshing to see more and more liberty minded people putting their names out there are trying to bring legitimate change. I've ran many times here in Brantford and I'm seeing more and more liberty minded candidates also run here. However, I am skeptical of the party, what I say is simple, you can either join a new party that may or may not last or you can stick with a movement that's been growing for 40 years and is seeing its absolute best growth now. I welcome Bernier and his new party to the table but if he was a true Libertarian he would have got up and crossed the floor in the House of Commons. People are free to join whatever party they wish, but as for me, I'm sticking with the Libertarian Party.
Dubé: It's no secret that the Libertarian Party of Ontario has become well established over the past few election cycles. How can the party maintain and build on this growth?
Ferguson: We've seen incredible growth; over the last few elections we've seen votes go up, membership go up and candidates go up. To maintain our growth, we need to continue to aim towards running full slates. By updating our party constitution and by-laws and fixing internal policy we can help make modernize the party. A few of the ridings that we weren't able to fill candidates in were up in Northern Ontario and by targeting those areas in 2022 and continuing to run full slates we can continue to see solid growth and work towards winning seats in the next few election cycles.
Dubé: You've run for office many times. What would you say is the most effective way to connect to voters and meet people in the community?
Ferguson: It's always been tough for me because I am legally blind, so I do not drive. But I've found that attending as many events as possible and spreading the message is the best way. In the age now of social media when you spread the message to a few it can reach many so just getting out and speaking to as many people as possible is truly the way to best engage voters. Here in Brantford I think I have succeeded in that, just recently I was out at a store and an individual turned to me and said, "hey, aren't you Rob Ferguson?" and I laugh because my wife says it seems like we can't go out anymore without people coming up to me or recognizing me.
Dubé: The Ontario Libertarian Party just wrapped up its Annual General Meeting last weekend. Can you give us some insight on how things went and overall how enthused the members of the meeting were about the party going forward?
Ferguson: Overall, things went very well. We had a good turnout and nearly 70 delegates attended, which is good for our AGM's. One of the best parts about it was seeing Allen Small come through the door and I realized after a little while that there were three past party leaders present. That to me is quite special; you never just have three past party leaders attend a party's event. Usually, when you end off your time as party leader, it's the end of your career and you step back a little. However, to see that these three were still eager to help make a difference and still impact the party was something great.


Pg9 | Masked Cats' ?
I'm going to start scheduling pages that I get done earlier, so I have more time to work on future ones before the dead lines! I think I got a good schedule down with me also working on school work, my flow should be a lot more steady for now on, or at least for moment.
I think that I have done pretty good trying to make my comic look and play out how I want it to, including upcoming future pages (which are sketched out but not inked) so I have hopes that it'll continue to get better.
Thanks a lot for reading, it really means so much to find that I have yet another reader!


text:
Q: Load csv file into a VBA array rather than Excel Sheet I am currently able to enter csv file data into Excel VBA by uploading the data via the code below then handling the table, surely not the best way as I am only interested in some of the data and delete the sheet after using the data:
Sub CSV_Import()
Dim ws As Worksheet, strFile As String

Set ws = ActiveSheet 'set to current worksheet name

strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", ,"Please select text file...")

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With
End Sub

Is it possible to simply load the csv into a two dimensional variant array in VBA rather than going through the use of an excel worksheet?

A: Okay, looks like you need two things: stream the data from the file, and populate a 2-D array.
I have a 'Join2d' and a 'Split2d' function lying around (I recall posting them in another reply on StackOverflow a while ago). Do look at the comments in the code, there are things you might need to know about efficient string-handling if you're handling large files.
However, it's not a complicated function to use: just paste the code if you're in a hurry.
Streaming the file is simple BUT we're making assumptions about the file format: are the lines in the file delimited by Carriage-Return characters or the Carriage-Return-and-Linefeed character pair? I'm assuming 'CR' rather than CRLF, but you need to check that.
Another assumption about the format is that numeric data will appear as-is, and string or character data will be encapsulated in quote marks. This should be true, but often isn't... And stripping out the quote marks adds a lot of processing - lots of allocating and deallocating strings - which you really don't want to be doing in a large array. I've short-cut the obvious cell-by-cell find-and-replace, but it's still an issue on large files.
If your file has commas embedded in the string values, this code won't work: and don't try to code up a parser that picks out the encapsulated text and skips these embedded commas when splitting-up the rows of data into individual fields, because this intensive string-handling can't be optimised into a fast and reliable csv reader by VBA.
Anyway: here's the source code: watch out for line-breaks inserted by StackOverflow's textbox control:
Running the code:
Note that you'll need a reference to the Microsoft Scripting Runtime (system32\scrrun32.dll)
Private Sub test()
    Dim arrX As Variant
    arrX = ArrayFromCSVfile("MyFile.csv")
End Sub

Streaming a csv file.
Note that I'm assuming your file is in the temp folder:
 C:\Documents and Settings[$USERNAME]\Local Settings\Temp
You'll need to use filesystem commands to copy the file into a local folder: it's always quicker than working across the network.
Public Function ArrayFromCSVfile( _
    strName As String, _
    Optional RowDelimiter As String = vbCr, _
    Optional FieldDelimiter = ",", _
    Optional RemoveQuotes As Boolean = True _
) As Variant

    ' Load a file created by FileToArray into a 2-dimensional array
    ' The file name is specified by strName, and it is exected to exist
    ' in the user's temporary folder. This is a deliberate restriction:
    ' it's always faster to copy remote files to a local drive than to
    ' edit them across the network

    ' RemoveQuotes=TRUE strips out the double-quote marks (Char 34) that
    ' encapsulate strings in most csv files.

    On Error Resume Next

    Dim objFSO As Scripting.FileSystemObject
    Dim arrData As Variant
    Dim strFile As String
    Dim strTemp As String

    Set objFSO = New Scripting.FileSystemObject
    strTemp = objFSO.GetSpecialFolder(Scripting.TemporaryFolder).ShortPath
    strFile = objFSO.BuildPath(strTemp, strName)
    If Not objFSO.FileExists(strFile) Then  ' raise an error?
        Exit Function
    End If

    Application.StatusBar = "Reading the file... (" & strName & ")"

    If Not RemoveQuotes Then
        arrData = Join2d(objFSO.OpenTextFile(strFile, ForReading).ReadAll, RowDelimiter, FieldDelimiter)
        Application.StatusBar = "Reading the file... Done"
    Else
        ' we have to do some allocation here...

        strTemp = objFSO.OpenTextFile(strFile, ForReading).ReadAll
        Application.StatusBar = "Reading the file... Done"

        Application.StatusBar = "Parsing the file..."

        strTemp = Replace$(strTemp, Chr(34) & RowDelimiter, RowDelimiter)
        strTemp = Replace$(strTemp, RowDelimiter & Chr(34), RowDelimiter)
        strTemp = Replace$(strTemp, Chr(34) & FieldDelimiter, FieldDelimiter)
        strTemp = Replace$(strTemp, FieldDelimiter & Chr(34), FieldDelimiter)

        If Right$(strTemp, Len(strTemp)) = Chr(34) Then
            strTemp = Left$(strTemp, Len(strTemp) - 1)
        End If

        If Left$(strTemp, 1) = Chr(34) Then
            strTemp = Right$(strTemp, Len(strTemp) - 1)
        End If

        Application.StatusBar = "Parsing the file... Done"
        arrData = Split2d(strTemp, RowDelimiter, FieldDelimiter)
        strTemp = ""
    End If

    Application.StatusBar = False

    Set objFSO = Nothing
    ArrayFromCSVfile = arrData
    Erase arrData
End Function

Split2d
Creates a 2-dimensional VBA array from a string:
Public Function Split2d(ByRef strInput As String, _
    Optional RowDelimiter As String = vbCr, _
    Optional FieldDelimiter = vbTab, _
    Optional CoerceLowerBound As Long = 0 _
    ) As Variant

    ' Split up a string into a 2-dimensional array.

    ' Works like VBA.Strings.Split, for a 2-dimensional array.
    ' Check your lower bounds on return: never assume that any array in
    ' VBA is zero-based, even if you've set Option Base 0
    ' If in doubt, coerce the lower bounds to 0 or 1 by setting
    ' CoerceLowerBound
    ' Note that the default delimiters are those inserted into the
    '  string returned by ADODB.Recordset.GetString

    On Error Resume Next

    ' Coding note: we're not doing any string-handling in VBA.Strings -
    ' allocating, deallocating and (especially!) concatenating are SLOW.
    ' We're using the VBA Join & Split functions ONLY. The VBA Join,
    ' Split, & Replace functions are linked directly to fast (by VBA
    ' standards) functions in the native Windows code. Feel free to
    ' optimise further by declaring and using the Kernel string functions
    ' if you want to.

    ' ** THIS CODE IS IN THE PUBLIC DOMAIN **
    '    Nigel Heffernan   Excellerando.Blogspot.com

    Dim i   As Long
    Dim j   As Long

    Dim i_n As Long
    Dim j_n As Long

    Dim i_lBound As Long
    Dim i_uBound As Long
    Dim j_lBound As Long
    Dim j_uBound As Long

    Dim arrTemp1 As Variant
    Dim arrTemp2 As Variant

    arrTemp1 = Split(strInput, RowDelimiter)

    i_lBound = LBound(arrTemp1)
    i_uBound = UBound(arrTemp1)

    If VBA.LenB(arrTemp1(i_uBound)) <= 0 Then
        ' clip out empty last row: a common artifact in data
         'loaded from files with a terminating row delimiter
        i_uBound = i_uBound - 1
    End If

    i = i_lBound
    arrTemp2 = Split(arrTemp1(i), FieldDelimiter)

    j_lBound = LBound(arrTemp2)
    j_uBound = UBound(arrTemp2)

    If VBA.LenB(arrTemp2(j_uBound)) <= 0 Then
     ' ! potential error: first row with an empty last field...
        j_uBound = j_uBound - 1
    End If

    i_n = CoerceLowerBound - i_lBound
    j_n = CoerceLowerBound - j_lBound

    ReDim arrData(i_lBound + i_n To i_uBound + i_n, j_lBound + j_n To j_uBound + j_n)

    ' As we've got the first row already... populate it
    ' here, and start the main loop from lbound+1

    For j = j_lBound To j_uBound
        arrData(i_lBound + i_n, j + j_n) = arrTemp2(j)
    Next j

    For i = i_lBound + 1 To i_uBound Step 1

        arrTemp2 = Split(arrTemp1(i), FieldDelimiter)

        For j = j_lBound To j_uBound Step 1
            arrData(i + i_n, j + j_n) = arrTemp2(j)
        Next j

        Erase arrTemp2

    Next i

    Erase arrTemp1

    Application.StatusBar = False

    Split2d = arrData

End Function

Join2D
Turns a 2-dimensional VBA array to a string:
Public Function Join2d(ByRef InputArray As Variant, _
    Optional RowDelimiter As String = vbCr, _
    Optional FieldDelimiter = vbTab, _
    Optional SkipBlankRows As Boolean = False _
    ) As String

    ' Join up a 2-dimensional array into a string. Works like the standard
    '  VBA.Strings.Join, for a 2-dimensional array.
    ' Note that the default delimiters are those inserted into the string
    '  returned by ADODB.Recordset.GetString

    On Error Resume Next

    ' Coding note: we're not doing any string-handling in VBA.Strings -
    ' allocating, deallocating and (especially!) concatenating are SLOW.
    ' We're using the VBA Join & Split functions ONLY. The VBA Join,
    ' Split, & Replace functions are linked directly to fast (by VBA
    ' standards) functions in the native Windows code. Feel free to
    ' optimise further by declaring and using the Kernel string functions
    ' if you want to.

    ' ** THIS CODE IS IN THE PUBLIC DOMAIN **
    '   Nigel Heffernan   Excellerando.Blogspot.com

    Dim i As Long
    Dim j As Long

    Dim i_lBound As Long
    Dim i_uBound As Long
    Dim j_lBound As Long
    Dim j_uBound As Long

    Dim arrTemp1() As String
    Dim arrTemp2() As String

    Dim strBlankRow As String

    i_lBound = LBound(InputArray, 1)
    i_uBound = UBound(InputArray, 1)

    j_lBound = LBound(InputArray, 2)
    j_uBound = UBound(InputArray, 2)

    ReDim arrTemp1(i_lBound To i_uBound)
    ReDim arrTemp2(j_lBound To j_uBound)

    For i = i_lBound To i_uBound

        For j = j_lBound To j_uBound
            arrTemp2(j) = InputArray(i, j)
        Next j

        arrTemp1(i) = Join(arrTemp2, FieldDelimiter)

    Next i

    If SkipBlankRows Then

        If Len(FieldDelimiter) = 1 Then
            strBlankRow = String(j_uBound - j_lBound, FieldDelimiter)
        Else
            For j = j_lBound To j_uBound
                strBlankRow = strBlankRow & FieldDelimiter
            Next j
        End If

        Join2d = Replace(Join(arrTemp1, RowDelimiter), strBlankRow, RowDelimiter, "")
        i = Len(strBlankRow & RowDelimiter)

        If Left(Join2d, i) = strBlankRow & RowDelimiter Then
            Mid$(Join2d, 1, i) = ""
        End If

    Else

        Join2d = Join(arrTemp1, RowDelimiter)

    End If

    Erase arrTemp1

End Function

Share and enjoy.

A: To get a known format csv data file into a 2D array I finally adopted the following method, which seems to work well and is quite quick.
I decided that file read operations are fairly fast nowadays, so I run a first pass on the csv file to get the size required for both dimension of the array. With the array suitably dimensioned it is then a simple task to re-read the file, line by line, and populate the array.
Function ImportTestData(ByRef srcFile As String, _
                        ByRef dataArr As Variant) _
                        As Boolean

Dim FSO As FileSystemObject, Fo As TextStream
Dim line As String, Arr As Variant
Dim lc As Long, cc As Long
Dim i As Long, j As Long

ImportTestData = False
Set FSO = CreateObject("Scripting.FilesystemObject")
Set Fo = FSO.OpenTextFile(srcFile)

' First pass; read the file to get array size
lc = 0 ' Counter for number of lines in the file
cc = 0 ' Counter for number of columns in the file
While Not Fo.AtEndOfStream  ' Read the csv file line by line
    line = Fo.ReadLine
    If lc = 0 Then ' Count commas to get array's 2nd dim index
        cc = 1 + Len(line) - Len(Replace(line, ",", ""))
    End If
    lc = lc + 1
Wend
Fo.Close

' Set array dimensions to accept file contents
ReDim dataArr(0 To lc - 1, 0 To cc - 1)
'Debug.Print "CSV has "; n; " rows with "; lc; " fields/row"
If lc > 1 And cc > 1 Then
    ImportTestData = True
End If

' Second pass; Re-open data file and copy to array
Set Fo = FSO.OpenTextFile(srcFile)
lc = 0
While Not Fo.AtEndOfStream
    line = Fo.ReadLine
    Arr = Split(line, ",")
    For i = 0 To UBound(Arr)
        dataArr(lc, i) = Arr(i)
    Next i
    lc = lc + 1
Wend

End Function   'ImportTestData()

I created this as a Function rather than a Sub to get a simple return value, if required.
Reading a file with 8,500 rows of 20 columns takes approximately 180ms.
This method assumes that the structure (number of delimiters) of the CSV file is the same for every row, typical of a data logging application.

A: Yes read it as a text file.
See this example
Option Explicit

Sub Sample()
    Dim MyData As String, strData() As String

    Open "C:\MyFile.CSV" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)
End Sub

FOLLOWUP
Like I mentioned below in the comments, AFAIK, there is no direct way of filling a 2d Array from a csv. You will have to use the code that I gave above and then split it per line and finally filling up a 2D array which can be cumbersome. Filling up a column is easy but if you specifically want say from Row 5 to Col 7 Data then it becomes cumbersome as you will have to check if there are sufficient columns/rows in the data. Here is a basic example to get Col B in a 2D Array.
NOTE: I have not done any error handling. I am sure you can take care of that.
Let's say our CSV File looks likes this.

When you run this code
Option Explicit

Const Delim As String = ","

Sub Sample()
    Dim MyData As String, strData() As String, TmpAr() As String
    Dim TwoDArray() As String
    Dim i As Long, n As Long

    Open "C:\Users\Siddharth Rout\Desktop\Sample.CSV" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    n = 0

    For i = LBound(strData) To UBound(strData)
        If Len(Trim(strData(i))) <> 0 Then
            TmpAr = Split(strData(i), Delim)
            n = n + 1
            ReDim Preserve TwoDArray(1, 1 To n)
            '~~> TmpAr(1) : 1 for Col B, 0 would be A
            TwoDArray(1, n) = TmpAr(1)
        End If
    Next i

    For i = 1 To n
        Debug.Print TwoDArray(1, i)
    Next i
End Sub

You will get the output as shown below

BTW, I am curious that since you are doing this in Excel, why not use inbuilt Workbooks.Open or QueryTables method and then read the range into a 2D array? That would be much simpler...

A: OK, after looking into this, the solution I have arived at is to use ADODB (requires reference to ActiveX Data Objects, this loads the csv file into array without cycling the rows columns. Does require the data to be in good condition.
Sub LoadCSVtoArray()

strPath = ThisWorkbook.Path & "\"

Set cn = CreateObject("ADODB.Connection")
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
cn.Open strcon
strSQL = "SELECT * FROM SAMPLE.csv;"

Dim rs As Recordset
Dim rsARR() As Variant

Set rs = cn.Execute(strSQL)
rsARR = WorksheetFunction.Transpose(rs.GetRows)
rs.Close
Set cn = Nothing

[a1].Resize(UBound(rsARR), UBound(Application.Transpose(rsARR))) = rsARR

End Sub

A: Alternatively you can use a code like this
Dim line As String, Arr
Dim FSO As Object, Fo As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fo = FSO.OpenTextFile("csvfile.csv")
While Not Fo.AtEndOfStream
 line = Fo.ReadLine      ' Read the csv file line by line
 Arr = Split(line, ",")  ' The csv line is loaded into the Arr as an array
 For i = 0 To UBound(Arr) - 1: Debug.Print Arr(i) & " ";: Next
 Debug.Print
Wend

 01/01/2019 1 1 1 36 55.6 0.8 85.3 95 95 109 102 97 6 2.5 2.5 3.9
 01/01/2019 1 2 0 24 0.0 2.5 72.1 89 0 0 97 95 10 6.7 4.9 3.9
 01/01/2019 1 3 1 36 26.3 4 80.6 92 92 101 97 97 8 5.5 5.3 3.7
 01/01/2019 1 4 0 16 30.0 8 79.2 75 74 87 87 86 10 3.8 4 4.2

A: The following solution does not use ActiveX:
I wrote code to import a csv (actually tab-separated) file into an array. That code is the following.
First let's designate the array (initially it is completely void but it will be resized appropriately later):
Dim TxtFile$()

Now for the sub-procedure:
' Fills TxtFile$() array
Sub FillTextFileArray(A$)

'***********************************************************************
' Declarations
'***********************************************************************
Dim I, J As Integer
Dim LineString As String
'***********************************************************************

I = -1: J = 0    ' Will hold array dimentions

Open A$ For Input As #1

Do While Not EOF(1)    ' Loop until end of file.
    Line Input #1, LineString
    LineString = LineString + vbTab    ' If not done empty lines give error with Split()
    I = I + 1
    If J < UBound(Split(LineString, vbTab)) Then J = UBound(Split(LineString, vbTab))
Loop

ReDim TxtFile$(1 To I + 4, 1 To J + 4)    ' Not indexed from 0 ! (Plus some room at the end.) This is done to match worksheet format.
Seek #1, 1    ' Reset to start

I = -1    ' Will hold array row index
Do While Not EOF(1)    ' Loop until end of file.
    Line Input #1, LineString
    LineString = LineString + vbTab    ' If not done empty lines give error with Split()
    I = I + 1
    For J = 0 To UBound(Split(LineString, vbTab))
        TxtFile$(I + 1, J + 1) = Split(LineString, vbTab)(J)
    Next J
Loop

Close #1    ' Close file.

' TxtFile$() now holds the contents of the text file

End Sub

Obviously you can then do what you want with the TxtFile$ array. A$ is the location and name of the text file. As already said, this particular code works with tab-delimited files (vbTab), not comma-delimited (separated), but any adaptation should not be too difficult. It has the advantage of avoiding ActiveX complications.

A: These days, GitHub hosts at least three CSV parsers that do exactly what the OP asked for - load a CSV file into a VBA array.
I'm the author of this one:
https://github.com/PGS62/VBA-CSV
It handles a broad variety of CSV files, including those with "embedded" commas, line-feeds etc, and those with a varying number of fields per row. I provide links to alternative VBA CSV parsers in the README file.


Ab initio calculations using the equation-of-motion coupled cluster method have been carried out to investigate 19F–19F spin–spin coupling constants for a pair of HF molecules. The overall features of the JF–F coupling surface with respect to the F–F distance and the orientation of the pair of HF molecules reflect those of the Fermi-contact (FC) surface, although the FC term may not be a good quantitative estimate of JF–F. The hydrogen-bonded HF dimer exhibits unusual behavior compared to other hydrogen-bonded complexes, since both the FC term and 2hJF–F exhibit variations in sign and magnitude as the F–F distance changes and the linearity of the hydrogen bond is destroyed. The FC term for F–F coupling is relative small and negative for the equilibrium dimer. At the dimer F–F distance, the maximum negative value for the FC term is found for the linear arrangement F–H⋯H–F, while the maximum positive value is found for the linear H–F⋯F–H arrangement, despite the fact that neither of these structures is bound. Changes in the sign and magnitude of the FC term are analyzed using the nuclear magnetic resonance triplet wave function model, which relates the orientation of magnetic nuclei to the phases of the wave functions for excited triplet states that couple to the ground state. The FC term for a particular orientation is a result of competing positive and negative contributions from different triplet states, the sign of each contribution being determined by the alignment of the nuclear magnetic moments in that state. Factors are identified which must play a role in determining which types of wave functions dominate.


text:
"""
tests.test_main
~~~~~~~~~~~~~~~

Provides unit tests for the website.
"""

import nose.tools as nt
import logging
import sys
import pygogo as gogo

from io import StringIO
from json import loads
from . import BaseTest

module_logger = gogo.Gogo(__name__).logger
nt.assert_equal_ellipsis = BaseTest().assertEqualEllipsis
nt.assert_is_subset = BaseTest().assertIsSubset
nt.assert_is_not_subset = BaseTest().assertIsNotSubset

def setup_module():
    """site initialization"""
    global initialized
    initialized = True
    module_logger.debug("Main module setup\n")

class TestMain(BaseTest):
    """Main unit tests"""

    cls_initialized = False

    def setUp(self):
        nt.assert_false(self.cls_initialized)
        self.cls_initialized = True
        module_logger.debug("TestMain class setup\n")

    def tearDown(self):
        nt.ok_(self.cls_initialized)
        module_logger.debug("TestMain class teardown\n")

    def test_formatters(self):
        # basic
        sys.stderr = StringIO()
        logger = gogo.Gogo("stderr_if_gt_error", "error").logger
        logger.warning("stdout")
        logger.error("stderr")

        # json_formatter
        formatter = gogo.formatters.json_formatter
        json_logger = gogo.Gogo("json", low_formatter=formatter).logger
        json_logger.debug("hello")

        # csv_formatter
        formatter = gogo.formatters.csv_formatter
        csv_logger = gogo.Gogo("csv", low_formatter=formatter).logger
        csv_logger.debug('hello "world"')

        # console_formatter
        formatter = gogo.formatters.console_formatter
        console_lggr = gogo.Gogo("console", low_formatter=formatter).logger
        console_lggr.debug("hello")

        console_msg = (
            "stdout\n"
            "stderr\n"
            '{"time": "20...", "name": "js...", "level": "DEBUG", "message": "hello"}\n'
            '"20...","csv.base","DEBUG","hello ""world"""\n'
            "console.base: DEBUG    hello"
        )

        results = sys.stdout.getvalue().strip()
        nt.assert_equal_ellipsis(console_msg, results)
        nt.assert_equal("stderr", sys.stderr.getvalue().strip())

    def test_handlers(self):
        f = StringIO()
        hdlr = gogo.handlers.fileobj_hdlr(f)
        lggr = gogo.Gogo("test_handlers", high_hdlr=hdlr).logger

        msg1 = "stdout hdlr only"
        lggr.debug(msg1)
        f.seek(0)
        nt.assert_equal(msg1, sys.stdout.getvalue().strip())
        nt.assert_false(f.read())

        msg2 = "both hdlrs"
        lggr.error(msg2)
        f.seek(0)
        nt.assert_equal("%s\n%s" % (msg1, msg2), sys.stdout.getvalue().strip())
        nt.assert_equal(f.read().strip(), msg2)

    def test_multiple_loggers(self):
        f = StringIO()

        going = gogo.Gogo(
            "myapp",
            low_hdlr=gogo.handlers.fileobj_hdlr(f),
            low_formatter=gogo.formatters.fixed_formatter,
            high_hdlr=gogo.handlers.stdout_hdlr(),
            high_level="info",
            high_formatter=gogo.formatters.console_formatter,
        )

        root = going.logger
        logger1 = going.get_logger("area1")
        logger2 = going.get_logger("area2")

        root.info("Jackdaws love my big sphinx of quartz.")
        logger1.debug("Quick zephyrs blow, vexing daft Jim.")
        logger1.info("How quickly daft jumping zebras vex.")
        logger2.warning("Jail zesty vixen who grabbed pay.")
        logger2.error("The five boxing wizards jump quickly.")

        console_msg = (
            "myapp.base  : INFO     Jackdaws love my big sphinx of quartz."
            "\nmyapp.area1 : INFO     How quickly daft jumping zebras vex."
            "\nmyapp.area2 : WARNING  Jail zesty vixen who grabbed pay."
            "\nmyapp.area2 : ERROR    The five boxing wizards jump quickly."
        )

        file_msg = [
            "myapp.base   INFO     Jackdaws love my big sphinx of quartz.\n",
            "myapp.area1  DEBUG    Quick zephyrs blow, vexing daft Jim.\n",
            "myapp.area1  INFO     How quickly daft jumping zebras vex.\n",
            "myapp.area2  WARNING  Jail zesty vixen who grabbed pay.\n",
            "myapp.area2  ERROR    The five boxing wizards jump quickly.\n",
        ]

        f.seek(0)
        nt.assert_equal(console_msg, sys.stdout.getvalue().strip())
        nt.assert_equal([line[24:] for line in f], file_msg)

    def test_params_and_looping(self):
        levels = ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
        f = StringIO()
        going = gogo.Gogo(low_hdlr=gogo.handlers.fileobj_hdlr(f))
        logger1 = going.get_logger("area1")
        logger2 = gogo.Gogo().get_logger("area2")

        logger1_msg = "A debug message\nAn info message"
        logger1.debug("A debug message")
        logger1.info("An info %s", "message")
        f.seek(0)
        nt.assert_equal(f.read().strip(), logger1_msg)
        logger2_msg = ""

        for level in [getattr(logging, i) for i in levels]:
            name = logging.getLevelName(level)
            logger2_msg += "%s message\n" % name
            logger2.log(level, "%s %s", name, "message")
            # TODO: lookup yielding from a nose test

        nt.assert_equal(logger2_msg.strip(), sys.stdout.getvalue().strip())

    def test_debugging(self):
        console_msg = (
            "This should log\nSo should this\nAnd this too\nThis should log "
            "also\nSo should this\nAnd this too\nBut this one should\nAnd this"
            " one too"
        )

        logger = gogo.Gogo("debug.none").logger
        logger.debug("This should log")
        logger.info("So should this")
        logger.warning("And this too")

        logger = gogo.Gogo("debug.on", verbose=True).logger
        logger.debug("This should log also")
        logger.info("So should this")
        logger.warning("And this too")

        logger = gogo.Gogo("debug.off", verbose=False).logger
        logger.debug("This shouldn't log")
        logger.info("But this one should")
        logger.warning("And this one too")

        results = sys.stdout.getvalue().strip()
        nt.assert_in("This should log", results)
        nt.assert_not_in("This shouldn't log", results)
        nt.assert_equal(console_msg, results)

    def test_structured_formatter(self):
        console_msg = {
            "snowman": "\u2603",
            "name": "structured_formatter.base",
            "level": "INFO",
            "message": "log message",
            "time": "20...",
            "msecs": "...",
            "set_value": [1, 2, 3],
        }

        log_format = gogo.formatters.BASIC_FORMAT
        skwargs = {"datefmt": "%Y"}
        formatter = gogo.formatters.StructuredFormatter(log_format, **skwargs)

        kwargs = {"low_level": "info", "low_formatter": formatter}
        logger = gogo.Gogo("structured_formatter", **kwargs).logger
        extra = {"set_value": set([1, 2, 3]), "snowman": "\u2603"}
        logger.info("log message", extra=extra)
        result = loads(sys.stdout.getvalue())
        result["msecs"] = str(result["msecs"])
        keys = sorted(result.keys())
        nt.assert_equal(sorted(console_msg.keys()), keys)
        whitelist = {"msecs", "time"}

        for k in keys:
            f = nt.assert_equal_ellipsis if k in whitelist else nt.assert_equal
            f(console_msg[k], result[k])

    def test_structured_logging(self):
        kwargs = {"persist": True}
        extra = {"additional": True}
        meta = set(["level", "name", "time"])

        # Basic structured logger
        logger0 = gogo.Gogo("logger0").get_structured_logger("base", **kwargs)

        # Structured formatter
        formatter = gogo.formatters.structured_formatter
        logger1 = gogo.Gogo("logger1", low_formatter=formatter).logger

        # JSON formatter
        formatter = gogo.formatters.json_formatter
        logger2 = gogo.Gogo("logger2", low_formatter=formatter).logger

        # Custom logger
        logfmt = (
            '{"time": "%(asctime)s.%(msecs)d", "name": "%(name)s", "level":'
            ' "%(levelname)s", "message": "%(message)s", '
            '"persist": "%(persist)s", "additional": "%(additional)s"}'
        )

        fmtr = logging.Formatter(logfmt, datefmt=gogo.formatters.DATEFMT)
        logger3 = gogo.Gogo("logger3", low_formatter=fmtr).get_logger(**kwargs)

        # Now log some messages
        for logger in [logger0, logger1, logger2, logger3]:
            logger.debug("message", extra=extra)

        lines = sys.stdout.getvalue().strip().split("\n")
        results = [loads(i) for i in lines]

        # Assert the following loggers provide the log event meta data
        nt.assert_is_not_subset(meta, results[0])
        nt.assert_is_subset(meta, results[1])
        nt.assert_is_subset(meta, results[2])
        nt.assert_is_subset(meta, results[3])

        # Assert the following loggers provide the `extra` information
        nt.assert_in("additional", results[0])
        nt.assert_in("additional", results[1])
        nt.assert_not_in("additional", results[2])
        nt.assert_in("additional", results[3])

        # Assert the following loggers provide the `persist` information
        nt.assert_in("persist", results[0])
        nt.assert_in("persist", results[1])
        nt.assert_not_in("persist", results[2])
        nt.assert_in("persist", results[3])

        # Assert the following loggers provide the `msecs` in the time
        nt.assert_false(len(results[0].get("time", [])))
        nt.assert_false(len(results[1]["time"][20:]))
        nt.ok_(len(results[2]["time"][20:]))
        nt.ok_(len(results[3]["time"][20:]))

    def test_named_loggers(self):
        sys.stderr = sys.stdout
        logger1 = gogo.Gogo("named").logger
        logger2 = gogo.Gogo("named").logger
        nt.assert_equal(logger1, logger2)

        formatter = gogo.formatters.structured_formatter

        going = gogo.Gogo("named2", low_formatter=formatter)
        logger1 = going.get_logger("foo", test="foo")
        logger2 = going.get_logger("bar", test="bar")
        logger1.debug("message")
        logger2.debug("message")

        for h1, h2 in zip(logger1.handlers, logger2.handlers):
            nt.assert_not_equal(h1, h2)

            for f1, f2 in zip(h1.filters, h2.filters):
                nt.assert_not_equal(f1, f2)

        hdlr = gogo.handlers.stdout_hdlr()
        going = gogo.Gogo("named3", low_hdlr=hdlr, low_formatter=formatter)
        logger1 = going.get_logger("baz", test="baz")
        logger2 = going.get_logger("buzz", test="buzz")

        logger1.debug("message")
        logger2.debug("message")

        for h1, h2 in zip(logger1.handlers, logger2.handlers):
            nt.assert_not_equal(h1, h2)

            for f1, f2 in zip(h1.filters, h2.filters):
                nt.assert_not_equal(f1, f2)

        lines = sys.stdout.getvalue().strip().split("\n")
        nt.assert_not_equal(*(loads(i)["test"] for i in lines[0:2]))
        nt.assert_not_equal(*(loads(i)["test"] for i in lines[2:4]))

    def test_extra(self):
        extra = {"additional": True}
        logger1 = gogo.Gogo("basic").get_structured_logger("base2", context=True)
        logger1.debug("basic", extra=extra)

        result = loads(sys.stdout.getvalue().strip())
        nt.assert_equal(result["context"], extra["context"])

redpajama_set_name: RedPajamaGithub


One of the most talked-about haunted-house stories of all time, The Amityville Horror will hit you where you live. For George and Kathy Lutz, the colonial home on the river's edge seemed ideal: quaint, spacious and amazingly affordable. Of course, six brutal murders had taken place there just a year before, but houses don't have memories...or do they? Soon the Lutz dream house becomes a hellish nightmare, as walls begin to drip blood and satanic forces threaten to destroy them. Now the Lutzes must try to escape or forfeit their livesand their souls!


On signing, the buyer normally pays a 10% non-refundable deposit. In general, this contract outlines the buyer's and vendor's details, gives a description of the property, states the terms of payment and completion, and confirms that there is clear title. Both parties are advised to have local legal representation.
Upon completion, the Final Deed (Escritura) is signed before the public notary, who is charged with checking all documentation is present and that that the IMT (property transfer tax) has been paid. Completion normally implies the full payment of the purchase price. Occasionally, when both parties agree, a percentage of the purchase price may be withheld from the vendor until given aspects of the deal are met. This could be the resolution of items of a snagging list, for example. The buyer's lawyer normally retains the withheld sum until all everything has been resolved.
With the deeds exchanged and all outstanding issues resolved, the buyer's lawyer then registers the new owner of the property at the Land Registry (Registo Predial).


One of the best things about gambling online is the availability of free online slots like Doubleplay Super Bet slots. These are slots online win real money games that are associated with grand prize money of very high value and can be played by gamblers here at Casino UK all through the year, using amazing bonuses like free welcome credit and free spins.
Wide Range Of Slots Online Win Real Money To Choose From – Play Now!
We provide our players with an extensive range of slots online win real money games to choose from on a daily basis. Players can get to make a selection from around 250 games at least if not more.
Most of our slots online win real money games are quite easy to play.
We also provide our players with comprehensive gaming tips for progress in slots online win real money games.
Players can engage in the use of high-quality slots and games interface by gaming software in order to gamble at our casino. We allow our players to make use of games from gaming software products like Netent and Microgaming without paying any money.
Doubleplay Super Bet slots is a 5 Reel Slot game featuring 25 paylines and shiny symbols.
Those who play Doubleplay Super Bet slots at our casino can play for a base jackpot amount fixed at £100,000. Yet the deposit fee that we charge for this game is never higher than £20.
Players who engage in Doubleplay Super Bet slots on a regular basis may be exempted from paying the deposit fee entirely at times.
Games like Doubleplay Super Bet slots can also be played using bonus rounds as many as 2 or 3 in number. Players can avail around 15 free spins in every bonus round for Doubleplay Super Bet slots.
The bonus rounds have to be availed within a period of 3 months after which these turn null and void.
Players can get to pay deposit money for Doubleplay Super Bet slots using casino pay by phone bill options. These are facilities by which deposit transactions can be carried out using PayPal or credit cards when making phone bill payments at the end of the month.
There are high-quality customer services which players can always make use of when taking part in slots online win real money games at Casino UK. Our customer services are rendered entirely for free over phone and email and at all hours of the day and night.
Visiting Casino UK is definitely a great idea for all those who love to play slots online win real money games. Our games like Doubleplay Super Bet slots can turn players rich overnight if they get lucky enough when taking part in these.