text:
She Is Young
Original Korean Webcomic http://www.lezhin.com/comic/she_is_young Original Korean Webcomic http://www.lezhin.com/comic/she_is_young Show less
UNBALANCE X 3
DICE: THE CUBE THAT CHANGES EVERYTHING
Dongtae is rock bottom in everything. Looks, grades, life, everything. But all that might change.
A new teacher enters an all-girls high school and as he tours around he sees a female student sleeping in a classroom. When she wakes up, however, she suddenly kisses him...
Ch229.6
Ichijou Raku is an honor student with outstanding grades and an admirable conduct. He has a female childhood friend named Kirisaki Chitoge who has slightly better grades than him, or so he says. They haven't been getting along since the day of Christmas after they gave each other gifts, and they also have opposite taste of things. Their families are currently on a war because of business rivalry, the boy's family are Yakuzas while the girl's family are gangsters. The leaders of both groups would like to get along, because if the war will not be stopped, there will surely be many casualties, and the problem is that their underlings wouldn't listen to them, so they decided on something that will make them cooperate, they want Ichijou and Kirisaki to become lovers so that their families will come to an understanding with each other. But the problem doesn't end there, both families already know that the two of them don't get along with each other, so to make sure they are really lovey-dovey with each other, the followers of each party followed them on their date, from watching movies, to singing in the karaoke bar, shopping and in the amusement park. Will the two of them become official lovers and make their families get along? Or will their families continue to fight and create many troubles along with it?
When ace high school detective Kudou Shinichi is fed a mysterious substance by a pair of nefarious men in black--poof! He is physically tranformed into a first grader. Until he can find a cure for his miniature malady, he takes on the pseudonym Conan Edogawa and continues to solve all the cases that come his way.
This is the story about two kids, Rokuro and Benio, and their lives as onmyouji warriors.
Three Years ago a Hero sealed a Hell Gate. The Seal has been weakening ever since, sporadically letting Monsters through. After a big Group of Monsters entered the Country through a Hell Gate, the profession of Heroes was needed again. Touka Scott a small Radish Farmer in the southern Town of Cheza is prepared for sudden Monster Attacks. He built himself a hidden Pittrap with Bamboo spikes, to lure unsuspecting Monsters in if they ever try to Attack the Village. Suddenly a Monster attacks. Touka tries to lure it into the Trap with freshly roasted Bacon, but the Monster dislikes this type of Meat. Thankfully the local Hero saves the Village from the Monster in the nick of Time. The hungry Hero tries to grab a bite of Bacon after vanquishing the Monster, only to stumble into Toukas Pittrap and Die. After causing the local Heros Death, Touka is forced to take matters into his own Hands to protect the Region from attacking Monsters.
Ookii Onnanoko wa Daisuki Desu ka?
Tachibana Souta is a bit of a multi-talented freeter who gets by from one part-time job to the next, his standout characteristic being that he's a bit short. One day he's roped by his older sister into 'serving' their college's volleyball team, of which she's a member. She also happens to be at least 6 and 1/2 ft. tall, as do the rest of the team's members who take quite the interest in Souta.
TEN COUNT
When the President got into an accident, Shirotani Tadaomi met Kurose. On their very first meeting, Kurose could tell right away that Shirotani is Mysophobic and said that it's pretty bad while suggesting it would be better to consult a doctor about it. Shirotani was left perturbed by the encounter. Who is Kurose? And how was he able to tell Shirotani's condition?
Arifureta Shokugyou de Sekai Saikyou
Among the class transported to another world, Nagumo Hajime is an ordinary male student who didn't have ambition nor aspiration in life, and thus called "Incompetent" by his classmates.The class was summoned to become heroes and save a country from destruction. Students of the class were blessed with cheat specifications and cool job class, however, it was not the case with Hajime, with his profession as a "Synergist", and his very mediocre stats."Synergist", to put it in another word was just artisan class. Being the weakest, he then falls to the depth of the abyss when he and his classmates were exploring a dungeon. What did he find in the depth of the abyss, and can he survive?
VELVET KISS
From Manga Updates Nitta Shin finds himself saddled with a sudden, crushing debt. His loan agent tells him he can escape repayment if he keeps a particular woman company. He gradually learns that this arrangement might not be as easy as he once thought.
Beings from a different dimension have started a war with mankind. To counter this threat an academy called Genetics that trains warriors that can wield special weaponry and armor was formed. Kazuya Aoi decided to enroll in this school because of a promise with his sister, a former warrior who died in battle. There he meets Satellizer El Bridgette nicknamed "Contact Prohibition Queen" due to her solitary demeanor but also the top student of the academy whose battle simulation streak was undefeated until he came...and changed her.
TSUKI NO SHIPPO
Sometimes it seems like Usagi is hopeless. Sure, she's good with healing herbs, but she's the granddaughter of the leader of a prestigious ninja village and she's such a klutz that she's never made it out of the kiddie class. Finally frustrated with Usagi's lack of progress, her grandfather sends her to marry a local lord and have lots of ninja babies. But the lord has no interest in her or her child bearing potential! After years of goofing around, Usagi is finally determined to reach her goals - she's going to become a ninja and capture her true love's heart!
Hunter Age
Maou no Hajimekata
"I do not trust humans. They'll betray you without fail." Aur, the man who had obtained the ability and right to become the Maou at the end of his life of research. Summoning the succubus Lilu, he then sets out on creating his own domain, a gigantic labyrinthine dungeon… The misanthropic Maou taking on the world, the curtain rises on a dark harem fantasy!
FUTARI ECCHI
An excellent and very educational series. About a newlywed couple who are virgins and their comedic ups and downs in learning how to have sex. Not really a hentai, though there are scenes which can be called hentai. Tastfully rendered taboo themes. A funny "how to" guide for sex illiterate and experts. WARNING: For a mature or an adult audience only due to extreme nudity and sexual situations.
A Returner's Magic Should Be Special
Sun-Ken Rock
Ken, a young Japanese guy, is in love with a young Korean girl Yumin. He followed her in Korea and wants to become a policeman just like her. But then, he finds himself at the head of a local gang. What will happen to Ken?
100 WAYS OF AN EXORCIST
Soon after transferring to a new school, Mayu Kodabutsu recieves a love letter from a cute girl named Yuuko Hai... Expecting the envy of his classmates, Mayu is surprised to recieve condolences instead. You see, Yuuko Hai is no ordinary 5th grader... She's an exorcist. And Mayu is destined to experience her 100 terrifying ways.
Erotic Fairy Tales - The Little Mermaid
Lotte has always been fascinated by the surface world, but mermaids are forbidden to ever have contact with humans. One day, she finds a handsome young man adrift in a shipwreck and takes him to shore. More obsessed with the surface than ever, Lotte jumps at the chance to become human when a demon named J offers her a magic potion. But there's more to J's potion—and his intentions—than meets the eye...
Hare-kon
Koharu, tired of all the men in her life being lying, married philanderers, decides to move back home, away from the city. Once there she finds her family saddled with a huge debt and no way out, until a handsome but creepy stranger offers to pay the debt, at the same time asking her to marry him. But, as if things weren't crazy enough, he already has two wives!
OOKAMI-SAN TO SHICHININ NO NAKAMATACHI
A love comedy parodying fairy tales such as "Little Red Riding Hood," "The Ant and the Grasshopper," etc. Ryoko Ookami (the eponymous Ookami-san) is a spunky high school girl. She is a member of a "fixer" club so called Otogi High School Bank. She fixes the school's problems with her partner Ringo Akai ("Little Red Riding Hood")
The fundamental gist of the Kekkaishi revolves around Yoshimori Sumimura, the next heir to the Sumimura family, as he lives as both a student by day, as well as a kekkaishi, literally meaning 'barrier master' as he utilizes barriers to defeat demons who wish to harness the power ... The fundamental gist of the Kekkaishi revolves around Yoshimori Sumimura, the next heir to the Sumimura family, as he lives as both a student by day, as well as a kekkaishi, literally meaning 'barrier master' as he utilizes barriers to defeat demons who wish to harness the power of the particular land they live around, Karasumori. As Yoshimori dwelves deeper into master the arts of kekkai to grow to be stronger and to have the ability to safeguard his childhood friend/kekkai/family rival/one-sided love interest, the mysteries surrounding the origins of Karasumori slowly deepens... Show less
RE:MARINA
Rinosuke's useless and vagrant father is now dead. Now, at the age of 16, he is completely alone and will have to quit school to survive. On the night his father dies, a naked woman with large breasts falls from the sky and lands on top of him. She introduces herself as Sakamoto Marina, the future wife of the future Rinosuke. She states that she used a time machine to come back to the past, and start a new life with the younger Rinosuke. Rinosuke's new life with his future(?) wife begins.
FENG QI CANG LAN
When playing a virtual reality game called Cang Lan, Xiao Wan gets pushed off a cliff. She ends up in another game world. What will happen to Xiao Wan?
RAKUDAI KISHI NO EIYUUTAN
In a time and place where one's soul can be morphed into a weapon, there are modern-day magicians called Mage-Knights. Although Kurogane Ikki is a student at an institution that trains Mage-Knights, he has no particular talent in magic and is labeled the "Failure Knight" or "Worst One." Getting way less than average marks in the scorings, he was forced to repeat a year. But with the arrival of a new head of the institution, a new rule was created: knights whose abilities are compatible, as decided by the board, must share rooms and attend practice and training together throughout their school years to bring up their abilities to the max. It is a rule to implement the absolute verdict of ability. Ikki's roommate, Stella Vermillion, turns out to be a princess of another foreign country. Stella is a Rank A knight: the type of genius in magic who only appears once a decade. When Ikki walked in on her while she was changing her clothes, it caused a huge misunderstanding (since neither yet knew of the new rule) which eventually ended up in a duel between the two of them. The punishment (or as some might see it, the prize) of the losing side is Eternal Submission to the winning side. Forced to live the same room and practice magic together throughout all their school years, how will Stella and Ikki's relationship evolve?
Mahou Sensei Negima!
Ten-year-old prodigy Negi Springfield, has just graduated from magic academy. He dreams of becoming a master wizard. Instead he's sent to Japan to teach English... at an all - girls high school! All the students are delighted with their cute new teacher- except for Asuna, who resents Negi for replacing the teacher she secretly has a crush on.
KOI TO USO
Lies are forbidden and love is doubly forbidden. In the near future, when young people in Japan turn sixteen, they are assigned a marriage partner by the government. People don't have to go through the trouble of looking for someone, and everyone accepts that the country will find a compatible partner to make them happy. Yukari Nejima is fifteen years old. He lives in a small corner of the country, and just can't seem to get ahead in life. Both academically and athletically he's below average. But in within him, he hides a heart burning with passion! In this world in which love is forbidden, what will happen to him when he falls in love? - DeNa
Red River is about a fifteen-year old Japanese girl named Yuri Suzuki, who is magically transported to Hattusa, the capital of the Hittite Empire in Anatolia. She was summoned by Queen Nakia who means to use Yuri as a human sacrifice. Yuri\'s blood is the key element needed in placing a curse upon the princes of the land so that they will perish, leaving Nakia\'s son as the sole heir to the throne. - from wikipedia
COHABITATION!
Friend's girlfriend, YoonHee, that's how it all started
Rokudou no Onna-tachi
Rokudou is a loser, and everyone knows it. He gets picked on at school, gets snide looks from passersby, and can only muster up the courage to complain in secret with his equally hapless friends. Looking to turn his life around, he desperately uses an ancestral artifact passed down in his family for generations: a scroll that is capable of subduing all demons. However, in the modern age it has a different effect—it makes all bad girls fall in love with him.
Tatsumi is a fighter who just got robbed by a pretty girl, but his luck seems to be looking up, as another pretty girl has taken him in. What he doesn't know is that this girl is about to be visited by a family of assassins (including the girl who robbed him) and they might be the good guys, and be recruiting...
TSUGUMOMO
From AnimeSigma: Kazuya Kagami never goes anywhere without the precious "Sakura Obi" his mother gave him. One day a beautiful, kimono-clad girl named Kiriha appeared before him. Kiriha naturally began to live with Kazuya in his room. Then there's Chisato, Kazuya's childhood friend with glasses and a ponytail, who meddles in his affairs. Soon there's also an overprotective older sister who seems to want to take baths with him. Jumble in a huge-chested priestess, a good-looking sorceress named Kokuyoura, beautiful women, and hot girls, and Kazuya's happy, embarrassing, confusing life begins…
Even though this is a sequel to To-Love-Ru, all of our main characters make an appearance along with some new additions. Rito continues to be caught in over the top uncensored ecchi scenarios. The alien Deviluke sisters still use their unique abilities to grab Rito's love confession. Nana and Momo have transferred into the school and meet Mea, who seems to be a worry free and joyful girl. Momo in particular wants to share Rito and create a harem for him. While scheming her plan, she confronts Golden Darkness also know as Yami (The Japanese name is Konjiki no Yami). They are interrupted by possessed students who begin to fight with abnormal strength. Now the new plot line appears as a mysterious person who's in control of the students tests Yami's assassination skills. Who is this new enemy? (From Mangahelpers)
HIRUNAKA NO RYUUSEI
A 15-year-old country girl has to move to Tokyo to live with her uncle due to her father's transfer. She bumps into a mysterious man. Who is he? And why is he working in her uncle's café?


Most patients need to work within a budget to meet their goals for good dental health. Our scheduling policy, and payment options are designed to work with each patient's special needs . . . policies that will allow them to realize the full value of their dental care now . . . and in the future.


This page may be freely linked to, but not duplicated in any fashion, without the written consent of Michael Stephenson.
Welcome to the Northumberland County Genealogy and History Site.
I have included a link for researchers to subscribe to the Northumberland County Genealogy and History mailing list, which will serve subscribers who have an Genealogical or Historical interests in Northumberland County.


text:
Ferries, World News 12th December 2017
Ferry News – In Brief
Attica Holdings S.A. (Attica Group), announced on 26th October that it has reached an agreement with Minoan Lines S.A. (Minoan Lines) for the acquisition by Attica Group of 37,667,504 shares in Hellenic Seaways Maritime S.A., representing 48.53% of the share capital of the latter, for a cash consideration of Euro 78.5 million. The transaction also features the sale of the 30,902gt/2002 built Superfast XII to an operator within the Grimaldi Group for a cash consideration of Euro 74.5 million plus the sale of the 4,927gt/2005 built Highspeed 7 to Minoan Lines for a cash consideration of Euro 25 million.
Baleària is adding an 'eco fast ferry' with a capacity for 350 passengers to the Eivissa- Formentera service this December. This vessel is the first of a series of four being built by the Asturian shipbuilder Gondan. The four ferries will receive the names of the four natural elements, Eco Aqua (above), Eco Terra, Eco AireE and Eco Lux.
Bay Ferries, the operator of the high-speed ferry service that links Yarmouth with Portland, Maine has reported that it carried 41,623 passengers in 2017 despite engine trouble that reduced the number of crossings during the second season of operation. This is an increase compared to the 35,551 passengers conveyed in 2016 but well below the figures of 90,000 to 100,000 that Bay Ferries registered in 2007-2008 when it previously operated the service. However, the 8,127gt/2007 built Alakai (marketed as The Cat) sailed on only 84 round trips this year when 112 trips were scheduled following the failure of the ferry's starboard outer main engine on 28th June.
Bore Line's 19,094gt/1997 built Bore Bay (converted back to a Ro-Ro from life as UECC's Auto Bay) has been chartered by GNV for their Genoa/Civitavecchia to Napoli/Palermo/Malta service.
Brixham Express ceased trading on 25th October, closing the troubled Torquay- Brixham passenger ferry service across Torbay. The company had been unable to achieve a commercially successful service and decided that it was therefore irresponsible to continue. The service has soaked up millions of pounds of public funds and been plagued with the predictable weather related disruption, a badly delayed and totally unsuitable new ferry in the form of the Brixham Express and high operating costs when having to charter in alternative craft to operate the schedule. It was a valiant effort but was always doomed to failure in its year-round format.
Ferry News In Brief
Including Balearia, Condor Ferries, Irish Ferries and more

redpajama_set_name: RedPajamaCommonCrawl


text:
Iran: Navigating Regional Influence and a Potential U.S. Policy Reset
For Biden to reach a deal with Iran, the administration will need to address a host of difficult issues. While any changes in the U.S. policy towards Iran may have a significant impact, a nuclear deal might be a pipe dream.
'Strategic Patience' and Iran's "Resistance Axis": An Enduring Challenge for Biden's Administration
Iran and the "Resistance Axis" are poised for another round of "strategic patience," which, if ignored, will serve to the detriment of the United States, its allies and partners.
Israel at a Crossroad: What Is the Desired Policy Towards Renewed Negotiations with Iran?
A new Biden administration in the United States could mean a return to negotiations between Iran and the international community over its continued nuclear development. In the case of such negotiations, Israel will have to choose whether it wants to handle these negotiations like it handled negotiations for the JCPOA
Iran's Domestic Woes in Light of U.S. Pressure
Though the recent normalization deal between Israel and several Arab states certainly poses a new challenge to Iran, it is the unique combination of the past year's events that is pushing the Islamic Republic towards an existential crisis.
To Realize its Interests, Lebanon Must Navigate Away from Confrontation with Israel
On announcing the recent framework for Lebanese negotiations with Israel, mediated by the United States under the auspices of the UN, the Lebanese Speaker of Parliament Nabih Berri used language that marked a sharp departure from decades of vitriolic discourse aimed at the "Zionist Entity." Berri repeatedly spoke of the
Iran's Fear of the Popular Figure: The Execution of Navid Afkari
Navid Afkari, a 27 year-old Iranian wrestling champion who won numerous medals, had rarely lost a fight in his life. There was, however, one struggle he could not win. Following torture and a forced confession, Navid was executed earlier this month following a verdict by the Iranian Supreme Court. Navid
Nir Boms
Shayan Arya
The Baku Balance: How Azerbaijan Juggles Israel and Iran
The current conflict in the Caucasus between Azerbaijan and Armenia is an extraordinary case where Israel and Iran, while both claiming neutrality, are actually tilting toward the same side: Azerbaijan. Israel buys Azerbaijan's oil and sells it advanced weapons, now being used to deadly effect; while Iran proclaims its support
Israel and the UAE on Iran: Shared Foe, Different Perspectives
Given past developments, the UAE's and Israel's recent announcement of normalization in exchange for shelving annexation plans should come as no great surprise, even if the timing was unexpected. There remains, however, frequently understated differences between one aspect of this relationship often assumed to be a common denominator: Jerusalem's and
Immunity through Impunity: Hypocrisy and Systemic Racism in Iran's Legal System
Iranian leadership has callously exploited hot button issues for decades, capitalizing on the plight of regional groups like Palestinians and Shia minorities in the Gulf while maintaining a particular international focus on African American issues in the United States. Iranian officials, most notably Supreme Leader Ali Khamenei, make relentless speeches
Aaron Meyer
Rahim Hamid
The 25-Year Agreement between China and Iran: A Continuation of Previous Policy
The recently announced 25-year agreement between China and Iran appears to have become almost an urban myth among Middle East watchers. The importance of the agreement has been exaggerated and even become the subject of conspiracy theories. It has been both demonized as a "shameful treaty" that enables China to
Sheng Zhang
Iraqi Popular Opinion of Kadhimi Is Weakly Supportive, but Could Tip Either Way
While much ink has been spilled over whether Iran and the United States have a favorable or unfavorable opinion of new Iraqi Prime Minster Mustafa al-Kadhimi, the most important opinion is that of Iraqis. It is particularly important what Iraq's Shia population thinks of their new prime minister, as they
Karl Kaltenthaler
On the Murder of Husham al-Hashemi
On July 6, 2020, Iraq's most prolific security commentator Husham al-Hashemi was assassinated in Zayouna, a social melting pot neighborhood of east Baghdad. At 8:19 pm, he arrived outside his home, driving his own unarmored white SUV. Seconds before, two motorbikes pulled up, each carrying two young men. They knew
How Iraq and the United States Can Further the Strategic Dialogue
The United States and Iraq officially launched the bilateral strategic dialogue on June 11 as an opportunity to mend relations under the newly formed Iraqi government. While Iranian backed forces hoped for the initial meeting to produce dramatic results vis-a-vis the future of U.S. presence in the region, the first
The Influence of Coronavirus on Diplomatic Relations: Iran, China, Gulf Arabs, and India
During the pandemic, Iran's first reported cases on February 19 in the Qom province—the eventual epicentre for Iran— have demonstrated that Iran is not as isolated as it is often believed to be. Iran's health minister reported that the novel virus was brought there by an Iranian merchant who had
Manjari Singh
Iran Changes the Rules of the Game with Satellite Launch
On April 22, Iran announced the successful launch of its first Noor satellite into orbit by the IRGC after several previous failed attempts, a feat confirmed by NORAD. Despite the practical and scientific importance of this achievement, no less important is that the launch demonstrates Iran's ability to manufacture the
A Chernobyl Moment in Tehran
As several states seem to experiment with opening up, Iran has made headlines as one of the countries taking early steps towards a gradual reopening of the country. However, the Iranian regime's consistent mishandling of the crisis raises the question of whether this reopening too will be mismanaged, and whether


text:
Home·Browse·The First Road Maps, John Ogilby, 1697
The First Road Maps, John Ogilby, 1697
Image:The road-map showing part of the route between London and Welshpool, from John Ogilby's Britannia, published in 1675. Ogilby was the first to use the statute mile. The orientation is on each section of the road. Towns may have a correct, and a common name: 'Solihull vulgo Silhill', 'Birmingham vulgo Bromwicham'.
Image from: Local Studies and History, Birmingham Central Library
In medieval times there had been route-books; some maps showed towns on pilgrim routes, but there were neither precise measurements, nor details to guide the traveller. There were road maps for Germany as early as 1501, but Saxton's county maps in the 1570s did not include roads.
The first detailed road-maps of England and Wales were produced in 1675, with the publication of Britannia, 'a Geographical and Historical DESCRIPTION of the principal Roads thereof. Actually Administered and Delineated in a Century of Whole-Sheet Copper-Sculps.' John Ogilby, 1600-1676, only came to map-making towards the end of his life. First a dancer, then a dancing-master, he was then a manager and director of Dublin's theatre, returning to England in the 1640s. In the 1650s he translated and published classics such as Aesop's fables. He set up his own printing shop in London, and produced a series of travel atlases which included both maps and traveller's tales.
Ogilby desired to map the roads and counties of England and Wales. An advertisement in November 1971 announced that by Royal Command Ogilby was to 'make a particular Survey of every County'. He received sponsorship from the London Court of Aldermen, and from King Charles II and Queen Catherine. In the Museum of London there is a portrait of the King and Queen receiving Ogilby in Whitehall Palace, taken from Morgan's map of London, 1682. Ogilby supervised the surveyors, John Aubrey and Gregory King were involved.
Ogilby's maps are artistic, but they are also practical guides for the traveller. Ogilby had discussed the survey with Robert Hooke, and members of the Royal Society. This brought new standards of measurement, precision and verification. Hooke suggested that hills should be shown by lines sloping upwards on ascent, and downwards on the descent. There were town plans for larger towns. At the time of the map above Birmingham was a small market town, Shrewsbury was larger, important because of its position near the Welsh border. Specific landmarks are shown to help the traveller; 'Cole pitts' near Dudley, 'Gunners Oak', 'Lady Oake' and 'Great Oak' on different sections of the route.
« Previous in this sectionNext in this section »
Browse: Geography | Geology | Roads
Continue browsing this section
Maps and Map Making: the West Midlands Experience Early Warwickshire Maps The First Road Maps, John Ogilby, 1697 William Westley's Plan of Birmingham, 1731 William Westley's Prospect of Birmingham, 1732 Birmingham in 1751 Keys and Explanations Keys and Explanations Canal Maps Birmingham and the Country Around, 1798 Cartouches Birmingham in 1810 Tithe Maps


Bold Area Rugs Olive Green Sofa Living Room Contemporary With Rug Colors is part of great design ideas. Bold Area Rugs Olive Green Sofa Living Room Contemporary With Rug Colors was created by combining fantastic ideas, interesting arrangements, and follow the current trends in the field of that make you more inspired and give artistic touches. We'd be honored if you can apply some or all of these design in your wedding. believe me, brilliant ideas would be perfect if it can be applied in real and make the people around you amazed!
Bold Area Rugs Olive Green Sofa Living Room Contemporary With Rug Colors was posted in October 10, 2018 at 7:14 am. Bold Area Rugs Olive Green Sofa Living Room Contemporary With Rug Colors has viewed by 90 users. Click it and download the Bold Area Rugs Olive Green Sofa Living Room Contemporary With Rug Colors.
Area Rugs, Bold Area Rugs was posted May 22, 2017 at 3:42 pm by uebersee.us . More over Bold Area Rugs has viewed by 3741 visitor.


Free lessons, 7-layers oil painting. Classic painting. Canvas, oil.
The copy of A Coign of vantage by Alma-Tadema. The Seven-layer technique of oil painting.
The copy of Young Girl Defending Herself Against Cupid by Bouguereau. The Seven-layer technique of oil painting.
Shepherdess.The Seven-layer technique of oil painting.
PAINTING IN PROGRESS >>> (only russian).


Netflix is to back the forthcoming Paul Greengrass (Bloody Sunday) film about the 2011 terrorist attack in Norway carried out by far-right extremist Anders Behring Breivik, based on the book One Of Us by Åsne Seierstad.
The film will not only reconstruct the tragic events of 22nd July, but also show how the nation responded to the attacks. Meanwhile, NRK is planning a six-part drama about those who were indirectly affected by that day, and Erik Poppe (The King's Choice) begins filming next month on a fictional account which follows 72 minutes on Utøya.
The as yet untitled Paul Greengrass film goes into production this week with a budget of £20 million, and is slated to begin filming this autumn.


11th May 2017: Independent will produce ARCHIVE, the exciting and highly anticipated directorial debut of Gavin Rothery, concept designer of Duncan Jones's MOON. The project will be introduced to buyers in Cannes by Independent's sales division, who also sold MOON.
Theo James (Underworld, Allegiant, Divergent) is attached to play the lead role and a female co-star will be announced soon. Rothery, who has written the screenplay from his own original idea, was instrumental in the creative development and execution of MOON, where he first collaborated with Independent. Rothery also directed the short film The Last Man, which quickly amassed over 4 million views on YouTube.
Independent's Luc Roeg and Philip Herd (The Falling, We Need To Talk About Kevin) will produce. Director of Photography will be Laurie Rose (Free Fire, High-Rise, Stan & Ollie). VFX will be handled by Double Negative (Interstellar, Inception, Ex Machina).
2038. Two and a half years into a three-year research contract, George Almore is on the verge of a breakthrough. Stationed halfway up a snow-capped mountain near Kyoto at a secret facility codenamed 'The Garden', he has been working on a model that is a true human-equivalent android. His latest prototype is almost complete. But this most sensitive phase of his work is also the riskiest. Especially as George has an ulterior motive for his work that must be hidden at all costs: Being re-united with his dead wife, Jules.
Rothery is represented by Casarotto. Theo James is represented by Markham, Froggatt & Irwin and WME. Independent will represent worldwide rights to the film. Independent and WME will co-represent the film domestically.


text:
Bargain-bin shopping: Where Rockets may fit with remaining free agents
Ben DuBose
Ray Allen may hold the key for the Rockets and any upcoming roster moves in 2014 free agency.
Welcome to the annual NBA dead period.
The last free agent of significance to swap teams was Mo Williams, who joined Minnesota on a one-year, $3.75-million deal way back on July 28. Since then, the market has largely dried up as ring-chasing veterans appear to be taking their time in deciding if (and where) they'll play.
The good news is that the market may soon pick up. Shawn Marion visited Cleveland on Monday and looks to have more visits on the near-term horizon. Ray Allen gave multiple interviews to reporters this week outlining his process and priorities in making a decision.
If the Rockets want to get involved with either, they have a compelling case. Besides offering a ready-made team with two superstars and visions of contending, they also have more money for spending than most other contenders. The Rockets have most of the non-taxpayer mid-level exception (MLE), which should amount to near $4.8 million after spending a small portion to lock up second-round pick Nick Johnson for three years.
They also have the biannual exception (BAE), which allows them to sign a players at a salary starting near $2.1 million for up to two years. That was what they appeared to offer to Kostas Papanikolaou last month, before backing away when the Greek forward asked for more money, which would've significantly cut into the team's MLE.
So while the Rockets do have nearly all of both exceptions, there is a catch. The controversial decision to let Chandler Parsons walk to Dallas was made in large part due to a desire to maintain ample flexibility for the summer of 2015, which means the Rockets are unlikely to hand out a contract of more than one year (unless there's a team option). That insistence on a one-year deal appeared to play a big role in Jameer Nelson's choice to head to Dallas on a two-year contract, despite recruiting pitches from Houston and former teammate Dwight Howard.
The Rockets could also choose to hold over a small portion of exception money for the regular season, potentially giving them a leg up on veterans who are bought out by losing clubs. However, even if that's a consideration, there should still remain ample funds to use this summer. The team also has a $8.4 million traded-player exception (TPE) from the Jeremy Lin deal that could theoretically be used in a sign-and-trade, but there doesn't seem to be a remaining free agent in that price tier and it appears GM Daryl Morey will likely hold onto the TPE for future trade proposals.
Here's a look at where the club may stand with some of the marquee remaining free agents:
Why he fits: Despite leading the league in three-point attempts, the Rockets ranked only 15th in three-point accuracy. Other than newcomer Trevor Ariza, who shot a career-high 40.7% from behind the arc, no presumed Houston rotation player shot better than 36% from deep. Enter Allen, perhaps the most feared long-distance shooter in NBA history (40% career). He's already used to playing a smaller bench role on a contender, and at 39 years old with four NBA Finals trips under his belt, he brings a level of championship experience that the current Rockets lack.
Why he may not: Well, he's 39 and his game is clearly in some decline. He can still shoot well, but is it worth taking away minutes from the likes of Troy Daniels?
Verdict: This appears to be Houston's primary target. We know from the Houston Chronicle's Jonathan Feigen that the Rockets and Allen have talked. We know from Allen's interview earlier this week that he wants to play for a contender and is seeking more than a minimum contract. The only other contender to have comparable money to Houston is San Antonio, but the Spurs would have to boot Marco Belinelli from the rotation, and that seems unlikely. The bigger stumbling blocks would be the potential for Allen to retire and spend more time with his family, and whether he considers Kevin McHale the "great, veteran coach" he's said to be looking for. If Allen decides to play in 2014-15, the Rockets would seem to have a real chance.
Shawn Marion
Why he fits: There's only one remaining free agent who played at least 2,000 minutes for a playoff team last season. That's Shawn Marion, who remained a full-time starter in Dallas until Parsons' arrival pushed him out the door. At 36, he's still a good defender at both small forward and power forward, rebounds relatively well and manages to score in double figures on offense without demanding the ball. The Rockets had depth issues last year, and Marion would seem to be a reliable candidate for at least average production. Marion lives in Dallas with a family and presumably would like to be close to home.
Why he may not: At this stage of his career, Marion is losing a step and still isn't a good shooter from distance. That makes him more of a small-ball power forward than a small forward, especially in a system like the one in Houston that thrives on shooting and spacing the floor. And at the PF spot, the Rockets already have returning starter Terrence Jones, breakout candidate Jeff Adrien and high hopes for summer-league sensation Donatas Motiejunas. Marion could still play spot minutes at SF, of course, but the addition of Ariza should already go a long way toward shoring up last season's defensive deficiencies.
Verdict: How long will Marion wait? Specifically, will he wait longer than Allen? That's the real question. Marion's market doesn't appear to be strong at all. Last week, he told the Fort Worth Star-Telegram that he had had no contact with teams, and his free agency "tour" began this week with a visit to Cleveland, a team that can only offer him the league minimum. There haven't been any reported leaks of dialogue between Marion and the Rockets, which makes it appear that the Rockets have other priorities. Marion could be a fit if the Rockets miss on other targets, but it would depend on how long he's willing to let the process drag out. His plan this week to schedule visits could indicate that he's getting a bit antsy, which may not bode well for Marion in Houston.
Ramon Sessions
Why he fits: After trading Lin, the Rockets don't have an offensive anchor to their bench unit. Despite his faults, Lin was quite useful because of his ability to play the role of catalyst when James Harden was off the floor, and his penetration skills were crucial in sparking the ball movement that McHale craves. Perhaps second-year guard Isaiah Canaan and/or rookie Nick Johnson can develop into a scoring point guard of that caliber in time, but it's certainly not ideal for a title contender to rely on completely unproven talent in their rotation. It would appear that Sessions could be the perfect bridge. Long an analytics darling (PERs of 16.0, 17.7, 16.7 and 19.0 the last four seasons), Sessions is a foul-drawing machine and thrives on penetration opportunities. The Rockets have already reached out to Sessions in recent weeks.
Why he may not: Sessions isn't a good defensive player, and if the Rockets are sold on either Canaan or Johnson, they may choose to prioritize other positions.
Verdict: It may hinge on whether Sessions will take a cheaper short-term deal for the upside of added exposure from playing on a playoff team. Historically, Sessions has chosen the opposite. He's played on one playoff team in seven years, and in his last stint as a free agent, turned down better teams for a richer contract on the then-laughably-awful Charlotte Bobcats (now Hornets). Additionally, the lack of buzz around Sessions this summer would seem to indicate he's stalling in hopes of finding a better offer. Sessions would seem to fit well in Houston, but it will likely come down to whether he's willing to take the sort of one-year contract that Nelson would not. The answer to that is probably out of Houston's hands and depends on how the rest of the market values Sessions.
Why he fits: The young combo guard has been described by many as a potential superstar, and his negotiations with the Suns in restricted free agency have turned sour. It's bad enough now that Bledsoe appears to be threatening to take Phoenix's qualifying offer, which would allow him to become an unrestricted free agent in the summer of 2015 and leave the Suns for no compensation. The real logic behind such a move would seem to be leverage to get Phoenix to either raise its current offer (4 years, $48 million) or sign-and-trade Bledsoe to a team willing to meet his price tag. While the Rockets don't have the cap room to meet his demands outright, they could eventually become a viable trading partner. When the non-guaranteed salaries of Alonzo Gee ($3 million) and Scotty Hopson ($1.45 million) become eligible to be traded in larger packages come September, the Rockets could theoretically offer Phoenix a sign-and-trade package focused around young pieces and draft picks and use a combination of non-guaranteed deals to approach a first-year salary figure that Bledsoe may consider (though not the max he's said to be looking for). And after losing Channing Frye in free agency and adding Isaiah Thomas, the Suns appear to be one man deep in the backcourt and one man short in the front court. A trade to balance that disparity could make some sense.
Why he may not: Because Bledsoe wants a big contract and would require a sign-and-trade to acquire, it would essentially be a similar "all-in" move to the one the Rockets declined to make with Parsons. Is Morey that sold on him? Bledsoe has had a history of injuries, and while he's shown flashes of being an elite player, he certainly hasn't proven it on any sort of consistent basis.
Verdict: Too many ifs. For Bledsoe and the Rockets to have any shot, his situation would have to drag out into September. The Suns would have to be amenable to trading him to a conference rival. Bledsoe wouldn't be able to get the max deal he craves in Houston, either, even with a combination of non-guaranteed deals. The math isn't there. The only hope would be that Bledsoe would prefer a shorter-term, non-max deal to establish his value, much like Lance Stephenson opted for in Charlotte over a longer-term deal in Indiana. But even in that scenario, it would compromise much of Houston's flexibility, so it would depend on whether Morey sees Bledsoe as the type of cornerstone "Big 3" piece that he did not with Parsons. It's not impossible, but with many questions, it's unlikely.
Why he fits: After trading Omer Asik, the Rockets don't have a proven rim protector behind Howard. At one time, Emeka Okafor was just that. In his most recent season as an NBA player (2012-13 season), Okafor averaged 9.7 points, 8.8 rebounds and 1 block in 26 minutes per game in Phoenix. He missed the entire 2013-14 season with a herniated disc in his neck, but is said to be recovered and is still only 30 years old. Okafor isn't historically an injury-prone player, having played in at least 67 games in seven of nine seasons. A Houston native, he would likely jump at the opportunity to play for his hometown team.
Why he may not: Morey has sung the praises of recently-signed Joey Dorsey, who he labelled as one of the best defensive bigs in Europe. The team has also had fairly decent results playing Motiejunas at center, a position he largely played with success during the offseason NBA Summer League. In short, we don't know if Morey still considers backup center a position of concern.
Verdict: Will someone gamble on Okafor at more than the minimum? If so, the Rockets will probably be out of the race and focus on other positions. But if Okafor's situation lingers and accepting the minimum becomes a reality, he could become a worthwhile gamble before training camp.
Why he fits: Experience with the system. Garcia has played a part in the last two Houston playoff teams, and at 33, he was the team's elder statesman. Garcia was in and out of the team's rotation, depending on if his shot was in rhythm, but he certainly had his moments — especially against Kevin Durant and Oklahoma City, a team that always stands in Houston's way. At 6-foot-7, he has the versatility on defense to guard multiple positions.
Why he may not: The backup wing situation was bad enough in Houston that McHale turned to Troy Daniels in the playoffs despite getting almost zero experience in the regular season. And that came after the team traded for Jordan Hamilton at the trade deadline and briefly experimented with him in Garcia's role. In short, the Rockets were clearly not satisfied with Garcia in a prominent rotation role and were actively searching for upgrades.
Verdict: It seems unlikely. Garcia is a liked guy in the Houston locker room, and by all accounts Garcia enjoyed his time in Houston. But even if the pursuits of Allen and Marion fail, there's still Daniels, who the Rockets clearly hope is ready to take on a larger role this season. I'm sure Garcia would be welcomed back at the league minimum and as one of the team's final bench players, but it seems more likely that he'd head elsewhere in search of a defined role.
Houston Rockets Salary Cap Update
Rockets finalize deal to bring Kostas Papanikolaou to Houston


BMW has unveiled the high-performance sports car of tomorrow, the M4 coupe concept at the iconic annual Pebble Beach automobile weekend.
Painted in "Aurum Dust" exclusively developed for this model, the sport car resembles the production M4 and continues with BMW M's design language – strong in character, emotional and extremely dynamic. Large air inlets in the dynamic front, a swift design language in the side and a sporty, low rear give clear visual indication of the car's tremendous dynamic potential.
Other exterior changes include the BMW M double-bar kidney grille with twin round headlamps featuring LED technology. It also gets a redesigned M gill incorporated with Air Breather, combined with Air Curtain within the front apron helps ventilate the wheel arches. CFRP (carbon fiber reinforced plastics) elements such as the front splitter, the roof, or the rear diffuser underline the optimized lightweight concept down to the smallest detail. Also 20-inch wheels cover up the M carbon ceramic brakes.
On the rear the concept features two pair of carbon fiber tailpipes enclosed in a carbon fiber rear diffuser.
No details regarding the performance have been released.


text:
Q: RecyclerView with simple_list_item_multiple_choice inside of a DialogFragment In a simple test project at GitHub I display a RecyclerView with android.R.layout.simple_list_item_multiple_choice row layout:

In the SwapTilesDialogFragment I have implemented the popular "fragment interface" pattern and would like to pass selected rows through its doPositiveClick() method:
public class SwapTilesDialogFragment extends DialogFragment {

    public final static String TAG = "SwapTilesDialogFragment";

    private final static String ARG = "ARG";

    public interface MyListener {
        public void doPositiveClick();
        public void doNegativeClick();
    }

    private MyListener mListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if (context instanceof MyListener) {
            mListener = (MyListener) context;
        } else {
            throw new ClassCastException(context.toString() +
                    " must implement " + TAG + ".MyListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();

        mListener = null;
    }

    private class MyViewHolder
            extends RecyclerView.ViewHolder
            implements View.OnClickListener {

        public MyViewHolder(View v) {
            super(v);
            v.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            Toast.makeText(getContext(),
                    "You have clicked " + ((TextView) v).getText(),
                    Toast.LENGTH_SHORT).show();
        }
    }

    private RecyclerView mRecyclerView;
    private char[] mLetters;

    public static SwapTilesDialogFragment newInstance(char[] letters) {
        SwapTilesDialogFragment f = new SwapTilesDialogFragment();

        Bundle args = new Bundle();
        args.putCharArray(ARG, letters);
        f.setArguments(args);

        return f;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mLetters = getArguments().getCharArray(ARG);

        mRecyclerView = new RecyclerView(getContext());
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mRecyclerView.setAdapter(new RecyclerView.Adapter<MyViewHolder>() {

            @Override
            public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View v = LayoutInflater.from(parent.getContext()).inflate(
                        android.R.layout.simple_list_item_multiple_choice,
                        parent,
                        false);
                MyViewHolder vh = new MyViewHolder(v);
                return vh;
            }

            @Override
            public void onBindViewHolder(MyViewHolder vh, int position) {
                TextView tv = (TextView) vh.itemView;
                tv.setText(String.valueOf(mLetters[position]));
            }

            @Override
            public int getItemCount() {
                return mLetters.length;
            }
        });

        return new AlertDialog.Builder(getActivity())
                .setIcon(R.mipmap.ic_launcher)
                .setTitle(R.string.swap_tiles_title)
                .setView(mRecyclerView)
                .setPositiveButton(R.string.swap_tiles_ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                mListener.doPositiveClick();
                            }
                        }
                )
                .setNegativeButton(R.string.swap_tiles_cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                mListener.doNegativeClick();
                            }
                        }
                )
                .create();
    }
}

My problem:
How to display the checkmarks when user clicks a row in the RecyclerView and how/where to collect all selected rows before I call doPositiveClick()?

A: You can do something along the following:

Have an array to keep track of checked letters:
    private List<String> checkedLetters = new ArrayList<>();

Modify your listener:
 public interface MyListener {
    public void doPositiveClick(List<String> checkedLetters);
    public void doNegativeClick();
}

Your ViewHolder:
 private class MyViewHolder
        extends RecyclerView.ViewHolder
        implements View.OnClickListener {

    private CheckedTextView mCheckedText;

    public MyViewHolder(View v) {
        super(v);
        v.setOnClickListener(this);
        mCheckedText = (CheckedTextView)itemView;
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(getContext(),
                "You have clicked " + ((TextView) v).getText(),
                Toast.LENGTH_SHORT).show();

        toggle();
    }

    private void toggle(){

        if(mCheckedText.isChecked())
            checkedLetters.remove(LETTERS[getAdapterPosition()]);
        else
            checkedLetters.add(LETTERS[getAdapterPosition()]);

        mCheckedText.setChecked(!mCheckedText.isChecked());
    }
}'

Done. You can now retrieve the checked letters from your Activity

redpajama_set_name: RedPajamaStackExchange


text:
{-|
Module      : CSH.Eval.Model
Description : CSH Eval state representation data structures.
Copyright   : Stephen Demos, Matt Gambogi, Travis Whitaker, Computer Science House 2015
License     : MIT
Maintainer  : pvals@csh.rit.edu
Stability   : Provisional
Portability : POSIX

CSH.Eval.Model defines all data structures required for representing and
manipulating the system state. Please note that the CSH.Eval.DB.Schema module
has much stricter documentation regarding the objects, including constitutional
cross-references.
-}

module CSH.Eval.Model (
    -- * /Enum/-like Types
    Committee(..)
  , EvaluationType(..)
  , EvaluationStatus(..)
  , MemberStatus(..)
  , DuesStatus(..)
  , EventType(..)
  , ProjectType(..)

    -- * Top-level Objects
  , Member(..)
  , Event(..)
  , Project(..)
  , Evaluation(..)
  , Conditional(..)
  , FreshmanProject(..)
  , Packet(..)
  , Application(..)
  , Metric(..)
  , Review(..)
  , Interview(..)
  , Question(..)
  , Term(..)

    -- * Contexts
  , Eboard(..)
  , Room(..)
  , Queue(..)
  , Membership(..)
  , EventAttendee(..)
  , ProjectParticipant(..)
  , FreshmanProjectParticipant(..)
  , Signature(..)
  , ReviewMetric(..)
  , InterviewMetric(..)
  , Answer(..)
  , Dues(..)

  -- * Cache
  , IDCache
  , Cache(..)
  , defTxMode
  , CacheM
  , Cacheable
  , CacheError(..)
  , runCacheable
  , execCacheable
  ) where

import Control.Concurrent.MVar

import Control.Monad.Trans.Either
import Control.Monad.IO.Class

import Data.Maybe

import Data.List

import Data.Time.Clock
import Data.Time.Calendar

import Data.UUID

import Data.Word

import qualified Data.ByteString as B

import qualified Data.Text       as T

import qualified Data.Map        as M

import Hasql
import Hasql.Postgres

import System.Log.Logger

-- | Committees.
data Committee = Evals     -- ^ Evaluations
               | RnD       -- ^ Research and Development
               | Social    -- ^ Social
               | History   -- ^ House History
               | OpComm    -- ^ Operations/Communications
               | Imps      -- ^ House Improvements
               | Financial -- ^ Financial
               | Chairman  -- ^ Chairman
               deriving (Eq, Show)

-- | Evaluation process type. TODO: Housing evals.
data EvaluationType = IntroEval      -- ^ Introductory member evaluations, i.e.
                                     --   fall evals.
                    | MembershipEval -- ^ Membership evaluations, i.e. spring
                                     --   evals.
                    deriving (Eq, Show)

-- | A context's status with respect to the corresponding evaluations process.
data EvaluationStatus = Pending -- ^ Evaluation pending
                      | Passed  -- ^ Evaluation passed/approved
                      | Failed  -- ^ Evaluation failed/dismissed
                      deriving (Eq, Show)

-- | A member's status with respect to the evaluations process.
data MemberStatus = Active     -- ^ Active (dues paying) member
                  | AlumniGood -- ^ Alumnus in good standing
                  | AlumniBad  -- ^ Alumnus in bad standing
                  | Honorary   -- ^ Andrew Potter, Jen Smith
                  | Advisory   -- ^ Advisory member
                  | Intro      -- ^ Introductory member
                  | Non        -- ^ Non-member
                  deriving (Eq, Show)

-- | A member's dues status.
data DuesStatus = Paid   -- ^ Dues paid.
                | Exempt -- ^ Dues exempt.
                deriving (Eq, Show)

-- | The type of a house event.
data EventType = HouseMeeting     -- ^ Weekly house meeting
               | SocialEvent      -- ^ Social event
               | CommitteeMeeting -- ^ Weekly committee meeting
               | Seminar          -- ^ Technical seminar
               | Orientation      -- ^ Orientation event
               deriving (Eq, Show)

-- | The type of a member-submitted project.
data ProjectType = Major -- ^ Technical major project
                 deriving (Eq, Show)

-- | Construct an equality function for a record type based on the value of a
--   single constructor.
mkEq :: Eq b => (a -> b) -> a -> a -> Bool
mkEq f = (\ a b -> (f a) == (f b))

-- | Representation of a member in any state, including alumni and introductory
--   members (even those that have failed; they might try again).
data Member = Member {
    -- | Each member is assigned a unique evals ID at creation time.
    memberID            :: Word64
    -- | Each member is assigned a unique UUID at creation time.
  , memberUUID          :: UUID
    -- | Each member chooses a unique username at creation time. Caveat emptor,
    --   this username can be very difficult to change later on.
  , memberUsername      :: T.Text
    -- | Each member enters a common name, e.g. "Travis Whitaker," at creation
    --   time. This name is /not/ guaranteed to be unique.
  , memberCommonname    :: T.Text
    -- | This token must be presented by a user's client to authenticate their
    --   activity; no token will be present if the user is not logged in.
  , memberToken         :: Maybe B.ByteString
    -- | Housing points determine member precedence when choosing rooms.
  , memberHousingPoints :: Int
    -- | Whether or not a member has onfloor status, i.e. the ability to
    --   participate in room selection.
  , memberOnfloorStatus :: Bool
    -- | A member's Eboard terms.
  , memberEboards       :: Cacheable [Eboard]
    -- | A member's room residences.
  , memberRooms         :: Cacheable [Room]
    -- | A member's membership terms.
  , memberMemberships   :: Cacheable [Membership]
    -- | A member's evaluations.
  , memberEvaluations   :: Cacheable [Evaluation]
    -- | A member's packets.
  , memberPackets       :: Cacheable [Packet]
    -- | A member's queue instantiation.
  , memberQueues        :: Cacheable [Queue]
    -- | A member's applications.
  , memberApplications  :: Cacheable [Application]
    -- | A member's dues.
  , memberDues          :: Cacheable [Dues]
  }

-- | Member records are equatable based on their IDs, which are guaranteed to
--   be unique.
instance Eq Member where
    (==) = mkEq memberID

-- | Only pure values in the member record are shown.
instance Show Member where
    show m = intercalate "\n"
        [ ("Member ID: " ++ (show $ memberID m))
        , ("Member UUID: " ++ (show $ memberUUID m))
        , ("Member Username: " ++ (show $ memberUsername m))
        , ("Member Common Name: " ++ (show $ memberCommonname m))
        , ("Member Logged In: " ++ (if (isJust $ memberToken m) then "True" else "False"))
        , ("Member Housing Points: " ++ (show $ memberHousingPoints m))
        , ("Member Onfloor Status: " ++ (show $ memberOnfloorStatus m))
        ]

-- | A house event.
data Event = Event {
    -- | Each event is assigned a unique ID at creation time.
    eventID          :: Word64
    -- | Each event is assigned a title at creation time. These titles are /not/
    --   guaranteed to be unique.
  , eventTitle       :: T.Text
    -- | When an event was held.
  , eventHeld        :: UTCTime
    -- | The event type.
  , eventCategory    :: EventType
    -- | The event committee.
  , eventCommittee   :: Committee
    -- | Event description.
  , eventDescription :: T.Text
    -- | Event attendees.
  , eventAttendees   :: Cacheable [EventAttendee]
  }

-- | Event records are equatable based on their IDs, which are guaranteed to be
--   unique.
instance Eq Event where
    (==) = mkEq eventID

-- | Only pure values in the event record are shown.
instance Show Event where
    show e = intercalate "\n"
        [ ("Event ID: " ++ (show $ eventID e))
        , ("Event Title: " ++ (show $ eventTitle e))
        , ("Event Held: " ++ (show $ eventHeld e))
        , ("Event Category: " ++ (show $ eventCategory e))
        , ("Event Committee: " ++ (show $ eventCommittee e))
        , ("Event Description: " ++ (show $ eventDescription e))
        ]

-- | A member submitted project.
data Project = Project {
    -- | A project is assigned a unique ID at creation time.
    projectID           :: Word64
    -- | A project is assigned a title at creation time. These titles are /not/
    --   guaranteed to be unique.
  , projectTitle        :: T.Text
    -- | A project's description.
  , projectDescription  :: T.Text
    -- | Project submission time.
  , projectSubmitted    :: UTCTime
    -- | When (and if) a project is passed.
  , projectPassed       :: Maybe UTCTime
    -- | The committee associated with a project.
  , projectCommittee    :: Committee
    -- | Project type.
  , projectType         :: ProjectType
    -- | Project reviewer comments.
  , projectComments     :: T.Text
    -- | Project evaluation status.
  , projectStatus       :: EvaluationStatus
    -- | Project participants.
  , projectParticipants :: Cacheable [ProjectParticipant]
  }

-- | Project records are equatable based on their IDs, which are guaranteed to
--   be unique.
instance Eq Project where
    (==) = mkEq projectID

-- | Only pure values in the project record are shown.
instance Show Project where
    show p = intercalate "\n"
        [ ("Project ID: " ++ (show $ projectID p))
        , ("Project Title: " ++ (show $ projectTitle p))
        , ("Project Description: " ++ (show $ projectDescription p))
        , ("Project Submitted: " ++ (show $ projectSubmitted p))
        , ("Project Passed: " ++ (show $ projectPassed p))
        , ("Project Committee: " ++ (show $ projectCommittee p))
        , ("Project Type: " ++ (show $ projectType p))
        , ("Project Comments: " ++ (show $ projectComments p))
        , ("Project Status: " ++ (show $ projectStatus p))
        ]

-- | A house evaluation of a particular member.
data Evaluation = Evaluation {
    -- | Each evaluation is assigned a unique ID at creation time.
    evaluationID           :: Word64
    -- | Evaluation comments.
  , evaluationComments     :: T.Text
    -- | Due date for this evaluation.
  , evaluationDeadline     :: UTCTime
    -- | Whether or not the evaluation result is publicly viewable.
  , evaluationAvailable    :: Bool
    -- | Evaluation status.
  , evaluationStatus       :: EvaluationStatus
    -- | Evaluation type.
  , evaluationType         :: EvaluationType
    -- | The member being evaluated.
  , evaluationMember       :: Cacheable Member
    -- | Evaluation conditionals.
  , evaluationConditionals :: Cacheable [Conditional]
    -- | Evaluation freshman projects.
  , evaluationFreshProject :: Cacheable [FreshmanProjectParticipant]
  }

-- | Evaluation records are equatable based on their IDs, which are guaranteed
--   to be unique.
instance Eq Evaluation where
    (==) = mkEq evaluationID

-- | Only pure values in the evaluation record are shown.
instance Show Evaluation where
    show e = intercalate "\n"
        [ ("Evaluation ID: " ++ (show $ evaluationID e))
        , ("Evaluation Comments: " ++ (show $ evaluationComments e))
        , ("Evaluation Deadline: " ++ (show $ evaluationDeadline e))
        , ("Evaluation Available: " ++ (show $ evaluationAvailable e))
        , ("Evaluation Status: " ++ (show $ evaluationStatus e))
        , ("Evaluation Type: " ++ (show $ evaluationType e))
        ]

-- | An additional evaluation contingency.
data Conditional = Conditional {
    -- | Each conditional is assigned a unique ID at creation time.
    conditionalID          :: Word64
    -- | Due date for the conditional.
  , conditionalDeadline    :: UTCTime
    -- | Conditional description.
  , conditionalDescription :: T.Text
    -- | Conditional evaluator comments.
  , conditionalComments    :: T.Text
    -- | The contingent evaluation.
  , conditionalEvaluation  :: Cacheable Evaluation
  }

-- | Conditional records are equatable based on their IDs, which are guaranteed
--   to be unique.
instance Eq Conditional where
    (==) = mkEq conditionalID

-- | Only pure values in the conditional record are shown.
instance Show Conditional where
    show c = intercalate "\n"
        [ ("Conditional ID: " ++ (show $ conditionalID c))
        , ("Conditional Deadline: " ++ (show $ conditionalDeadline c))
        , ("Conditional Description: " ++ (show $ conditionalDescription c))
        , ("Conditional Comments: " ++ (show $ conditionalComments c))
        ]

-- | Yearly freshman project.
data FreshmanProject = FreshmanProject {
    -- | Each freshman project is assigned a unique ID at creation time.
    freshmanProjectID           :: Word64
    -- | Freshman project description.
  , freshmanProjectDescription  :: T.Text
    -- | The term during which a freshman project takes place.
  , freshmanProjectTerm         :: Cacheable Term
    -- | The event representing a freshman project.
  , freshmanProjectEvent        :: Cacheable Event
    -- | Freshman project participants.
  , freshmanProjectParticipants :: Cacheable [FreshmanProjectParticipant]
  }

-- | Freshman project records are equatable based on their IDs, which are
--   guaranteed to be unique.
instance Eq FreshmanProject where
    (==) = mkEq freshmanProjectID

-- | Only pure values in the freshman project record are shown.
instance Show FreshmanProject where
    show f = intercalate "\n"
        [ ("Freshman Project ID: " ++ (show $ freshmanProjectID f))
        , ("Freshman Project Description: " ++ (show $ freshmanProjectDescription f))
        ]

-- | An intro member's packet.
data Packet = Packet {
    -- | Each packet is assigned a unique ID at creation time.
    packetID         :: Word64
    -- | Packet due date.
  , packetDueDate    :: UTCTime
    -- | Percentage of signatures required.
  , packetPercentReq :: Int
    -- | The member to whom this packet belongs.
  , packetMember     :: Cacheable Member
    -- | Packet signatures.
  , packetSignatures :: Cacheable [Signature]
  }

-- | Packet records are equatable based on their IDs, which are guaranteed to be
--   unique.
instance Eq Packet where
    (==) = mkEq packetID

-- | Only pure values in the packet record are shown.
instance Show Packet where
    show p = intercalate "\n"
        [ ("Packet ID: " ++ (show $ packetID p))
        , ("Packet Due Date: " ++ (show $ packetDueDate p))
        , ("Packet Percent Required: " ++ (show $ packetPercentReq p))
        ]

-- | A member's presence in the housing queue.
data Queue = Queue {
    -- | Queue entrance time.
    queueEntered :: UTCTime
    -- | Queue exit time.
  , queueExited  :: Maybe UTCTime
    -- | The member in the queue.
  , queueMember  :: Cacheable Member
  }

-- | Only pure values in the queue record are shown.
instance Show Queue where
    show q = intercalate "\n"
        [ ("Queue Entered: " ++ (show $ queueEntered q))
        , ("Queue Exited: " ++ (show $ queueExited q))
        ]

-- | A membership application.
data Application = Application {
    -- | Each application is assigned a unique ID at creation time.
    applicationID        :: Word64
    -- | Application creation time.
  , applicationCreated   :: UTCTime
    -- | Application status.
  , applicationStatus    :: EvaluationStatus
    -- | The application's member.
  , applicationMember    :: Cacheable Member
    -- | Application reviews written by the selections committee.
  , applicationReviews   :: Cacheable [Review]
    -- | Applicant interviews conducted by the selections committee.
  , applicationInterview :: Cacheable [Interview]
    -- | Applicant answers to the application questions.
  , applicationAnswers   :: Cacheable [Answer]
  }

-- | Application records are equatable based on their IDs, which are guaranteed
--   to be unique.
instance Eq Application where
    (==) = mkEq applicationID

-- | Only pure values in the application record are shown.
instance Show Application where
    show a = intercalate "\n"
        [ ("Application ID: " ++ (show $ applicationID a))
        , ("Application Created: " ++ (show $ applicationCreated a))
        , ("Application Status: " ++ (show $ applicationStatus a))
        ]

-- | A metric for use in a review or interview.
data Metric = Metric {
    -- | Each metric is assigned a unique ID at creation time.
    metricID     :: Word64
    -- | Metric name.
  , metricName   :: T.Text
    -- | Whether or not the metric should be used in newly created
    --   reviews/interviews
  , metricActive :: Bool
  }

-- | Metric records are equatable based on their IDs, which are guaranteed to be
--   unique.
instance Eq Metric where
    (==) = mkEq metricID

-- | Only pure values in the metric record are shown.
instance Show Metric where
    show m = intercalate "\n"
        [ ("Metric ID: " ++ (show $ metricID m))
        , ("Metric Name: " ++ (show $ metricName m))
        , ("Metric Active: " ++ (show $ metricActive m))
        ]

-- | A review of an introductory member application.
data Review = Review {
    -- | Each review is assigned a unique ID at creation time.
    reviewID          :: Word64
    -- | Review start time.
  , reviewStart       :: UTCTime
    -- | Review submission time.
  , reviewSubmit      :: UTCTime
    -- | The member conducting the review.
  , reviewMember      :: Cacheable Member
    -- | The application under review.
  , reviewApplication :: Cacheable Application
    -- | The values provided by the reviewer for each metric.
  , reviewMetrics     :: Cacheable [ReviewMetric]
  }

-- | Review records are equatable based on their IDs, which are guaranteed to be
--   unique.
instance Eq Review where
    (==) = mkEq reviewID

-- | Only pure values in the review record are shown.
instance Show Review where
    show r = intercalate "\n"
        [ ("Review ID: " ++ (show $ reviewID r))
        , ("Review Start: " ++ (show $ reviewStart r))
        , ("Review Submit: " ++ (show $ reviewSubmit r))
        ]

-- | An interview with a prospective introductory member.
data Interview = Interview {
    -- | Each interview is assigned a unique ID at creation time.
    interviewID          :: Word64
    -- | Interview date.
  , interviewDate        :: UTCTime
    -- | The member conducting the interview.
  , interviewMember      :: Cacheable Member
    -- | The application belonging to the prospective member.
  , interviewApplication :: Cacheable Application
    -- | The values provided by the interviewer for each metric.
  , interviewMetrics     :: Cacheable [InterviewMetric]
  }

-- | Interview records are equatable based on their IDs, which are guaranteed to
--   be unique.
instance Eq Interview where
    (==) = mkEq interviewID

-- | Only pure values in the interview record are shown.
instance Show Interview where
    show i = intercalate "\n"
        [ ("Interview ID: " ++ (show $ interviewID i))
        , ("Interview Date: " ++ (show $ interviewDate i))
        ]

-- | An introductory member application question.
data Question = Question {
    -- | Each question is assigned a unique ID at creation time.
    questionID     :: Word64
    -- | The question text.
  , questionQuery  :: T.Text
    -- | Whether or not the question should be used for newly created
    --   applications.
  , questionActive :: Bool
  }

-- | Question records are equatable based on their IDs, which are guaranteed to
--   be unique.
instance Eq Question where
    (==) = mkEq questionID

-- | Only pure values in the question record are shown.
instance Show Question where
    show q = intercalate "\n"
        [ ("Question ID: " ++ (show $ questionID q))
        , ("Question Query: " ++ (show $ questionQuery q))
        , ("Question Active: " ++ (show $ questionActive q))
        ]

-- | An RIT term (quarter, semester, etc.)
data Term = Term {
    -- | Each term is assigned a unique ID at creation time.
    termID        :: Word64
    -- | Term start date.
  , termStartDate :: Day
    -- | Term end date.
  , termEndDate   :: Maybe Day
  }

-- | Terms are equatable based on their IDs, which are guaranteed to be unique.
instance Eq Term where
    (==) = mkEq termID

-- | Only pure values in the term record are shown.
instance Show Term where
    show t = intercalate "\n"
        [ ("Term ID: " ++ (show $ termID t))
        , ("Term Start Date: " ++ (show $ termStartDate t))
        , ("Term End Date: " ++ (show $ termEndDate t))
        ]

-- | A member's term of service on Eboard.
data Eboard = Eboard {
    -- | The committee the member served as the head of.
    eboardCommittee :: Committee
    -- | Eboard term start date.
  , eboardStartDate :: Day
    -- | Eboard term end date.
  , eboardEndDate   :: Maybe Day
    -- | The member servind on Eboard.
  , eboardMember    :: Cacheable Member
  }

-- | Only pure values in the Eboard record are shown.
instance Show Eboard where
    show e = intercalate "\n"
        [ ("Eboard Committee: " ++ (show $ eboardCommittee e))
        , ("Eboard Start Date: " ++ (show $ eboardStartDate e))
        , ("Eboard End Date: " ++ (show $ eboardEndDate e))
        ]

-- | A member's residence in a room on floor.
data Room = Room {
    -- | Room number.
    roomNumber    :: T.Text
    -- | The day the member moved into the room.
  , roomStartDate :: Day
    -- | The day the member moved out of the room.
  , roomEndDate   :: Maybe Day
    -- | The resident member.
  , roomMember    :: Cacheable Member
  }

-- | Only pure values in the room record are shown.
instance Show Room where
    show r = intercalate "\n"
        [ ("Room Number: " ++ (show $ roomNumber r))
        , ("Room Start Date: " ++ (show $ roomStartDate r))
        , ("Room End Date: " ++ (show $ roomEndDate r))
        ]

-- | A member's membeship status over time.
data Membership = Membership {
    -- | Membership status.
    membershipStatus    :: MemberStatus
    -- | Membership status start date.
  , membershipStartDate :: Day
    -- | Membership status end date.
  , membershipEndDate   :: Maybe Day
    -- | The member in question.
  , membershipMember    :: Cacheable Member
  }

-- | Only pure values in the membership record are shown.
instance Show Membership where
    show m = intercalate "\n"
        [ ("Membership Status: " ++ (show $ membershipStatus m))
        , ("Membership Start Date: " ++ (show $ membershipStartDate m))
        , ("Membership End Date: " ++ (show $ membershipEndDate m))
        ]

-- | A member's attendance at an event.
data EventAttendee = EventAttendee {
   -- | Whether or not the attendee hosted the event.
   eventAttendeeHost   :: Bool
   -- | The attendee.
 , eventAttendeeMember :: Cacheable Member
   -- | The event.
 , eventAttendeeEvent  :: Cacheable Event
 }

-- | Only pure values in the event attendee record are shown.
instance Show EventAttendee where
    show e = intercalate "\n"
        [ ("Event Attendee Host: " ++ (show $ eventAttendeeHost e))
        ]

-- | A member's participation in a project.
data ProjectParticipant = ProjectParticipant {
    -- | The description of the participant's contribution.
    projectParticipantDescription :: T.Text
    -- | The participant.
  , projectParticipantMember      :: Cacheable Member
    -- | The project.
  , projectParticipantProject     :: Cacheable Project
  }

-- | Only pure values in the project participant record are shown.
instance Show ProjectParticipant where
    show p = intercalate "\n"
        [ ("Project Participant Description: " ++ (show $ projectParticipantDescription p))
        ]

-- | A member's participation in a freshman project.
data FreshmanProjectParticipant = FreshmanProjectParticipant {
    -- | Whether or not the participant served on freshman project eboard.
    freshmanProjectParticipantEboard     :: Bool
    -- | Evaluation status of the participant's contribution.
  , freshmanProjectParticipantStatus     :: EvaluationStatus
    -- | Evaluator comments on the participant's contribution.
  , freshmanProjectParticipantComments   :: T.Text
    -- | The freshman project.
  , freshmanProjectParticipantFreshProj  :: Cacheable FreshmanProject
    -- | The participant's evaluation.
  , freshmanProjectParticipantEvaluation :: Cacheable Evaluation
  }

-- | Only pure values in the freshman project participant record are shown.
instance Show FreshmanProjectParticipant where
    show f = intercalate "\n"
        [ ("Freshman Project Participant Eboard: " ++ (show $ freshmanProjectParticipantEboard f))
        , ("Freshman Project Participant Status: " ++ (show $ freshmanProjectParticipantStatus f))
        , ("Freshman Project Participant Comments: " ++ (show $ freshmanProjectParticipantComments f))
        ]

-- | A signature on a packet.
data Signature = Signature {
    -- | Whether or not this signature is required.
    signatureRequired :: Bool
    -- | Signature time.
  , signatureSigned   :: Maybe UTCTime
    -- | The signee.
  , signatureMember   :: Cacheable Member
    -- | The packet.
  , signaturePacket   :: Cacheable Packet
  }

-- | Only pure values in the signature record are shown.
instance Show Signature where
    show s = intercalate "\n"
        [ ("Signature Required: " ++ (show $ signatureRequired s))
        , ("Signature Signed: " ++ (show $ signatureSigned s))
        ]

-- | A metric value provided by a reviewer.
data ReviewMetric = ReviewMetric {
    -- | The metric value.
    reviewMetricScore  :: Int
    -- | The metric.
  , reviewMetricMetric :: Cacheable Metric
    -- | The review.
  , reviewMetricReview :: Cacheable Review
  }

-- | Only pure values in the review metric record are shown.
instance Show ReviewMetric where
    show r = intercalate "\n"
        [ ("Review Metric Score: " ++ (show $ reviewMetricScore r))
        ]

-- | A metric value provided by an interviewer.
data InterviewMetric = InterviewMetric {
    -- | The metric value.
    interviewMetricScore     :: Int
    -- | The metric.
  , interviewMetricMetric    :: Cacheable Metric
    -- | The review.
  , interviewMetricInterview :: Cacheable Interview
  }

-- | Only pure values in the interview metric record are shown.
instance Show InterviewMetric where
    show i = intercalate "\n"
        [ ("Interview Metric Score: " ++ (show $ interviewMetricScore i))
        ]

-- | An applicant's answer to an application question.
data Answer = Answer {
    -- | The applicant's answer.
    answerResponse    :: T.Text
    -- | The question.
  , answerQuestion    :: Cacheable Question
    -- | The application.
  , answerApplication :: Cacheable Application
  }

-- | Only pure values in the answer record are shown.
instance Show Answer where
    show a = intercalate "\n"
        [ ("Answer Response: " ++ (show $ answerResponse a))
        ]

-- | A member's dues status over time.
data Dues = Dues {
    -- | Dues status.
    duesStatus :: DuesStatus
    -- | The dues-paying member.
  , duesMember :: Cacheable Member
    -- | The term.
  , duesTerm   :: Cacheable Term
  }

-- | Only pure values in the dues record are shown.
instance Show Dues where
    show d = intercalate "\n"
        [ ("Dues Status: " ++ (show $ duesStatus d))
        ]

-- | A cache segment from database IDs to objects.
type IDCache a = MVar (M.Map Word64 (MVar a))

-- | A cache state, consisting of all cache segments and a database connection
--   pool for fallbacks (this must be accessible within the 'Cacheable' monad).
data Cache = Cache {
    -- | The PostgreSQL connection pool.
    pool                                  :: Pool Postgres
    -- | The Logger
  , logger                                :: Logger
    -- | Map from IDs to 'Member's.
  , memberIDCache                         :: IDCache Member
    -- | Map from IDs to 'Event's.
  , eventIDCache                          :: IDCache Event
    -- | Map from IDs to 'Project's.
  , projectIDCache                        :: IDCache Project
    -- | Map from IDs to 'Evaluation's.
  , evaluationIDCache                     :: IDCache Evaluation
    -- | Map from IDs to 'Conditional's.
  , conditionalIDCache                    :: IDCache Conditional
    -- | Map from IDs to 'FreshmanProject's.
  , freshmanProjectIDCache                :: IDCache FreshmanProject
    -- | Map from IDs to 'Packet's.
  , packetIDCache                         :: IDCache Packet
    -- | Map from IDs to 'Queue's.
  , queueIDCache                          :: IDCache Queue
    -- | Map from IDs to 'Application's.
  , applicationIDCache                    :: IDCache Application
    -- | Map from IDs to 'Metric's.
  , metricIDCache                         :: IDCache Metric
    -- | Map from IDs to 'Review's.
  , reviewIDCache                         :: IDCache Review
    -- | Map from IDs to 'Interview's.
  , interviewIDCache                      :: IDCache Interview
    -- | Map from IDs to 'Question's.
  , questionIDCache                       :: IDCache Question
    -- | Map from IDs to 'Term's.
  , termIDCache                           :: IDCache Term
    -- | map from 'Member' IDs to 'Eboard's.
  , eboardMemberIDCache                   :: IDCache [Eboard]
    -- | Map from 'Member' IDs to 'Evaluation's.
  , evaluationMemberIDCache               :: IDCache [Evaluation]
    -- | Map from 'Evaluation' IDs to 'Conditional's.
  , conditionalEvaluationIDCache          :: IDCache [Conditional]
    -- | Map from 'Member' IDs to 'Room's.
  , roomMemberIDCache                     :: IDCache [Room]
    -- | Map from 'Member' IDs to 'Queue's.
  , queueMemberIDCache                    :: IDCache [Queue]
    -- | Map from 'Member' IDs to 'Membership's.
  , membershipMemberIDCache               :: IDCache [Membership]
    -- | Map from 'Member' IDs to 'EventAttendee's.
  , eventAttendeeMemberIDCache            :: IDCache [EventAttendee]
    -- | Map from 'Event' IDs to 'EventAttendee's.
  , eventAttendeeEventIDCache             :: IDCache [EventAttendee]
    -- | Map from 'Member' IDs to 'ProjectParticipant's.
  , projectParticipantMemberIDCache       :: IDCache [ProjectParticipant]
    -- | Map from 'Project' IDs to 'ProjectParticipant's.
  , projectParticipantProjectIDCache      :: IDCache [ProjectParticipant]
    -- | Map from 'FreshmanProject' IDs to 'FreshmanProjectParticipant's.
  , freshProjParticipantProjectIDCache    :: IDCache [FreshmanProjectParticipant]
    -- | Map from 'Evaluation' IDs to 'FreshmanProjectParticipant's.
  , freshProjParticipantEvaluationIDCache :: IDCache [FreshmanProjectParticipant]
    -- | Map from 'Member' IDs to 'Packet's.
  , packetMemberIDCache                   :: IDCache [Packet]
    -- | Map from 'Member' IDs to 'Signature's.
  , signatureMemberIDCache                :: IDCache [Signature]
    -- | Map from 'Packet' IDs to 'Signature's.
  , signaturePacketIDCache                :: IDCache [Signature]
    -- | Map from 'Member' IDs to 'Application's.
  , applicationMemberIDCache              :: IDCache [Application]
    -- | Map from 'Application' IDs to 'Review's.
  , reviewApplicationIDCache              :: IDCache [Review]
    -- | Map from 'Application' IDs to 'Interview's.
  , interviewApplicationIDCache           :: IDCache [Interview]
    -- | Map from 'Metric' IDs to 'ReviewMetric's.
  , reviewMetricMetricIDCache             :: IDCache [ReviewMetric]
    -- | Map from 'Review' IDs to 'ReviewMetric's.
  , reviewMetricReviewIDCache             :: IDCache [ReviewMetric]
    -- | Map from 'Metric' IDs to 'InterviewMetric's.
  , interviewMetricMetricIDCache          :: IDCache [InterviewMetric]
    -- | Map from 'Interview' IDs to 'InterviewMetric's.
  , interviewMetricInterviewIDCache       :: IDCache [InterviewMetric]
    -- | Map from 'Question' IDs to 'Answer's.
  , answerQuestionIDCache                 :: IDCache [Answer]
    -- | Map from 'Application' IDs to 'Answer's.
  , answerApplicationIDCache              :: IDCache [Answer]
    -- | Map from 'Member' IDs to 'Dues'.
  , duesMemberIDCache                     :: IDCache [Dues]
    -- | Map from 'Term' IDs to 'Dues'.
  , duesTermIDCache                       :: IDCache [Dues]
  }

-- | Default Hasql transaction mode.
defTxMode :: TxMode
defTxMode = Just (Serializable, Just True)

-- | Interior transformer for operations directly on the cache state. Cache
--   users should never be able to bind out of this.
type CacheM a = EitherT CacheError IO a

-- | Exterior transformer for cache operations. Cache API caller-facing
--   functions /must/ return into this exterior transformer.
type Cacheable a = Cache -> CacheM a

-- | Cache error.
data CacheError = HasqlError (SessionError Postgres)
                | CacheError  String
                | Nonexistent String
                | Constraint  String
                deriving (Show)

-- | Enables embedding the interior cache transformer within another
--   transformer. This is only OK to use if you're embedding something
--   'Cacheable' in a different exterior transformer. I'm not sure how to
--   enforce that at the type level. You probably shouldn't use this.
runCacheable :: Cache -> Cacheable a -> CacheM a
runCacheable c m = m c

-- | Hoist 'Cacheable' into an IO capable monad.
execCacheable :: MonadIO m
              => Cache                   -- ^ Cache instance to execute with
              -> Cacheable a             -- ^ Cache hitting function
              -> m (Either CacheError a) -- ^ Cache error or the function result
execCacheable c m = liftIO $ runEitherT (m c)

redpajama_set_name: RedPajamaGithub


text:
<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- ==================================================================== -->
<!--                       Derby Client build file                        -->
<!-- ==================================================================== -->
<project default="client" basedir="../..">

<!-- ==================================================================== -->
<!--                           Set properties                             -->
<!-- ==================================================================== -->

  <!-- User settings -->
  <property file="${user.home}/ant.properties"/>

  <!-- Set property lib dir -->
  <property name="properties.dir" value="tools/ant/properties"/>

  <!-- Significant dirs -->
  <property file="${properties.dir}/dirs.properties"/>

  <!-- Compiler settings -->
  <property file="${properties.dir}/defaultcompiler.properties"/>
  <property file="${properties.dir}/${build.compiler}.properties"/>

  <!-- Compile-time classpath properties files -->
  <property file="${properties.dir}/extrapath.properties"/>
  <property file="${properties.dir}/compilepath.properties"/>

  <!-- Release and Version info -->
  <property file="${properties.dir}/release.properties"/>

<!-- compile classes  -->
<target name="compile">
    <javac
      source="${compilerLevel16}"
      target="${compilerLevel16}"
      bootclasspath="${empty}"
      nowarn="on"
      debug="${debug}"
      depend="${depend}"
      deprecation="${deprecation}"
      optimize="${optimize}"
      proceed="${proceed}"
      verbose="${verbose}"
      srcdir="${derby.client.src.dir}"
      includes="**/*.java"
      excludes="**/*42.java"
      destdir="${out.dir}">
      <classpath>
        <pathelement path="${java16compile.classpath}"/>
      </classpath>
      <compilerarg value="-Xlint"/>
   </javac>
</target>

<target name="compile_jdbc42" if="vmLevelIsAtLeast1.8">
    <javac
      source="${compilerLevel16}"
      target="${compilerLevel16}"
      bootclasspath="${empty}"
      nowarn="on"
      debug="${debug}"
      depend="${depend}"
      deprecation="${deprecation}"
      optimize="${optimize}"
      proceed="${proceed}"
      verbose="${verbose}"
      srcdir="${derby.client.src.dir}"
      includes="**/*42.java"
      destdir="${out.dir}">
      <classpath>
        <pathelement path="${java18compile.classpath}"/>
      </classpath>
      <compilerarg value="-Xlint"/>
   </javac>
</target>

<!-- default target  -->
  <target name="client" depends="checkVMLevel, compile, compile_jdbc42"/>

  <target name="checkVMLevel">
    <available classname="java.sql.SQLType" property="vmLevelIsAtLeast1.8" value="true"/>
  </target>

</project>