text:
Saint Michael: Early Anglo-Saxon Tradition/The Veneration of Saint Michael

Summae sedis minister,

quis sicut deus, Michael,

cum supernis civibus

sis nobis propitius.

This stanza from a hymn in a manuscript roughly contemporary with Corpus 41 indicates not only the status accorded Michael but also the meaning of his name. In Hebrew, mîkā'ēl means ‘who is like God?’ and ‘quis ut deus’ became the war-cry of the good angels in their battle against Satan in heaven. Pope St Gregory the Great characterizes the Archangels Michael, Gabriel, and Raphael thus: ‘Michael namque, quis ut Deus; Gabriel autem, fortitudo Dei; Raphael vero dicitur medicina Dei.’ Gregory points out that the basic meaning of αγγελος is ‘messenger,’ and that the word ‘angel’ denotes a function rather than a nature. The holy spirits of heaven can be called 'angels' only when they deliver some message; those who deliver messages of lesser importance are called ‘angels’; and those who proclaim messages of supreme importance are called ‘archangels.’ Gregory continues, ‘Furthermore, when some act of wondrous power must be performed, Michael is sent, so that his action and his name may make it clear that no one can do what God does by his superior power—Et quoties miræ virtutis aliquid agitur, Michael mitti perhibetur, ut ex ipso actu et nomine detur intellegi quia nullus potest facere quod facere prævalet Deus.’

Wilson points out that angels are not peculiar to Judaism and Christianity, for they appear also in classical myth and philosophy, in shamanistic visions, in Zoroastrianism, Hinduism, Buddhism, Taoism, and Islam, and shows that it is safer to talk of ‘the veneration’ rather than ‘the cult’ of St Michael:

"Angels have played rather an ambiguous role in Christianity. St Paul bitterly attacked ‘the worship of Angels which some enter into blindly, puffed up by their mere human minds’ - which suggests the existence in his time of a cult of Angels. The Council of Nicaea condemned the worship of Angels as ‘idolatry’. Finally in 787 the Seventh Ecumenical Synod reinstated a carefully defined and limited cult of the Archangels which took root in the Eastern Church; in the West, however, the distrust of Angels remained strong. As in the case of the Virgin Mary, there is very little in the New Testament to justify a cult of any great proportions. And as with ‘Mariolatry’, the impulses of ‘angelolatry’ surged up from beneath the Church, from the peasantry, the people whose voice is vox Dei. Unfortunately, theologians and doctors of law and morality often fail to respond to either the popular or the mystic imagination. Artists, however, do respond to both."

The italics are editorial, for Wilson's remark serves to establish the correct context for the Corpus 41 text and to account for its unique nature.

The Archangels Michael, Gabriel, and Raphael are the only angels to be venerated also as saints. The title ‘Saint’ is applied to Michael as a courtesy and a mark of deep respect rather than as a matter of strict definition, for the archangels are eternal, outside time, and non-corporeal, with no date of birth, no date of martyrdom, and no relics such as are required of a human saint. Absence of such earthly and temporal features may account for Michael's later and frequent replacement by his earthly avatar, Saint George. Of course, ‘relics’ of Michael are ‘found,’ such as the archangel's footprint(s) on rock, a sword, a spear, or a feather. It also takes a little manoeuvring to account for the appearance of St Michael in texts such as the Old English Martyrology. The sword in the stone near the village of Chiusdino in Tuscany and the link with St Michael through St Galgano will call for later discussion as well.

According to Rabbi Simeon ben Lakish (AD 230-270), all the specific names for the angels were brought back by the Jews from Babylon, and much of the late Midrash detail about Michael was transmitted to Christianity through the post-Exilic Book of Enoch, whence it was taken up and further elaborated. Enoch's list of the seven archangels is given by Wilson:

"Uriel, who rules the world and Tartarus

Raphael, who rules the spirits of men

Raguel, who takes vengeance on the world of the luminaries

Michael, who is set over the best part of mankind and over Chaos

Saraqael, who is set over the spirits

Gabriel, ruler of paradise, the serpents and the Kerubim

Remiel, whom God set over those who rise."

Enoch also describes a scheme of four archangels surrounding the throne of God with their hosts—Michael, Raphael, Gabriel, and Phanuel (often but erroneously identified with Uriel). Nearest the throne is the highest angel of all, Metatron, whom Wilson describes as follows:

"This Angel was once the prophet Enoch ‘who was not, for God had taken him up’...Matatron is a prophet, ancient, bearded, inspired; yet at the same time an eternal and celestial adolescent, radiantly beautiful. Isaiah saw him ‘sitting upon a throne, high and lifted up, and his train filled the temple. Above him stood the Seraphim: each one had six wings; with twain he covered his face, and with twain he covered his feet, and with twain he did fly.’ [Isaiah 6: 1-2] ...beneath Metatron...Michael, Gabriel and Sandalphon. No words can do justice to the glory of Michael, who is patron of Israel, chief of the heavenly hosts, and, like his counterpart the Persian god Mithra, the sun in splendour. He may be pictured as a radiant winged warrior dressed in shining armour, piercing with his spear the writhing form of a serpent or dragon beneath his feet."

Not mentioned by name in the Old Testament, Metatron is ‘the angel of the Lord‘/‘the Lord’ who, for instance, speaks from the burning bush, saves the three from the fiery furnace, appears as the God of Beth-el in Jacob's dream, and blocks the path of Balaam's ass. Wilson notes, ‘In the beginning was the Word, the Logos, the Christic Principle. All the Old Testament appearances of the Lord/Angel of the Lord are considered by the Eastern theologians to have been partial manifestations, limited theophanies of the Logos. Jesus is the final and perfect incarnation of the Logos; He is the Living Word, the Word made flesh.’ What is interesting to note is the Eastern influence on the text in Corpus 41 and Michael's taking over therein some of the functions of Metatron, such as the rescue of Shadrach, Meshach, and Abednego from the furnace.

Also in the heavenly hierarchy is the sinister figure of Lucifer, the self, the ego, the fallen in need of salvation. His fall is described in the Koran and in the apocryphal Life of Adam and Eve: God commanded the angels to bow before the newly-created Adam, but Satan refused and was cast from the presence of God. ‘Man also is both at one with God and at the same time somehow separate from Him, “fallen”. God needs Adam to be something other-than-God, so that Adam may come to know God and thus fulfil God’s purpose in creating the world. Adam's knowledge closes the circle and returns the Many to the One. And Satan presides over the beginning and end of this drama.’ Thus the climax of the Bible and of the Corpus 41 text has to be Michael's battle with Satan.

Furthermore, that battle takes place not just at the end of time but on each and every occasion when a soul overcomes temptation:

"The Archangel Michael slays the dragon: solar, chivalrous, victorious day against the lunar, watery and reptilian night. The serpent is cast out of the garden not once but countless times: wherever a soul triumphs over itself, Michael is present ... Just as in alchemy the volatile spirit of mercury must be ‘killed’ or fixed by the table solar principle of sulphur, so the lithe and sinuous dragon, slippery as quicksilver, must be ‘slain’ by the Angel of the Sun, Michael. The symbolism is this: the vital spirit is by nature chaotic and cthonic, but the intellect cannot operate without its power. To ‘kill’ the dragon is not to eliminate it but to tame it, to leash it, to order it, to use its power towards spiritual ends."

Here is the importance of the vital message of the Corpus 41 text: mankind must search for its deity on home ground. In the ApocryphalVita Adae et Evae (28, 29), the story of the Fall is told, and Michael is appointed to expel Adam and Eve from Eden. Taking up the tale among the closing lines of Paradise Lost, Milton has Michael point out to Adam that he must be reconciled to the next best thing to Eden. His sin may have brought him ‘To dwell on even ground,’ but he is not to despair:

"All th' Earth he gave thee to possess and rule,

No despicable gift; surmise not then                                   340

His presence to these narrow bounds confin'd

Of Paradise or Eden: this had been

Perhaps thy Capital Seate, from whence had spred

All generations, and had hither come

From all the ends of th' Earth, to celebrate

And reverence thee thir great Progenitor.

But this præeminence thou hast lost, brought down

To dwell on eeven ground now with thy Sons:

Yet doubt not but in Vallie and in Plaine                               350

God is as here, and will be found alike

Present, and of his presence many a signe

Still following thee, still compassing thee round

With goodness and paternal Love, his Face

Express, and of his steps the track Divine."

Basic to Revelation and the other apocalyptic books is the tenet that angels, saints, and archangels penetrate and transcend our profane time; through their intermediation history is directed towards a definite end and events themselves possess an inner meaning, which we must seek to interpret for our salvation. It follows that angels, saints, and archangels preside over all the rituals of the Church or at the very least provide the model for worship, participate in our worship, and are also due a kind of worship in themselves, a ‘veneration’ anyway, for those theologians who have reservations about the feast days set aside as angelic feasts—‘notably the great Synaxis of Michael and All Angels in Orthodoxy (8 November).’ This is the principal feast of St Michael in the Orient, having spread from Phrygia over the Greek, Syrian, Armenian, and Coptic Churches; its station at Constantinople was the Thermae of Arcadius (Martinow, ‘Annus Graeco-slavicus’, 8 Nov.).

Also basic is the tenet that angels and archangels can have place, shrines, churches, mountains, springs and rivers, and so forth where they intersect with earthly experience in apparition and are consequently worshipped. Peter Wilson comments on Michael as an angel of place as follows:

"Of all the higher Archangels, Michael seems to have most often ‘condescended’ to play the role of an Angel of place. Not only does he rule Heaven, he also protects Israel and battles against the Angels of Israel's enemies. In Egypt he is the patron of the Nile, and his feast is celebrated on the day the river rises. In Germany the newly-converted pagans recognized Michael as the god Woden, and transformed his mountain shrines into churches of the Archangel. He is the Patron of Brittany and Cornwall, where Mont-Saint-Michel and Michael's Mount bear witness to the Angel's taste for imposing scenery and exquisite architecture."

St Michael was first venerated as the heavenly physician in Phrygia, where in the earliest ages in Turkey he supposedly caused a medicinal spring to gush forth at Chairotopa near Colossae (now Ceretapa) and also drew springs from a rock at Chonae near Colossae, east of Laodicea (modern Khonas, east of Denizli) on the Lycus in Phrygia; it is still the site of a church dedicated to St Michael the heavenly healer. The Greeks dated his apparition there in the mid first century, and held a commemorative feast on 6 September (Analecta Bolland. VIII, 285-328). At Pythia in Bithynia and elsewhere in Asia hot springs are dedicated to Michael. At Constantinople the healer’s principal sanctuary, the Michaelion, was at Sosthenion, some fifty miles south of Constantinople; he is supposed to have visited Emperor Constantine the Great at Constantinople, intervened in assorted battles, and appeared, sword in hand, over the Moles Hadriani (the mausoleum of Hadrian) in 590 in answer to the prayers of Pope St Gregory I the Great that a plague in Rome should cease. The pope named the mausoleum the Castel Sant'Angelo (Castle of the Holy Angel), and St Michael's feast was kept there on 9 June; also, Boniface IV (608-15) built on the Moles Hadriani a church, St Michaelis inter nubes (in summitate circi). Other feasts of St Michael at Constantinople were: 27 October, in the ‘Promotu’ church; 18 June, in the Church of St Julian at the Forum; and 10 December, at Athaea. For Egyptian Christians the Nile is sacred to Michael, whose Greek feast was adopted for 12 November with commemoration of Michael on the 12th of each month and especially on 12 June ‘for the rising of the Nile.’

The Western celebration of St Michael on 8 May comes from the Roman Breviary and arises from his appearance on Mount Garganus. The story is the first told about Michael in the Golden Legend (Legenda Aurea), a compendium of Christian mythology put together by St Jacobus de Varagine between 1260-1275:

"The apparition of this angel is manifold. The first is when he appeared in the Mount of Gargan. This mountain is in Naples, which is named Gargan and is by the city named Syponte. And in the year of our Lord three hundred and ninety, was in the same city of Syponte a man which was named Garganus, which, after some books, had taken that name of the mountain, or else the mountain took the name of the man. And he was right rich, and had a great multitude of sheep and beasts, and as they pastured about the sides of the mountains it happed that a bull left the other beasts, and went upon high on the mountain and returned not home again with the other beasts. Then this rich man, the owner, took a great multitude of servants, and did do seek this bull all about, and at the last he was founden on high on the mountain by the entry of a hole or a cave. And then the master was wroth because he had strayed alone from other beasts, and made one of his servants to shoot an arrow at him. And anon the arrow returned with the wind and smote him that had shot it, wherewith they of the city were troubled with this thing, and went to the bishop and inquired of him what was to be done in this thing, that was so wonderful. And then he commanded them to fast three days and to pray unto God. And when this was done Saint Michael appeared to the bishop, saying: Know ye that this man is so hurt by my will. I am Michael the archangel, which will that this place be worshipped in earth, and will have it surely kept. And therefore I have proved that I am keeper of this place by the demonstrance and showing of this thing. And then anon the bishop and they of the city went with procession unto that place, and durst not enter into it, but made their prayers withoutforth."

The archangel appeared on three successive nights to the Bishop of Sipontum, in Apulia, the last time on September 29, 493 (or 530-540). Michael indicated that a grotto sacred to Mithras, on Monte Tumba, be rededicated as a Christian place of worship. The bishop and his friends on arriving there found an altar already draped with a purple cloth and Michael's footprint sunk in the rock. A basilica was erected there by Pope Gelasius I (reigned 492-496). Known consequently as Monte Sant'Angelo, the shrine at Monte Gargano attracted pilgrims from many places and many times, including Bernard of Clairvaux, Thomas Aquinas, and Birgitta of Sweden. Francis of Assisi, too, went there, but declined to go into the grotto itself. ‘The Sanctuary of Monte Sant'Angelo sul Gargano, sometimes called simply Monte Gargano, is the oldest shrine in Western Europe dedicated to the Archangel Michael. It is located at 41.71° N 15.96° E on Mount Gargano, Italy, part of the commune of Monte Sant'Angelo, in the province of Foggia, northern Apulia (Italy). The historic site and its environs are protected by the Parco Nazionale del Gargano.’ The feast of September 29, Michaelmas, was instituted by the Synod of Mainz in 813 to be celebrated as a public holiday throughout the entire Carolingian Empire.

In the Mount Garganus story, Michael the heavenly healer is now seen in his other, and primary, role, that of heavenly warrior, a role repeated for the Lombards of Sipontum (rebuilt in 1256 as Manfredonia) when he helped them to victory over the Greek Neapolitans, 8 May 663. The church of Sipontum established a special feast-day on 8 May, which is celebrated all over Western Christendom. Confusingly, the feast has been called ‘Apparitio S Michaelis’ since the time of Pope Pius V, though the specific date is that of the battle rather than the Mount Garganus appearance.

The September date also persists to the present. ‘At Rome the Leonine Sacramentary (sixth century) has the “Natale Basilicae Angeli via Salaria”, 30 September; of the five Masses for the feast three mention St Michael. The Gelasian Sacramentary (seventh century) gives the feast “S Michaelis Archangeli”, and the Gregorian Sacramentary (eighth century), “Dedicatio Basilionis S Angeli Michaelis”, 29 Sept. A manuscript also here adds “via Salaria” (Ebner, “Miss. Rom. Iter Italicum”, 127). This church of the Via Salaria was six miles to the north of the city; in the ninth century it was called Basilica Archangeli in Septimo (Armellini, “Chiese di Roma”, p. 85). It disappeared a thousand years ago.’

Tuscany presents another notable appearance of St Michael, that to St Galgano near the village of Chiusdino. The dissolute Galgano Guidotti (1148?-1181) turned into a knight following a vision of St Michael, then in a second dream was conducted by the archangel into a round building in which he had a vision of the majesty of God. His horse stopped one day by a small hill named Montesiepi, which Galgano recognized as the location of his vision. He stuck his sword into a rock, and it is still there at the present day, above the ruins of a roofless Gothic abbey. Galgano's sword links St Michael to Arthurian legend, as will be discussed later.

In France, in addition to the regular church feasts of the archangel, Normandy celebrates the appearance of St Michael in 708 to St Aubert, Bishop of Avranches in the Diocese of Coutances, and Michael's particular care of mariners. The first church of St Michael on Mont-Saint-Michel was dedicated on October 16, 710 and throughout Normandy the anniversary of the dedication was celebrated on October 18 as the feast ‘S Michaelis in periculo maris’ or ‘in Monte Tumba.’ The feast is now confined to the Diocese of Coutances, but Michael remains the patron saint of Brittany and of Cornwall, where the corresponding St Michael's Mount is the centre of his veneration. Mont-Saint-Michel appears in the Bayeux Tapestry in connection with William the Conqueror. In the later Middle Ages, French kings of the Valois dynasty adopted St Michael as their patron saint, and the archangel was the great supporter of the French and Joan of Arc during the Hundred Years' War. In Le Puy(s)-en-Velay in the Auvergne, the chapel Saint-Michel d'Aiguilhe was built in 962 atop a precipitous volcanic spur 85 metres (275 ft) high for pilgrims taking St Michael's Way through Cornwall, crossing the Channel, and worshipping in Le Puy(s) on St James' Way to the Cathedral of Santiago de Compostela in Galicia in northwestern Spain, where the remains of the apostle, Saint James the Great, are reputed to have been buried; Joan of Arc's mother, Isabelle Romée, came to Le Puy(s) to pray in 1429. Michael is also patron saint of the Basques of Northern Spain, who annually bring his image from the national shrine to visit every church in Navarre.

From the earliest Christian centuries the Eastern Church associated veneration of St Michael with mountain-tops, and this association persisted—Colossae, Garganus, Moles Hadriani, Mont-Saint-Michel, St Michael's Mount, Tumba, Le Puy(s), Montesiepi. The early Oriental dedications pre-date the Christianization of Germany, so it is inaccurate to characterize the hill-top association as specifically German, though certainly on the sacred German mountains the pagan deity, Wotan or Odin, was replaced by Michael, and countless mountain chapels of St Michael are found in that country. The replacement is clearly seen in, for example, Michelstadt in the Odenwald. Certainly the heavenly warrior was beloved by the Germans in battles against pagan armies; for example, when the imperial troops fought the heathen Magyars in Bavaria in 933 and 955, their victory was attributed to the archangel. He became known as the patron saint of the German Nation, and his image graced the war standard of the old German Empire (Holy Roman Empire of the German Nation).

The veneration of St Michael in England, Normandy, and the Celtic Lands will form the subject matter of fuller discussion later, so it must suffice here to note that Michaelmas on September 29 in several countries is one of the old Germanic quarter-days for the settling of accounts, law-making, and that quasi-Parliament, the Thing; the autumn term at Cambridge University is still referred to as the Michaelmas Term. In mediaeval times, Michaelmas was an important holy day of obligation, since Michael was the patron of chivalry, and a public holiday noted for parades, fairs, plays, and hospitality—stubble geese in England, St Michael's bannock in the islands of Scotland, wine (‘Michelsminne,’ ‘Michael's Love’) in the north of Europe and in England.

Later discussion will centre on St Michael's Mount in Cornwall, a very close correspondence to Mont-Saint-Michel, but mention must also be made of Glastonbury, where the huge Tor elevates the tower of St Michael's church 521 feet high above the flat Summerland or Somerset Levels, which in earlier times were flooded marshlands; Glastonbury Tor (local Celtic ‘conical hill’) therefore closely resembles such sites as Mont-Saint-Michel and St Michael's Mount. Legend has it that the rich tin merchant Joseph of Arimathea brought the boy Jesus to Cornwall and after the Crucifixion brought the Holy Grail to Glastonbury, where he and his twelve followers built the first above-ground Christian church (dedicated to the Virgin Mary) some 65 years after Jesus' death. Glastonbury, the legendary Isle of Avalon, is consequently linked to King Arthur, his knights' pursuit of the Grail, and the burial of Arthur and Guinevere, whose coffins were allegedly discovered in 1191. According to a mid-thirteenth-century story, St Patrick, who ended his days at Glastonbury in 461, discovered an ancient ruined oratory on the summit of Glastonbury Tor. A charter of 1243 grants permission for a fair at the monastery of St Michael on the summit, and the archangel's mediaeval church survived until the earthquake of September 11, 1275. The Church of St Michael was rebuilt in the 1360s and survived until the Dissolution of the Monasteries in 1539. The present tower of that 1360s church is fifteenth-century and still stands atop the Tor, having been restored in modern times and placed in the hands of the National Trust. Glastonbury Tor is therefore linked with other famous St Michael sites, and associates Michael with St Patrick and with the Holy Grail.

In Scotland, many churches on hills are dedicated to St Michael (e.g., Inverness, or Dumfries, in whose churchyard Robert Burns is buried), and St Michael as commander of the waters is celebrated in the naming of the flagship of the mediaeval Scottish navy, the Great Michael. Commissioned by James IV to protect the commerce of Scotland and to excite the envy of Henry VII and Francis I, the huge ship built at Newhaven was 240 feet long, with sides ten feet thick. She carried 300 sailors, 4 masts, 60 cannon (including Mons Meg!), 120 gunners, and 1,000 fighting men. ‘The Great Michael was named after the archangel Michael and built with the intention of leading a crusade against the Ottoman Empire to reclaim Palestine for Christendom. This grandiose plan had to be changed when the commitments of the Auld Alliance with France required Scotland to go to war with England to divert England from her war with Louis XII of France.’ A model is preserved in the National Museum of Scotland, and a painting by the Leith artist, Frank Forsgard Manclark, may be seen on his website. The ship's first commander, Admiral Sir Andro (Andrew) Wood of Largo, is pictured among the kings and other great Scots at Bannockburn, and turns up in variant D of the traditional ballad, Sir Patrick Spens, though he was born 200 years after that legendary commander.

For the purposes of the present study, attention has been focussed on the gospels and apocryphal writings of the traditional and mainline Christian Church, but it should be acknowledged that St Michael is venerated in other denominations and faiths. For the Church of Latter-day Saints, Michael and the mortal patriarch Adam are regarded as the same person, and the descendants of Adam are therefore also descended from Michael. Jehovah's Witnesses and Seventh-day Adventists, on the other hand, equate Michael and Jesus Christ. In Islam, for the Arabs, Michael is called Mikha'il, or Mikhal in the Qur'an (where he is mentioned only once in Sura 2:98), and for the Muslims Michael is one of the four archangels (with Izrail, Israfil, and Jibrail), and one of the two angels, with Gabriel, named in the Qur'an. In Islamic tradition Michael always appears as second to Gabriel.

There is brief mention of Michael in the Gnostic and Coptic Gospel of Judas (Peuaggelion Nioudas) written c. AD 150 and surviving in a copy from the 300s which was found in Egypt in the 1970s and restored and translated into English 2001-2006. The Gospel of Judas was condemned as ‘fictitious history’ c. 180 by Irenaeus, Bishop of Lyon, and later, in 375, by Epiphanius, Bishop of Salamis. The group of gnostics known as Cainites believed that the world was created not by the One True God but by a lesser, ignorant deity, the God of the Old Testament, who was not to be trusted or followed. Judas Iscariot was the one disciple who did not worship the false Jewish God but alone understood the mysteries and the will of Jesus Christ. In the Gospel of Judas, Michael and Gabriel are archangels, as in the Bible, and are involved in the act of creation:

"The universe is created, then the Earth is created, and finally human beings. Saklas, one of the angels, but one who is considered a fool, is the one who decides to create a human being; Meyer notes that similar accounts of the creation are cited in other Sethian texts. Adam and Eve are created. Eve is also called Zoe, which is Greek for ‘life.’ ‘For by this name all the generations seek the man, and each of the generations calls the woman by these names ... And the ruler said to Adam, “You shall live long, with your children.”’ In the section of text that follows, Judas asks Jesus, ‘Does the human spirit die?’ Jesus replies, ‘This is why God ordered Michael to give the spirits of people to them as a loan, so that they might offer service, but the Great One ordered Gabriel to grant spirits to the great generation with no ruler over it—that is, the spirit and the soul.’"

Michael is celebrated primarily as the guardian angel of Christ's kingdom on earth and as defender of the faithful against their enemies. But local considerations and vested interests lead to Michael's being venerated as the patron saint of soldiers, the sick, mariners, grocers, paratroopers, police, and so on. One merely partial list is given thus:

"...against temptations; ambulance drivers; artists; bakers; bankers; banking; Basey, Samar, Philippines; battle; boatmen; Brecht, Belgium; Brussels, Belgium; Caltanissett, Sicily; diocese of Coimbatore, India; Congregation of Saint Michael the Archangel; coopers; Cornwall, England; danger at sea; Dormagen, Germany; Dunakeszi, Hungary; dying people; emergency medical technicians; EMTs; England; fencing; Germany; Greek Air Force; greengrocers; grocers; haberdashers; hatmakers; hatters; holy death; diocese of Iligan, Philippines; knights; mariners; milleners; archdiocese of Mobile, Alabama; Naranjito, Puerto Rico; Papua, New Guinea; paramedics; paratroopers; diocese of Pensacola-Tallahassee, Florida; police officers; Puebla, Mexico; radiologists; radiotherapists; sailors; diocese of San Angelo, Texas; San Miguel de Allende, Mexico; archdiocese of Seattle, Washington; security forces; security guards; Sibenik, Croatia; sick people; Siegburg Abbey; soldiers; Spanish police officers; diocese of Springfield, Massachusetts; storms at sea; swordsmiths; Umbria, Italy; watermen; Zeitz, Germany."

That any such list is of necessity partial is demonstrated by the absence from the above list of Normandy, the former Michael Monastery in Prague, and the great city of Kiev.

Another list, more comprehensive but still, of course, partial comes from Wikipedia:

"St Michael's Golden-Domed Monastery in Kiev

St Michael's Church, Daceyville, Sydney, Australia

St Michael's Cathedral, Toronto, Ontario, Canada

Mont Saint Michel, Normandy, France - a World Heritage Site

St Michael's Church, Hildesheim - a World Heritage Site

Skellig Michael, off the Irish west coast - a World Heritage Site

Archangel Cathedral in the Moscow Kremlin - a World Heritage Site

Chudov Monastery in the Moscow Kremlin, where the future Russian tsars were baptized

St Michael Chapel in Košice, Slovakia

Monte Sant'Angelo sul Gargano, Gargano, Italy

Saint-Michael, Bamberg, Germany (tomb of Otto of Bamberg, Apostle of Pomerania)

Monastery of Archangel Michael Panormitis, Simi, Greece

St Michael's Mount, Cornwall, England

Michaelhouse Chapel, Balgowan, KZN, South Africa

Sacra San Michele, Val di Susa, near Turin, Italy

St Michael's Golden-Domed Monastery, Kiev, Ukraine

St Michael's Church, Lviv, Ukraine

St Michael's Church in Vienna, Austria

San Miguel del Milagro, Tlaxcala, México

Saint Michael's Cathedral, Grand Forks, North Dakota, USA

Monastery of the Holy Taxiarchs Michael and Gabriel, Mantamados, Lesbos

St Michael's Church in Tharuvaikulam, Tamil Nadu, South India

St Michael's Church, Michaelkirchplatz, Berlin

St Michael's Church, Melbourne, Australia (in Ashburton)

St Michael's Church, Pelsall, West Midlands [UK]

St Michael's Cathedral, Springfield, MA [USA]

The Angel Walk St Benedict Cathedral, Subiaco Monastery, Arkansas, USA

San Miguel Church, Manila, Philippines

St Michael's Church, Flushing, New York"

Kiev and Normandy are in this list, but not St Michael's Church in Munich, Germany or St Michael Church of Orland Park in the Archdiocese of Chicago. And there is no mention of Michaelhouse in Cambridge, which is now known as Trinity College. Michaelhouse was founded in 1324, and was combined with King's Hall (established by Edward II in 1317, refounded by Edward III in 1337) by Henry VIII in 1546 to form Trinity. The ancient St Michael's Church in Trinity Street was opened as a peaceful drop-in Michaelhouse Centre Cambridge Ltd in 2002.

Also missing from the list is the Hadrianeum statue of St Michael atop the Castel Sant'Angelo in Rome sheathing his sword after putting an end to the Roman plague of AD 590 already discussed. In 1536 a marble statue of the archangel was sculpted by Raffaello da Montelupo, but it is no longer atop the Castel and is to be found in an interior court; Montelupo's statue has been replaced on the top of the Castel by a bronze one made in 1753 by the Flemish artist Peter Anton von Verschaffelt (in time for Floria Tosca to throw herself from the battlements in Puccini's opera set in 1800).

Mention must also be made of Arkhangelsk, previously known in English as ‘Archangel,’ the city that lies on both banks of the Northern Dvina river near its exit into the White Sea in the far north of European Russia. The Vikings knew the area around Arkhangelsk as ‘Bjarmaland,’ ‘the land of the Permians,’ and a Viking named Ottar (Ohthere in Old English) from Hålogaland described to King Alfred his travels c. 890 to an area by a river and the White Sea with many buildings, probably the area later named Arkhangelsk and destined to be the chief seaport of mediaeval Russia. In the twelfth century the Novgorod Russians established the Archangel Michael Monastery there, and when in 1584 Czar Ivan the Terrible founded New Kholmogory the city was renamed after the nearby monastery. Students of Old English, including those familiar with selections typical in works such as Sweet's Anglo-Saxon Reader, have acquaintance with the descriptions the Viking traders Ottar and Ulsteinn (Ohthere and Wulfstan) gave to King Alfred, who interpolated translations of their accounts of their voyages into the Old English version of the Historiarum Adversum Paganos Libri VII of Paulus Orosius (c. 385-420), a Galician monk and disciple of St Augustine, who sought to counter the calumny that the fall of the Roman Empire was due to its adoption of Christianity:

"Þā siglde hē þonan sūðryhte be lande sƿā sƿā hē mehte on fīf dagum gesiglan. Ðā læg þǣr ān micel ēa up in on þæt land. Þā cirdon hīe up in on ðā ēa, forðǣm hīe ne dorston forþ bī þǣre ēa siglan for unfriþe; forðǣm ðæt land ƿæs eall gebūn on oþre healfe þǣre ēas. Ne mētte hē ǣr nān gebūn land, siþþan hē fram his āgnum hām fōr; ac him ƿæs ealne ƿeg ƿēste land on þæt stēorbord, būtan fiscerum ond fugelerum on huntum, ond þæt ƿǣron eall Finnas; ond him ƿæs ā ƿīdsǣ on þæt bæcbord. Þā Beormas hæfdon sƿīþe ƿel gebūd hira land: ac hīe ne dorston þǣr on cuman.

Then [Ohthere] sailed thence due south along the land as far as he might sail in five days. Then there flowed a great river up in on that land. Then they turned up that river, because they durst not sail past that river for fear of hostility; because the land was completely cultivated on the other side of the river. He had not previously encountered any cultivated land, since he set out from his own home; furthermore, for him everything was wasteland to starboard, except for fishermen and fowlers and hunters, and they were all Finns; and he had always wide open sea to port. The Permians had cultivated their land very well: but they durst not enter there."

The Russians brought their favourite archangel to America, to Alaska, when they wished to create Russian America. In 1799 they took over Sitka; the native Tlingits rose up against Russian rule in 1802, but Baranov put down the uprising in 1804 and Sitka became Novo-Arkhangelsk (‘New Archangel’). The Russian Orthodox Cathedral of St Michael founded in 1848 still graces the streets of Sitka, and the port of St Michael (now defunct) was the furthest point on the coast of Alaska which the Gold Rush miners could reach by ship before setting off on their overland trek.

American friends will be sad to note that there is no mention of the City of St Michael, Minnesota, mid-way between St Cloud and Minneapolis; it was incorporated as a city in 1890, and has a population of some 15,000. Several towns and villages in Scotland bear the name ‘Kirkmichael’ (Scots Gaelic Cille Mhìcheil, ‘The Church of St Michael’) such as the village in southern Ayrshire near Patna, Maybole and Straiton; the village in Strathardle, Perth and Kinross, between Blairgowrie and Pitlochry; St Michael's Kirk at the eastern end of the Black Isle near the village of Balblair; and the parish church of St Michael in Kirk Michael, Isle of Man, with its vast collection of Manx Norse crosses. Likewise, the name ‘Carmichael’ is Scots Gaelic in origin (Caer Mhìcheil), and comes from the ancient hill fort or caer chosen in 1058 by St Margaret as the lofty site of one of her first six churches established in the see of Glasgow and appropriately dedicated to St Michael; the modern surname means ‘follower or friend of Michael.’ The Christian name and surname ‘Mitchell’ is often assumed to be of Middle English origin, from Norman French Michel, meaning ‘Who is like God?’ or ‘with the likeness of God,’ but is of course ultimately Hebraic and could well have come to Scotland through the ancient Christian Cuildigh or Culdee church long before the Normans or even the Romans.

Such a popular figure as the Archangel Michael therefore has been venerated in many places, on many dates. The Western Church celebrates on September 29 and May 8; the Greek Rite celebrates on November 8 and September 6; and France celebrates the Mont-Saint-Michel apparition on October 16. Closer focus on the context for the text in Corpus 41 requires more detailed consideration of the veneration of St Michael in Normandy, Anglo-Saxon England, and the Celtic lands in the Christian centuries leading up to the Conquest of 1066 and its aftermath in the latter part of the eleventh century.

In art and iconography, St Michael is depicted as a golden-haired youth, winged and in full armour, unmounted, bearing a sword and shield (which usually has a cross insignia and sometimes the legend ‘Quis ut deus’). Sometimes St Michael is depicted standing over a devil or the Dragon, piercing him with a sword or lance, sometimes, since he has taken over the role of the pagan Hermes, bearing the sealed book of life or weighted scales (to show he takes part in judgment) while the Virgin Mary intercedes with him and an imp tries to pull down the scales. From instances far too numerous to cite, a few examples must suffice—Les Très Riches Heures de Jean, Duc de Berry, fol. 195r, representing the Archangel Michael at the end of time at Mont-Saint-Michel; The Book of the Hours of Henry VIII, folo.172r showing Michael killing Satan and consigning the fallen angels to Hell; Murillo's painting Saint Michael Banishes the Devil to the Abyss; in Kiev, Ukraine, the massive statue in Independence Square and the mural on the Katedral Svati Mikhail Arhangel founded in 1105 by Prince Svyatopolk (grandson of Yaroslav I the Wise) and a model of the Old Rus' architecture; and Sir Jacob Epstein's 4-ton, 19-foot bronze sculpture St Michael and the Devil, which graces the rebuilt Cathedral of Saint Michael in Coventry. Ultimately, of course, all these painted scenes represent Good conquering Evil, a motif not uncommon in religious art, and Michael is seen by scholars of mythology as an angel of light, revealer of mysteries, guide to the other world, the Christian successor to pagan deities such as the Egyptian Thoth, the Greek Hermes, the Roman Mercury, and the Celtic Bel.


text: NEC PC Programmers Reference/Printable version

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Cookbook talk:Seasoned Bread and Butter Balls

Proposed rename
Hello! I propose renaming this to "Bread and Butter Balls" because the existing title ("Bread and Butter") commonly refers to slices of buttered bread. Thoughts? Nostriker (discuss • contribs) 04:46, 12 February 2022 (UTC)


text:
Cookbook:Herb Biscuits

Procedure

 * 1) Preheat oven to 450 °F. Have an ungreased baking sheet ready.
 * 2) In a large bowl, combine both flours, baking powder, salt, and spices. Mix well.
 * 3) Add margarine, and mix with a fork or pastry blender until mixture resembles coarse crumbs.
 * 4) Add milk. Stir until dry ingredients are moistened.
 * 5) Place dough on a floured surface and knead a few times just until dough holds together in a ball. Add a small amount of flour if dough is sticky.
 * 6) Roll dough or press with your hands to ½-inch thickness. Using a 3-inch biscuit cutter or a glass, cut out 8 biscuits. Scraps can be put together and rolled again.
 * 7) Place biscuits on baking sheet. Bake 10 minutes, or until lightly browned.
 * 8) Remove to a wire rack. Serve hot.

title: Cookbook:Herb Biscuits


text:
User talk:Buller1

S

title: User talk:Buller1


text: Template:Programming language/testcases

title: Template:Programming language/testcases


text: Template:Testcases notice

title: Template:Testcases notice


text:
Template:Select skin

[ ] · [ New ] · [ ] · [ ] · [ ] · (mobile)

title: Template:Select skin


text:
Module:Template test case

--[[ SPDX-FileCopyrightText: © 2014-2016 Mr. Stradivarius

SPDX-License-Identifier: CC-BY-SA-3.0 AND GFDL-1.3-or-later

A module for generating test case templates.

This module incorporates code from the English Wikipedia's "Testcase table" module,[1] written by Frietjes [3] with contributions by Mr. Stradivarius and Jackmcbarn,[4] and the English Wikipedia's "Testcase rows" module,[2] written by Mr. Stradivarius.

The "Testcase table" and "Testcase rows" modules are released under the CC BY-SA 3.0 License and the GFDL.

[1] https://en.wikipedia.org/wiki/Module:Testcase_table [2] https://en.wikipedia.org/wiki/Module:Testcase_rows [3] https://en.wikipedia.org/wiki/User:Frietjes [4] https://en.wikipedia.org/wiki/User:Jackmcbarn ]]

-- Load required modules local yesno = require('Module:Yesno')

-- Set constants local DATA_MODULE = 'Module:Template test case/data'

--- -- Shared methods ---

local function message(self, key, ...) -- This method is added to classes that need to deal with messages from the -- config module. local msg = self.cfg.msg[key] if select(1, ...) then return mw.message.newRawMessage(msg, ...):plain else return msg end end

--- -- Template class ---

local Template = {}

Template.memoizedMethods = { -- Names of methods to be memoized in each object. This table should only -- hold methods with no parameters. getFullPage = true, getName = true, makeHeader = true, getOutput = true }

function Template.new(invocationObj, options) local obj = {}

-- Set input for k, v in pairs(options or {}) do		if not Template[k] then obj[k] = v		end end obj._invocation = invocationObj

-- Validate input if not obj.template and not obj.title then error('no template or title specified', 2) end

-- Memoize expensive method calls local memoFuncs = {} return setmetatable(obj, {		__index = function (t, key)			if Template.memoizedMethods[key] then				local func = memoFuncs[key]				if not func then					local val = Template[key](t)					func = function return val end					memoFuncs[key] = func				end				return func			else				return Template[key]			end		end	}) end

function Template:getFullPage if not self.template then return self.title.prefixedText elseif self.template:sub(1, 7) == '#invoke' then return 'Module' .. self.template:sub(8):gsub('|.*', '') else local strippedTemplate, hasColon = self.template:gsub('^:', '', 1) hasColon = hasColon > 0 local ns = strippedTemplate:match('^(.-):') ns = ns and mw.site.namespaces[ns] if ns then return strippedTemplate elseif hasColon then return strippedTemplate -- Main namespace else return mw.site.namespaces[10].name .. ':' .. strippedTemplate end end end

function Template:getName if self.template then return self.template else return require('Module:Template invocation').name(self.title) end end

function Template:makeLink(display) if display then return string.format('%s', self:getFullPage, display) else return string.format('%s', self:getFullPage) end end

function Template:makeBraceLink(display) display = display or self:getName local link = self:makeLink(display) return mw.text.nowiki('') end

function Template:makeHeader return self.heading or self:makeBraceLink end

function Template:getInvocation(format) local invocation = self._invocation:getInvocation{ template = self:getName, requireMagicWord = self.requireMagicWord, }	if format == 'code' then invocation = ' ' elseif format == 'kbd' then invocation = ' ' .. mw.text.nowiki(invocation) .. ' '	elseif format == 'plain' then invocation = mw.text.nowiki(invocation) else -- Default is pre tags invocation = mw.text.encode(invocation, '&') invocation = '' .. invocation .. ' '		invocation = mw.getCurrentFrame:preprocess(invocation) end return invocation end

function Template:getOutput local protect = require('Module:Protect') -- calling self._invocation:getOutput{...} return protect(self._invocation.getOutput)(self._invocation, {		template = self:getName,		requireMagicWord = self.requireMagicWord,	}) end

--- -- TestCase class ---

local TestCase = {} TestCase.__index = TestCase TestCase.message = message -- add the message method

TestCase.renderMethods = { -- Keys in this table are values of the "format" option, values are the -- method for rendering that format. columns = 'renderColumns', rows = 'renderRows', tablerows = 'renderRows', inline = 'renderInline', cells = 'renderCells', default = 'renderDefault' }

function TestCase.new(invocationObj, options, cfg) local obj = setmetatable({}, TestCase) obj.cfg = cfg

-- Separate general options from template options. Template options are -- numbered, whereas general options are not. local generalOptions, templateOptions = {}, {} for k, v in pairs(options) do		local prefix, num if type(k) == 'string' then prefix, num = k:match('^(.-)([1-9][0-9]*)$') end if prefix then num = tonumber(num) templateOptions[num] = templateOptions[num] or {} templateOptions[num][prefix] = v		else generalOptions[k] = v		end end

-- Set general options generalOptions.showcode = yesno(generalOptions.showcode) generalOptions.showheader = yesno(generalOptions.showheader) ~= false generalOptions.showcaption = yesno(generalOptions.showcaption) ~= false generalOptions.collapsible = yesno(generalOptions.collapsible) generalOptions.notcollapsed = yesno(generalOptions.notcollapsed) generalOptions.wantdiff = yesno(generalOptions.wantdiff) obj.options = generalOptions

-- Preprocess template args for num, t in pairs(templateOptions) do		if t.showtemplate ~= nil then t.showtemplate = yesno(t.showtemplate) end end

-- Set up first two template options tables, so that if only the -- "template3" is specified it isn't made the first template when the -- the table options array is compressed. templateOptions[1] = templateOptions[1] or {} templateOptions[2] = templateOptions[2] or {}

-- Allow the "template" option to override the "template1" option for -- backwards compatibility with Module:Testcase table. if generalOptions.template then templateOptions[1].template = generalOptions.template end

-- Add default template options if templateOptions[1].template and not templateOptions[2].template then templateOptions[2].template = templateOptions[1].template .. '/' .. obj.cfg.sandboxSubpage end if not templateOptions[1].template then templateOptions[1].title = mw.title.getCurrentTitle.basePageTitle end if not templateOptions[2].template then templateOptions[2].title = templateOptions[1].title:subPageTitle(			obj.cfg.sandboxSubpage		) end

-- Remove template options for any templates where the showtemplate -- argument is false. This prevents any output for that template. for num, t in pairs(templateOptions) do		if t.showtemplate == false then templateOptions[num] = nil end end

-- Check for missing template names. for num, t in pairs(templateOptions) do		if not t.template and not t.title then error(obj:message( 'missing-template-option-error', num, num ), 2)		end end

-- Compress templateOptions table so we can iterate over it with ipairs. templateOptions = (function (t)		local nums = {}		for num in pairs(t) do			nums[#nums + 1] = num		end		table.sort(nums)		local ret = {}		for i, num in ipairs(nums) do			ret[i] = t[num]		end		return ret	end)(templateOptions)

-- Don't require the __TEMPLATENAME__ magic word for nowiki invocations if -- there is only one template being output. if #templateOptions <= 1 then templateOptions[1].requireMagicWord = false end

mw.logObject(templateOptions)

-- Make the template objects obj.templates = {} for i, options in ipairs(templateOptions) do		table.insert(obj.templates, Template.new(invocationObj, options)) end

-- Add tracking categories. At the moment we are only tracking templates -- that use any "heading" parameters or an "output" parameter. obj.categories = {} for k, v in pairs(options) do		if type(k) == 'string' and k:find('heading') then obj.categories['Test cases using heading parameters'] = true elseif k == 'output' then obj.categories['Test cases using output parameter'] = true end end

return obj end

function TestCase:getTemplateOutput(templateObj) local output = templateObj:getOutput if self.options.resetRefs then mw.getCurrentFrame:extensionTag('references') end return output end

function TestCase:templateOutputIsEqual -- Returns a boolean showing whether all of the template outputs are equal. -- The random parts of strip markers (see Help:Strip markers) are -- removed before comparison. This means a strip marker can contain anything -- and still be treated as equal, but it solves the problem of otherwise -- identical wikitext not returning as exactly equal. local function normaliseOutput(obj) local out = obj:getOutput -- Remove the random parts from strip markers. out = out:gsub('(\127\'"`UNIQ.-)%-%x+%-(QINU`"\'\127)', '%1%2') return out end local firstOutput = normaliseOutput(self.templates[1]) for i = 2, #self.templates do		local output = normaliseOutput(self.templates[i]) if output ~= firstOutput then return false end end return true end

function TestCase:makeCollapsible(s) local title = self.options.title or self.templates[1]:makeHeader if self.options.titlecode then title = self.templates[1]:getInvocation('kbd') end local isEqual = self:templateOutputIsEqual local root = mw.html.create('div') root :addClass('mw-collapsible') :css('width', '100%') :css('border', 'solid silver 1px') :css('padding', '0.2em') :addClass(self.options.notcollapsed == false and 'mw-collapsed' or nil) if self.options.wantdiff then root :tag('div') :css('background-color', isEqual and 'yellow' or '#90a8ee') :css('font-weight', 'bold') :css('padding', '0.2em') :wikitext(title) :done else if self.options.notcollapsed ~= true or false then root :addClass(isEqual and 'mw-collapsed' or nil) end root :tag('div') :css('background-color', isEqual and 'lightgreen' or 'yellow') :css('font-weight', 'bold') :css('padding', '0.2em') :wikitext(title) :done end root :tag('div') :addClass('mw-collapsible-content') :newline :wikitext(s) :newline return tostring(root) end

function TestCase:renderColumns local root = mw.html.create if self.options.showcode then root :wikitext(self.templates[1]:getInvocation) :newline end

local tableroot = root:tag('table')

if self.options.showheader then -- Caption if self.options.showcaption then tableroot :addClass(self.options.class) :cssText(self.options.style) :tag('caption') :wikitext(self.options.caption or self:message('columns-header')) end

-- Headers local headerRow = tableroot:tag('tr') if self.options.rowheader then -- rowheader is correct here. We need to add another th cell if -- rowheader is set further down, even if heading0 is missing. headerRow:tag('th'):wikitext(self.options.heading0) end local width if #self.templates > 0 then width = tostring(math.floor(100 / #self.templates)) .. '%'		else width = '100%' end for i, obj in ipairs(self.templates) do			headerRow :tag('th') :css('width', width) :wikitext(obj:makeHeader) end end

-- Row header local dataRow = tableroot:tag('tr'):css('vertical-align', 'top') if self.options.rowheader then dataRow:tag('th') :attr('scope', 'row') :wikitext(self.options.rowheader) end -- Template output for i, obj in ipairs(self.templates) do		if self.options.output == 'nowiki+' then dataRow:tag('td') :newline :wikitext(self.options.before) :wikitext(self:getTemplateOutput(obj)) :wikitext(self.options.after) :wikitext('') :wikitext(mw.text.nowiki(self.options.before or "")) :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) :wikitext(mw.text.nowiki(self.options.after or "")) :wikitext(' ') elseif self.options.output == 'nowiki' then dataRow:tag('td') :newline :wikitext(mw.text.nowiki(self.options.before or "")) :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) :wikitext(mw.text.nowiki(self.options.after or "")) else dataRow:tag('td') :newline :wikitext(self.options.before) :wikitext(self:getTemplateOutput(obj)) :wikitext(self.options.after) end end return tostring(root) end

function TestCase:renderRows local root = mw.html.create if self.options.showcode then root :wikitext(self.templates[1]:getInvocation) :newline end

local tableroot = root:tag('table') tableroot :addClass(self.options.class) :cssText(self.options.style)

if self.options.caption then tableroot :tag('caption') :wikitext(self.options.caption) end

for _, obj in ipairs(self.templates) do		local dataRow = tableroot:tag('tr') -- Header if self.options.showheader then if self.options.format == 'tablerows' then dataRow:tag('th') :attr('scope', 'row') :css('vertical-align', 'top') :css('text-align', 'left') :wikitext(obj:makeHeader) dataRow:tag('td') :css('vertical-align', 'top') :css('padding', '0 1em') :wikitext('→') else dataRow:tag('td') :css('text-align', 'center') :css('font-weight', 'bold') :wikitext(obj:makeHeader) dataRow = tableroot:tag('tr') end end -- Template output if self.options.output == 'nowiki+' then dataRow:tag('td') :newline :wikitext(self:getTemplateOutput(obj)) :wikitext('') :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) :wikitext(' ') elseif self.options.output == 'nowiki' then dataRow:tag('td') :newline :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) else dataRow:tag('td') :newline :wikitext(self:getTemplateOutput(obj)) end end

return tostring(root) end

function TestCase:renderInline local arrow = mw.language.getContentLanguage:getArrow('forwards') local ret = {} for i, obj in ipairs(self.templates) do		local line = {} line[#line + 1] = self.options.prefix or '* ' if self.options.showcode then line[#line + 1] = obj:getInvocation('code') line[#line + 1] = ' ' line[#line + 1] = arrow line[#line + 1] = ' ' end if self.options.output == 'nowiki+' then line[#line + 1] = self:getTemplateOutput(obj) line[#line + 1] = '' line[#line + 1] = mw.text.nowiki(self:getTemplateOutput(obj)) line[#line + 1] = ' ' elseif self.options.output == 'nowiki' then line[#line + 1] = mw.text.nowiki(self:getTemplateOutput(obj)) else line[#line + 1] = self:getTemplateOutput(obj) end ret[#ret + 1] = table.concat(line) end if self.options.addline then local line = {} line[#line + 1] = self.options.prefix or '* ' line[#line + 1] = self.options.addline ret[#ret + 1] = table.concat(line) end return table.concat(ret, '\n') end

function TestCase:renderCells local root = mw.html.create local dataRow = root:tag('tr') dataRow :css('vertical-align', 'top') :addClass(self.options.class) :cssText(self.options.style)

-- Row header if self.options.rowheader then dataRow:tag('th') :attr('scope', 'row') :newline :wikitext(self.options.rowheader or self:message('row-header')) end -- Caption if self.options.showcaption then dataRow:tag('th') :attr('scope', 'row') :newline :wikitext(self.options.caption or self:message('columns-header')) end

-- Show code if self.options.showcode then dataRow:tag('td') :newline :wikitext(self:getInvocation('code')) end

-- Template output for i, obj in ipairs(self.templates) do		if self.options.output == 'nowiki+' then dataRow:tag('td') :newline :wikitext(self.options.before) :wikitext(self:getTemplateOutput(obj)) :wikitext(self.options.after) :wikitext('') :wikitext(mw.text.nowiki(self.options.before or "")) :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) :wikitext(mw.text.nowiki(self.options.after or "")) :wikitext(' ') elseif self.options.output == 'nowiki' then dataRow:tag('td') :newline :wikitext(mw.text.nowiki(self.options.before or "")) :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) :wikitext(mw.text.nowiki(self.options.after or "")) else dataRow:tag('td') :newline :wikitext(self.options.before) :wikitext(self:getTemplateOutput(obj)) :wikitext(self.options.after) end end

return tostring(root) end

function TestCase:renderDefault local ret = {} if self.options.showcode then ret[#ret + 1] = self.templates[1]:getInvocation end for i, obj in ipairs(self.templates) do		ret[#ret + 1] = ' ' if self.options.showheader then ret[#ret + 1] = obj:makeHeader end if self.options.output == 'nowiki+' then ret[#ret + 1] = self:getTemplateOutput(obj) .. '' .. mw.text.nowiki(self:getTemplateOutput(obj)) .. ' '		elseif self.options.output == 'nowiki' then ret[#ret + 1] = mw.text.nowiki(self:getTemplateOutput(obj)) else ret[#ret + 1] = self:getTemplateOutput(obj) end end return table.concat(ret, '\n\n') end

function TestCase:__tostring local format = self.options.format local method = format and TestCase.renderMethods[format] or 'renderDefault' local ret = self[method](self) if self.options.collapsible then ret = self:makeCollapsible(ret) end for cat in pairs(self.categories) do ret = ret .. string.format('', cat) end return ret end

--- -- Nowiki invocation class ---

local NowikiInvocation = {} NowikiInvocation.__index = NowikiInvocation NowikiInvocation.message = message -- Add the message method

function NowikiInvocation.new(invocation, cfg) local obj = setmetatable({}, NowikiInvocation) obj.cfg = cfg invocation = mw.text.unstrip(invocation) -- Decode HTML entities for <, >, and ". This means that HTML entities in	-- the original code must be escaped as e.g. &lt;, which is unfortunate,	-- but it is the best we can do as the distinction between <, >, " and <, -- >, " is lost during the original nowiki operation. invocation = invocation:gsub('<', '<') invocation = invocation:gsub('>', '>') invocation = invocation:gsub('"', '"')	obj.invocation = invocation	return obj end

function NowikiInvocation:getInvocation(options) local template = options.template:gsub('%%', '%%%%') -- Escape "%" with "%%" local invocation, count = self.invocation:gsub(		self.cfg.templateNameMagicWordPattern,		template	) if options.requireMagicWord ~= false and count < 1 then error(self:message( 'nowiki-magic-word-error', self.cfg.templateNameMagicWord ))	end return invocation end

function NowikiInvocation:getOutput(options) local invocation = self:getInvocation(options) return mw.getCurrentFrame:preprocess(invocation) end

--- -- Table invocation class ---

local TableInvocation = {} TableInvocation.__index = TableInvocation TableInvocation.message = message -- Add the message method

function TableInvocation.new(invokeArgs, nowikiCode, cfg) local obj = setmetatable({}, TableInvocation) obj.cfg = cfg obj.invokeArgs = invokeArgs obj.code = nowikiCode return obj end

function TableInvocation:getInvocation(options) if self.code then local nowikiObj = NowikiInvocation.new(self.code, self.cfg) return nowikiObj:getInvocation(options) else return require('Module:Template invocation').invocation(			options.template,			self.invokeArgs		) end end

function TableInvocation:getOutput(options) if (options.template:sub(1, 7) == '#invoke') then local moduleCall = mw.text.split(options.template, '|', true) local args = mw.clone(self.invokeArgs) table.insert(args, 1, moduleCall[2]) return mw.getCurrentFrame:callParserFunction(moduleCall[1], args) end return mw.getCurrentFrame:expandTemplate{ title = options.template, args = self.invokeArgs } end

--- -- Bridge functions -- -- These functions translate template arguments into forms that can be accepted -- by the different classes, and return the results. ---

local bridge = {}

function bridge.table(args, cfg) cfg = cfg or mw.loadData(DATA_MODULE)

local options, invokeArgs = {}, {} for k, v in pairs(args) do		local optionKey = type(k) == 'string' and k:match('^_(.*)$') if optionKey then if type(v) == 'string' then v = v:match('^%s*(.-)%s*$') -- trim whitespace end if v ~= '' then options[optionKey] = v			end else invokeArgs[k] = v		end end

-- Allow passing a nowiki invocation as an option. While this means users -- have to pass in the code twice, whitespace is preserved and < etc. -- will work as intended. local nowikiCode = options.code options.code = nil

local invocationObj = TableInvocation.new(invokeArgs, nowikiCode, cfg) local testCaseObj = TestCase.new(invocationObj, options, cfg) return tostring(testCaseObj) end

function bridge.nowiki(args, cfg) cfg = cfg or mw.loadData(DATA_MODULE)

local code = args.code or args[1] local invocationObj = NowikiInvocation.new(code, cfg) args.code = nil args[1] = nil -- Assume we want to see the code as we already passed it in. args.showcode = args.showcode or true local testCaseObj = TestCase.new(invocationObj, args, cfg) return tostring(testCaseObj) end

--- -- Exports ---

local p = {}

function p.main(frame, cfg) cfg = cfg or mw.loadData(DATA_MODULE)

-- Load the wrapper config, if any. local wrapperConfig if frame.getParent then local title = frame:getParent:getTitle local template = title:gsub(cfg.sandboxSubpagePattern, '') wrapperConfig = cfg.wrappers[template] end

-- Work out the function we will call, use it to generate the config for -- Module:Arguments, and use Module:Arguments to find the arguments passed -- by the user. local func = wrapperConfig and wrapperConfig.func or 'table' local userArgs = require('Module:Arguments').getArgs(frame, {		parentOnly = wrapperConfig,		frameOnly = not wrapperConfig,		trim = func ~= 'table',		removeBlanks = func ~= 'table'	})

-- Get default args and build the args table. User-specified args overwrite -- default args. local defaultArgs = wrapperConfig and wrapperConfig.args or {} local args = {} for k, v in pairs(defaultArgs) do		args[k] = v	end for k, v in pairs(userArgs) do		args[k] = v	end

return bridge[func](args, cfg) end

function p._exportClasses -- For testing return { Template = Template, TestCase = TestCase, NowikiInvocation = NowikiInvocation, TableInvocation = TableInvocation } end

return p

title: Module:Template test case


text:
Module:Template test case/data

--[[ SPDX-FileCopyrightText: © 2014 Mr. Stradivarius

SPDX-License-Identifier: CC-BY-SA-3.0 AND GFDL-1.3-or-later

This module processes configuration data for use in  `Module:Template test case'. It is loaded from the main module with mw.loadData. ]]

local cfg = require('Module:Template test case/config')

local function escapePattern(s) s = s:gsub('%p', '%%%0') return s end

-- Escape config items that need to be used as patterns. Doing it here is more -- efficient, as mw.loadData saves them from having to be computed for every -- test case on a page. cfg.templateNameMagicWordPattern = escapePattern(cfg.templateNameMagicWord) cfg.sandboxSubpagePattern = '/' .. escapePattern(cfg.sandboxSubpage) .. '$'

return cfg

title: Module:Template test case/data


text:
Module:Template test case/config

--[[ SPDX-FileCopyrightText: © 2014-2016 Mr. Stradivarius

SPDX-License-Identifier: CC-BY-SA-3.0 AND GFDL-1.3-or-later

This module holds configuration data for `Module:Template test case'. ]]

return {

--- -- Options ---

-- The magic word used in place of the template name when making nowiki -- invocations. templateNameMagicWord = '__TEMPLATENAME__',

-- The subpage that sandboxes are typically stored on. Used when loading -- wrapper template config and when guessing the sandbox template name. sandboxSubpage = 'sandbox',

--- -- Messages ---

msg = {

-- The default header for test cases rendered in columns. ['columns-header'] = 'Side by side comparison',

-- The error message to use if a templaten option is missing. -- $1 - the number of the missing template option. ['missing-template-option-error'] = "one or more options ending in '$1' " .. "were detected, but no 'template$1' option was found",

-- The error message to use if a nowiki invocation is used but the template -- name magic word is not found. -- $1 - the value of the template name magic word ['nowiki-magic-word-error'] = "the template invocation must include '$1' in " .. "place of the template name",

},

--- -- Wrapper template config. -- The wrapper template config is a table with wrapper template names as keys, -- and subtables containing two fields: --  func - the function name to be used with that template. This must be a --      function exported by the main module. This is optional: the default --      value is "table". --  args - a table of default arguments to be used with that template. This is --      is optional. ---

wrappers = { ['Template:Test case'] = {}, ['Template:Testcase table'] = { args = {_format = 'columns'} },	['Template:Testcase rows'] = { args = {_format = 'rows'} },	['Template:Test case nowiki'] = { func = 'nowiki' },	['Template:Nowiki template demo'] = { func = 'nowiki', args = {showheader = false, showtemplate2 = false} },	['Template:Collapsible test case'] = { args = {_collapsible = true} },	['Template:Collapsible 2 test case'] = { args = {_collapsible = true, _wantdiff = true} },	['Template:Inline test case'] = { args = {_format = 'inline', _showcode = true} }, },

--- -- End config ---

}

title: Module:Template test case/config


text:
User:Akibewa/sandbox

Beatrice Akite is a writer and an educator.

title: User:Akibewa/sandbox


text:
Module:Template invocation

--[[ SPDX-FileCopyrightText: © 2014 Mr. Stradivarius

SPDX-License-Identifier: CC-BY-SA-3.0 AND GFDL-1.3-or-later

This module provides functions for making MediaWiki template invocations. ]]

local checkType = require('libraryUtil').checkType

local p = {}

--        Name:  p.name --     Purpose:  Find a template invocation name from a page name or a --                mw.title object. -- Description:  This function detects whether a string or a mw.title --               object has been passed in, and uses that to find a --                template name as it is used in template invocations. --  Parameters:  title - full page name or mw.title object for the --               template (string or mw.title object) --     Returns:  String

function p.name(title) if type(title) == 'string' then title = mw.title.new(title) if not title then error("invalid title in parameter #1 of function 'name'", 2) end elseif type(title) ~= 'table' or type(title.getContent) ~= 'function' then error("parameter #1 of function 'name' must be a string or a mw.title object", 2) end if title.namespace == 10 then return title.text elseif title.namespace == 0 then return ':' .. title.prefixedText else return title.prefixedText end end

--        Name:  p.invocation --     Purpose:  Construct a MediaWiki template invocation. -- Description:  This function makes a template invocation from the --               name and the arguments given. Note that it isn't --               perfect: we have no way of knowing what whitespace was --               in the original invocation, the named parameters will be --                alphabetically sorted, and any parameters with duplicate keys --               will be removed. --  Parameters:  name - the template name, formatted as it will appear --                   in the invocation. (string) --               args - a table of template arguments. (table) --               format - formatting options. (string, optional) --                   Set to "nowiki" to escape, curly braces, pipes and --                   equals signs with their HTML entities. The default --                   is unescaped. --     Returns:  String

function p.invocation(name, args, format) checkType('invocation', 1, name, 'string') checkType('invocation', 2, args, 'table') checkType('invocation', 3, format, 'string', true)

-- Validate the args table and make a copy to work from. We need to	-- make a copy of the table rather than just using the original, as -- some of the values may be erased when building the invocation. local invArgs = {} for k, v in pairs(args) do		local typek = type(k) local typev = type(v) if typek ~= 'string' and typek ~= 'number' or typev ~= 'string' and typev ~= 'number' then error("invalid arguments table in parameter #2 of " ..			"'invocation' (keys and values must be strings or numbers)", 2) end invArgs[k] = v	end

-- Get the separators to use. local seps = { openb = '', pipe = '|', equals = '=' }	if format == 'nowiki' then for k, v in pairs(seps) do			seps[k] = mw.text.nowiki(v) end end

-- Build the invocation body with numbered args first, then named. local ret = {} ret[#ret + 1] = seps.openb ret[#ret + 1] = name for k, v in ipairs(invArgs) do		if type(v) == 'string' and v:find('=', 1, true) then -- Likely something like 1=foo=bar which needs to be displayed as a named arg. else ret[#ret + 1] = seps.pipe ret[#ret + 1] = v			invArgs[k] = nil -- Erase the key so that we don't add the value twice end end local keys = {} -- sort parameter list; better than arbitrary order for k, _ in pairs(invArgs) do		keys[#keys + 1] = k	end table.sort(keys, function (a, b)			-- Sort with keys of type number first, then string.			if type(a) == type(b) then				return a < b			elseif type(a) == 'number' then				return true			end		end) for _, v in ipairs(keys) do -- Add named args based on sorted parameter list ret[#ret + 1] = seps.pipe ret[#ret + 1] = tostring(v) ret[#ret + 1] = seps.equals ret[#ret + 1] = invArgs[v] end ret[#ret + 1] = seps.closeb

return table.concat(ret) end

return p

title: Module:Template invocation


text:
Module:Protect

--[[ SPDX-FileCopyrightText: © 2018 Petr Matas

SPDX-License-Identifier: CC-BY-SA-3.0 AND GFDL-1.3-or-later ]]

local function processResult(options, success, ...) if not success then local message = tostring(... or '(no message)') if options.removeLocation then message = string.gsub(message, '^Module:[^:]+:%d+: ', '', 1) end return string.format(options.errFormat, message) end return ... end

local function protect(func, errFormat, options) if type(errFormat) == 'table' then options = options or errFormat errFormat = nil end options = mw.clone(options) or {} options.errFormat = errFormat or options.errFormat or 'Error: %s' if not options.raw then options.errFormat = ' ' .. options.errFormat .. ' '	end options.removeLocation = options.removeLocation == nil or options.removeLocation return function (...) return processResult(options, pcall(func, ...)) end end

return protect

title: Module:Protect


text: Template:Test case

title: Template:Test case


text: Practice Problems in LOLGraphics/Printable version


text:
Category:Template test cases

Pages where changes to heavily-used templates made on sandbox pages can be evaluated after being parsed, side-by-side with the original code, before publishing.

title: Category:Template test cases


text:
Cookbook:Masyaura (Nepali Fermented Vegetable Balls)

Masyaura are Nepali fermented sun-dried vegetable balls made with a combination of minced vegetables and black lentils. The choice of vegetables is mostly taro, yam, and colocasia leaf. As finding fresh vegetables year-round was hard in the earlier days, masyaura become an alternative nutritious food item when fresh vegetables weren’t available. It also can be compared with soy-chunks, though soy-chunks are made from soybeans and masyaura is made with minced vegetables.

Ingredients

 * 4 cups black lentil flour
 * 2 cups minced vegetables (e.g. taro, yam, colocasia leaf)

Procedure

 * 1) Place the lentil flour in a mixing bowl, and add enough water to make a thick paste.
 * 2) Mix in the vegetables.
 * 3) Cover the bowl and leave it overnight. This allows the paste to absorb the moisture completely and go through slight fermentation, which gives a nice flavor to the product.
 * 4) In the morning, make small balls or nuggets by using your hand, and place them on a tray. Wet your hand often with water, which helps prevent the paste from sticking to your hand. The balls should not touch each other.
 * 5) Place the tray in the direct sun to allow them to dry. It will take around three days to completely sun-dy, and it might take even longer on less sunny or cloudy days. Keep it indoors during the night to speed up the drying process.
 * 6) Once they are completely dried, keep them in an airtight container store for several months.

Notes, tips, and variations

 * You can also use whole black lentils instead of lentil flour. In this case, soak them in the water for several hours, remove the outer layer, drain water, and then grind them to a thick paste.
 * In Nepali culture, cooked masyaura is Served with cooked rice.


text:
User:Lovepeacejoy404/sandbox

=Web applications in React, Bootstrap, MongoDB, Express=

title: User:Lovepeacejoy404/sandbox


text:
User talk:Wallflowernepal

FYI, when creating pages about cooking manuals or recipes, the correct namespace is cookbook.Cheers--Synoman Barris (discuss • contribs) 12:51, 12 February 2022 (UTC)

title: User talk:Wallflowernepal


text:
Web applications in React, Bootstrap, MongoDB, Express

In three tier architecture of a web application there is a presentation layer that represents the Front-end of the application made in Javascript, Css, Html or in the current javascript frameworks: React, Angular, Vue etc. and CSS framework: Bootstrap, Bulma etc. The presentation layer connects with the business logic layer or web server built in Java, Ruby, Phyton, Php etc. or with Node Express and the related Node modules. Finally, the business logic layer connects with the data access layer, i.e. with the MySql, Postgresql or MongoDB database, constituting the Back-End of the application and returning the requested information to the client, i.e. the Front-End of the application.

In this book, we will build a React-Bootstrap front-end, which connects to a Node Express web server, which in turn connects to a MongoDB database of stock items thus creating a three tier architecture.


text:
Template:Select skin/doc

This template generates trasncludable links to change the skin for the current (or any) page. In particular, this template is transcluded into Testcases notice.

Usage

 * Select skin shows just the horizontal list of skins:
 * The boolean view parameter adds "View this page in the skin:" when given a value that evaluates to True:

 * One unnamed/positional parameter can be used with view to include a linked article:
 * Finally, the style parameter can be used to add CSS styling:

Technical
You can also temporarily set the skin for the current page manually by appending the following to its URL:
 * for normal cases, and
 * if the URL already contains an equals sign (=).

title: Template:Select skin/doc


text:
Web applications in React, Bootstrap, MongoDB, Express/Create a MongoDB database locally

from here: https://docs.mongodb.com/manual/administration/install-community/ in this way the MongoDB server is started in the url 127.0.0.1 at port 27017 In this way the database we will use will be called: db_items
 * 1) Install MongoDB Community Edition on your PC
 * 2) Create a folder named mongo_database on proprio pc and a subfolder under it named data_items
 * 3) Open a terminal in the mongo_database folder and type:
 * 4) Open another terminal in the mongo_database folder and type in sequence:
 * 5)Before starting the web server that we will create, the MongoDB server must be started with instruction 3)


text:
Practice Problems in LOLGraphics/Solution to Problem II

Code
HAI 3.4 0 1 IM IN UR CODE EXECUTIN UR KOMANDZ I HAS A TWO BYTE DAT IZ CALLED X DIS IZ MY LABEL! IT IZ KALLED START PLZ ASK TEH USR 2 GIMME A TWO BYTE X PLZ PRINT TWO BYTE X PLZ ASK CEILIN KAT 2 CHEK IZ X >8999 IF CEILIN KAT IZ NODDING PLZ RUN 9000 PLZ ASK CEILIN KAT 2 CHEK IZ X >7999 IF CEILIN KAT IZ NODDING PLZ RUN 8000 PLZ ASK CEILIN KAT 2 CHEK IZ X >6999 IF CEILIN KAT IZ NODDING PLZ RUN 7000 PLZ ASK CEILIN KAT 2 CHEK IZ X >5999 IF CEILIN KAT IZ NODDING PLZ RUN 6000 PLZ ASK CEILIN KAT 2 CHEK IZ X >4999 IF CEILIN KAT IZ NODDING PLZ RUN 5000 PLZ ASK CEILIN KAT 2 CHEK IZ X >3999 IF CEILIN KAT IZ NODDING PLZ RUN 4000 PLZ ASK CEILIN KAT 2 CHEK IZ X >2999 IF CEILIN KAT IZ NODDING PLZ RUN 3000 PLZ ASK CEILIN KAT 2 CHEK IZ X >1999 IF CEILIN KAT IZ NODDING PLZ RUN 2000 PLZ ASK CEILIN KAT 2 CHEK IZ X/nowiki>>999 IF CEILIN KAT IZ NODDING PLZ RUN 1000 PLZ ASK CEILIN KAT 2 CHEK IZ X >899 IF CEILIN KAT IZ NODDING PLZ RUN 900 PLZ ASK CEILIN KAT 2 CHEK IZ X >799 IF CEILIN KAT IZ NODDING PLZ RUN 800 PLZ ASK CEILIN KAT 2 CHEK IZ X >699 IF CEILIN KAT IZ NODDING PLZ RUN 700 PLZ ASK CEILIN KAT 2 CHEK IZ X >599 IF CEILIN KAT IZ NODDING PLZ RUN 600 PLZ ASK CEILIN KAT 2 CHEK IZ X >499 IF CEILIN KAT IZ NODDING PLZ RUN 500 PLZ ASK CEILIN KAT 2 CHEK IZ X >399 IF CEILIN KAT IZ NODDING PLZ RUN 400 PLZ ASK CEILIN KAT 2 CHEK IZ X >299 IF CEILIN KAT IZ NODDING PLZ RUN 300 PLZ ASK CEILIN KAT 2 CHEK IZ X >199 IF CEILIN KAT IZ NODDING PLZ RUN 200 PLZ ASK CEILIN KAT 2 CHEK IZ X >99 IF CEILIN KAT IZ NODDING PLZ RUN 100 PLZ ASK CEILIN KAT 2 CHEK IZ X >89 IF CEILIN KAT IZ NODDING PLZ RUN 90 PLZ ASK CEILIN KAT 2 CHEK IZ X >79 IF CEILIN KAT IZ NODDING PLZ RUN 80 PLZ ASK CEILIN KAT 2 CHEK IZ X >69 IF CEILIN KAT IZ NODDING PLZ RUN 70 PLZ ASK CEILIN KAT 2 CHEK IZ X >59 IF CEILIN KAT IZ NODDING PLZ RUN 60 PLZ ASK CEILIN KAT 2 CHEK IZ X >49 IF CEILIN KAT IZ NODDING PLZ RUN 50 PLZ ASK CEILIN KAT 2 CHEK IZ X >39 IF CEILIN KAT IZ NODDING PLZ RUN 40 PLZ ASK CEILIN KAT 2 CHEK IZ X >29 IF CEILIN KAT IZ NODDING PLZ RUN 30 PLZ ASK CEILIN KAT 2 CHEK IZ X >19 IF CEILIN KAT IZ NODDING PLZ RUN 20 PLZ ASK CEILIN KAT 2 CHEK IZ X >9 IF CEILIN KAT IZ NODDING PLZ RUN 10 PLZ ASK CEILIN KAT 2 CHEK IZ X >8 IF CEILIN KAT IZ NODDING PLZ RUN 9 PLZ ASK CEILIN KAT 2 CHEK IZ X >7 IF CEILIN KAT IZ NODDING PLZ RUN 8 PLZ ASK CEILIN KAT 2 CHEK IZ X >6 IF CEILIN KAT IZ NODDING PLZ RUN 7 PLZ ASK CEILIN KAT 2 CHEK IZ X >5 IF CEILIN KAT IZ NODDING PLZ RUN 6 PLZ ASK CEILIN KAT 2 CHEK IZ X >4 IF CEILIN KAT IZ NODDING PLZ RUN 5 PLZ ASK CEILIN KAT 2 CHEK IZ X >3 IF CEILIN KAT IZ NODDING PLZ RUN 4 PLZ ASK CEILIN KAT 2 CHEK IZ X >2 IF CEILIN KAT IZ NODDING PLZ RUN 3 PLZ ASK CEILIN KAT 2 CHEK IZ X >1 IF CEILIN KAT IZ NODDING PLZ RUN 2 PLZ ASK CEILIN KAT 2 CHEK IZ X >0 IF CEILIN KAT IZ NODDING PLZ RUN 1 PLZ PRINT TEXT PLZ PRINT TEXT ======== PLZ GOTO LABEL START IM OUTTA UR CODE IM IN UR SUBPROGRAM DAT IZ KALLED 9000 PLZ TYPE TEXT ,Θ PLZ SET TWO BYTE X X-9000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 8000 PLZ TYPE TEXT ,Η PLZ SET TWO BYTE X X-8000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 7000 PLZ TYPE TEXT ,Ζ PLZ SET TWO BYTE X X-7000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 6000 PLZ TYPE TEXT ,Ϛ PLZ SET TWO BYTE X X-6000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 5000 PLZ TYPE TEXT ,Ε PLZ SET TWO BYTE X X-5000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 4000 PLZ TYPE TEXT ,Δ PLZ SET TWO BYTE X X-4000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 3000 PLZ TYPE TEXT ,Γ PLZ SET TWO BYTE X X-3000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 2000 PLZ TYPE TEXT ,Β PLZ SET TWO BYTE X X-2000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 1000 PLZ TYPE TEXT ,Α PLZ SET TWO BYTE X X-1000 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 900 PLZ TYPE TEXT Ϡʹ PLZ SET TWO BYTE X X-900 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 800 PLZ TYPE TEXT Ωʹ PLZ SET TWO BYTE X X-800 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 700 PLZ TYPE TEXT Ψʹ PLZ SET TWO BYTE X X-700 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 600 PLZ TYPE TEXT Χʹ PLZ SET TWO BYTE X X-600 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 500 PLZ TYPE TEXT Φʹ PLZ SET TWO BYTE X X-500 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 400 PLZ TYPE TEXT Υʹ PLZ SET TWO BYTE X X-400 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 300 PLZ TYPE TEXT Τʹ PLZ SET TWO BYTE X X-300 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 200 PLZ TYPE TEXT Σʹ PLZ SET TWO BYTE X X-200 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 100 PLZ TYPE TEXT Ρʹ PLZ SET TWO BYTE X X-100 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 90 PLZ TYPE TEXT Ϟʹ PLZ SET TWO BYTE X X-90 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 80 PLZ TYPE TEXT Πʹ PLZ SET TWO BYTE X X-80 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 70 PLZ TYPE TEXT Οʹ PLZ SET TWO BYTE X X-70 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 60 PLZ TYPE TEXT Ξʹ PLZ SET TWO BYTE X X-60 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 50 PLZ TYPE TEXT Νʹ PLZ SET TWO BYTE X X-50 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 40 PLZ TYPE TEXT Μʹ PLZ SET TWO BYTE X X-40 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 30 PLZ TYPE TEXT Λʹ PLZ SET TWO BYTE X X-30 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 20 PLZ TYPE TEXT Κʹ PLZ SET TWO BYTE X X-20 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 10 PLZ TYPE TEXT Ιʹ PLZ SET TWO BYTE X X-10 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 9 PLZ TYPE TEXT Θʹ PLZ SET TWO BYTE X X-9 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 8 PLZ TYPE TEXT Ηʹ PLZ SET TWO BYTE X X-8 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 7 PLZ TYPE TEXT Ζʹ PLZ SET TWO BYTE X X-7 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 6 PLZ TYPE TEXT Ϛʹ PLZ SET TWO BYTE X X-6 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 5 PLZ TYPE TEXT Εʹ PLZ SET TWO BYTE X X-5 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 4 PLZ TYPE TEXT Δʹ PLZ SET TWO BYTE X X-4 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 3 PLZ TYPE TEXT Γʹ PLZ SET TWO BYTE X X-3 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 2 PLZ TYPE TEXT Βʹ PLZ SET TWO BYTE X X-2 IM OUTTA UR SUBPROGRAM IM IN UR SUBPROGRAM DAT IZ KALLED 1 PLZ TYPE TEXT Αʹ PLZ SET TWO BYTE X X-1 IM OUTTA UR SUBPROGRAM

Explanation
This code is pretty easy to understand. First it check is the number more than 8999 (which is the same as more than or equal to 9000 since LOLGraphics only supports integer numbers). If it is, it types “,Θ” to the screen since this is the Greek numeral for 9000 then subtracts 9000 from the number. Then it repeats the process for 8000, 7000, ..., 2000, 1000, 900, 800, ..., 200, 100, 90, 80, ..., 20, 10, 9, 8, ..., 2, 1. Notice that when it gets to 1, the code checks is the number greater than 0.

One more important thing to put attention on is the delay between two commands. The default is 100 milliseconds (0.1 sec) but since there are many checks, it was reduced to 1 millisecond (0.001 sec).

Alternative ways
There is another more complex way to write the same code. First divide the number by 1000, then check if it’s a digit 1-9 (not 0), print the relevant character. Then divide the number by 100, but notice that then you will have to subtract 10 from the number until you get a number smaller than 10 which makes this way extremely inefficient. Notice though that since LOLGrapics only supports integer numbers the result of 9999/1000 will be 9 not 9.999 or 10 like you would expect. Readers familiar with programming will recall that other programming languages also take only the integer part when dividing integer variables.


text:
Rust for the Novice Programmer/Strings

A short aside about strings
Strings created with the double quotes "" around some text such as the "Hello world!" we created at the start are stored inside the program that is created when we compile it. This means it is easy to find and use when running the program. However, this means we can't change them while the program is running, since all the memory in the program is laid out a certain way. Also strings and characters can be quite complicated. This is because there are so many things to handle; the world isn't just english characters! There are many different languages, many having different alphabets. There are emojis and other special characters. Different formats of storing these different characters will use differing amounts of bytes. If you're working with English, most of the time you will use a standard called UTF-8 which uses 8 bits(one byte) for most common English characters.

In Rust, there are two string types to represent some of this behaviour. There is a primitive type 'str' which is just the starting point and the length of the string. This means that a reference to an str, or &str can be a reference to a string that is stored within the program. The other string type is String, which stores a string like a vector of bytes. Since it is a vector we can modify and change the string. Also since a vector has a start point and a length, we can easily convert a String to a &str, although to convert the other way requires us to clone the data over.

First, let's try to create a function that takes in two Strings and returns one combined String: What is the push_str function? Do we have to memorise every function that we want to use? No, this is what documentation is for. Documentation provides us a way to find the structs, functions including types as well as often a written explanation of what they do and how to use them. The documentation for the push_str function is found here: https://doc.rust-lang.org/std/string/struct.String.html#method.push_str. If we read it, we see this: The pub means it is public, so we can use it. The &mut self is shorthand for 'self: &mut String' so it is using self as a mutable reference to a String and it takes in a string of type &str. Since it is a reference, we can use &string2 as an &str since it dereferences to one easily.

Next: /Basic Maths Testing Program

title: Rust for the Novice Programmer/Strings


text:
Talk:Pathology/Introduction: Pathology

Fayyaa

title: Talk:Pathology/Introduction: Pathology


text:
User:Lib.zip/sandbox

Hi There

title: User:Lib.zip/sandbox


text:
Turkish/Imperative and Optitative

This article covers making commands, requests and suggestions in Turkish. The main two tenses used, Imperative and Optitative, were separate tenses in Turkish, but Imperative is no longer usable in the first person, and Optitative is no longer usable in the second and third persons, merging these two tenses into one big suggestive tense.

But it is not simple, since many persons have multiple endings possible, as will be shown later.

Formation
gitmek is used below as an example of a verb ending in a consonant, and uyumak is used as a verb ending in vowel. The reader should already be familiar with vowel harmony rules, in order to apply these endings to any verbs as desired. {| style="width: 50%"
 * width="25%"|

Similar to the future tense, the optative in the first persons may take many other forms in colloquial speech, some of which are shown below. Interrogative forms are only possible in the first and the third persons.
 * }

2nd person imperative
The second person imperatives are the same as in English.

 * Gel! Come!
 * Susun! Shut up! (plural)

 * Kalemimi ver! Give my pencil back!

The doubla plural -(y)ınız is used in very formal contexts. Rules and directives often use this tense. Often used in conjunction with lütfen (please).

 * Çimlere basmayınız. Do not step on the grass.
 * Köpeği beslemeyiniz. Do not feed the dog.
 * Aşağıdaki karenin alanını bulunuz. Find the area of the square down below.

Haydi/Hadi meaning come on, is often used with this tense.

 * Haydi, başla! Come on, start!

-sana and -sanıza
These suffixes are used for persuasive utterances, rather than fully-fledged commands. They may also be used as reminders, or just as a more polite version of the normal imperatives. Haydi/hadi may also be used in conjunction with them.

 * Haydi, gitsenize! Come on, just go there!
 * İki saniye baksana. Can you help me? Literally: Look here for two seconds.

However, some people do not consider -sana polite enough, in which case you may use the following:

Aorist in interrogative form
Using the aorist in the interrogative form is a very polite way of asking someone to do something. Often used in conjunction with lütfen (please).

 * Tuzu uzatır mısın? Can you pass me the salt?
 * Lütfen pencereyi açar mısın? Could you please open the window?

Future tense used imperatively
Future tense may also be used imperatively, used by a more powerful/authoritative person for actions they want the speaker to perform. This usage is often considered rude.

 * Eve dönmeden çöpü atacaksın, tamam mı? You shall take out the garbage before I come home, okay?

Second person optatives
Second person optatives are rarely used in modern Turkish, and have a meaning similar to the conditional suffix used optatively. Third person optatives are almost never used.

3rd person imperatives (horatory)
Speakers of western languages may not be familiar with using imperative in the third person, and it does not have a direct translation into English. It is used to give commands to third persons. A loose translation could be let him ..., tell him to ..., he should ....

 * Çabuk buraya gelsin. Tell him to come here quickly.
 * Önce baban sana izin versin. Your father should give permission first.

Interrogative version of this suffix may be loosely translated as should he ...?.
 * Allah sizi korusun. Let god protect you!

 * O da gelsin mi? Should he come as well?

Optatives
The optative tenses may be translated into English as let me/us .... Often used in conjunction with haydi/hadi.

 * Haydi, kahveye gidelim! Come on, let's go to the café!
 * Önce ödevimi bitireyim. Let me finish my homework first.

Interrogative version of this suffix may be translated as shall I/we ...?.

 * Dönelim mi? Shall we return?

title: Turkish/Imperative and Optitative


text: Category:Book:Practice Problems in LOLGraphics


text:
User talk:MdsShakil

Welcome!
Welcome to Wikibooks, MdsShakil!

 First steps tutorial Wikibooks is for collaborative development of free textbooks.

You do not need technical skills to contribute. You can easily change most books. Please introduce yourself, and let us know what interests you.

If you already contribute at other Wikimedia projects, our Wikimedia Orientation should quickly get you started. (Would you like to provide feedback on this message?)

  Getting help   Made a mistake?   Goodies, tips and tricks
 * Read the Using Wikibooks book for a friendly introduction to the project, or our help pages for more information.
 * You can get friendly help from the community in the user assistance room or our IRC channel.
 * Upload freely licensed files to Wikimedia Commons. You may request permission to upload fair use files locally. Please include author and source information and a non-free use rationale for non-free files.
 * You can restore a previously saved version.
 * Pages should follow the  naming convention.
 * Need to rename a page? Use the move tab (is available once your account is 4 days old - until then, ask for help).
 * To request a page be deleted, add to the top of the page.
 * Was a page you made deleted? Please read the deletion policy, and check the deletion log to find out why. Also check the RFD archives if applicable. You can request undeletion at WB:RFU, or ask the administrator who deleted the page.
 * Please fill in the edit summary and preview your edits before saving.
 * Sign your name on discussion pages by typing ~~~~
 * User scripts can make many tasks easier. Look at the Gadgets tab of my preferences; check off the boxes for the scripts you want, and hit save!

Thanks for your contributions -- Jules (Mrjulesd) 13:34, 13 February 2022 (UTC)

title: User talk:MdsShakil


text:
User talk:Quinlan83

Welcome!
Welcome to Wikibooks, Nima Tayebian!

 First steps tutorial Wikibooks is for collaborative development of free textbooks.

You do not need technical skills to contribute. You can easily change most books. Please introduce yourself, and let us know what interests you.

If you already contribute at other Wikimedia projects, our Wikimedia Orientation should quickly get you started. (Would you like to provide feedback on this message?)

  Getting help   Made a mistake?   Goodies, tips and tricks
 * Read the Using Wikibooks book for a friendly introduction to the project, or our help pages for more information.
 * You can get friendly help from the community in the user assistance room or our IRC channel.
 * Upload freely licensed files to Wikimedia Commons. You may request permission to upload fair use files locally. Please include author and source information and a non-free use rationale for non-free files.
 * You can restore a previously saved version.
 * Pages should follow the  naming convention.
 * Need to rename a page? Use the move tab (is available once your account is 4 days old - until then, ask for help).
 * To request a page be deleted, add to the top of the page.
 * Was a page you made deleted? Please read the deletion policy, and check the deletion log to find out why. Also check the RFD archives if applicable. You can request undeletion at WB:RFU, or ask the administrator who deleted the page.
 * Please fill in the edit summary and preview your edits before saving.
 * Sign your name on discussion pages by typing ~~~~
 * User scripts can make many tasks easier. Look at the Gadgets tab of my preferences; check off the boxes for the scripts you want, and hit save!

Thanks for your contributions -- Jules (Mrjulesd) 13:34, 13 February 2022 (UTC)

title: User talk:Quinlan83


text:
Web applications in React, Bootstrap, MongoDB, Express/Create a Node Express web server locally that connects to a MongoDB database

Installing Node.Js and Express Generator

 * 1) Node.Js is a Javascript framework that also allows you to write server-side code and therefore, in particular, allows you to create an Express web server. npm (short for Node Package Manager [2]) is the default package manager for the Node.js JavaScript runtime environment. It consists of a command line client, also called npm, and an online database of public and private packages, called the npm registry.
 * 2) Install Node.js on your PC from here: https://nodejs.org/
 * 3) In the terminal type:

to verify that both node and npm have been installed correctly on your system.

 * 4) Install the express-generator package via npm by typing in the terminal:

 * 5) Open the terminal in Documents and type:

 * 6) In the ItemsServer folder, type in the terminal:

 * 7) In the ItemsServer folder type in the terminal to start the server:

 * 8) In the browser at the link http://localhost:3000/ the message "Welcome to Express" will appear.A Node Express web server is done !

API REST and MONGOOSE
The requests that the client makes to the server are made through the REST API. For example, if you are making a GET request, you are asking the server to return a resource. If you make a POST request, the server is being asked to create a new resource. If you are making a PUT request, you are asking the server to update an existing resource. And if you issue a DELETE request, the server is being asked to delete the resource identified by the particular URI. The exchange of data between client and server takes place in JSON format, which represents the standard with which Javascript objects are built. For example, the URL http://localhost:3000/items/234 means that the client asks the server to act on item 234, on which it is possible to perform GET, PUT or DELETE operations. To implement REST API calls on the MongoDB database you need to install mongoose:

 * 1) In the ItemsServer folder open a terminal and type:

 * 2) Create a mongoose schema for the document items of the MongoDB database and insert it in the items.js file inside the models sub folder of the ItemServer folder

 * 3) In the subFolder routes of ItemServer, create the file itemRouter.js :

 * 4) Edit the app.js file in the ItemsServer folder :

 * 5) We created a Node Express web server that connects locally to a MongoDB database.


text:
User:Awesomehuman/sandbox

Tonality refers to the systematic organization of pitches in a piece of music that is centered around a particular note called the tonic. This system allows us to describe to any note/chord in a piece in terms of its relationship to the tonic. At a basic level, we may center the discussion of tonality around the notion of a key, which is the set of pitches that construct the foundation of a piece's melody and harmony. At a more advanced level, we may discuss tonality in terms of chords, which are sets of multiple pitches meant to be played simultaneously.

title: User:Awesomehuman/sandbox


text:
Wikibooks:Featured books/Nominations/Addition/Genes, Technology and Policy

Genes, Technology and Policy
I nominate this book as this book as featured book is hidden gem and also one of the few books in Wikibooks that are well researched and constructed.

 * As nominator Encik Tekateki (discuss • contribs) 07:55, 30 June 2019 (UTC)
 * It's written well enough, but does not have the length that a featured book usually has, kind of a weak oppose here. With some development I think it would be ready. Leaderboard (discuss • contribs) 16:18, 11 February 2021 (UTC)