Act II, scene ii

Summary: Caliban enters with a load of wood, and thunder sounds in the background. Caliban curses and describes the torments that Prospero's spirits subject him to: they pinch, bite, and prick him, especially when he curses. As he is thinking of these spirits, Caliban sees Trinculo and imagines him to be one of the spirits. Hoping to avoid pinching, he lies down and covers himself with his cloak. Trinculo hears the thunder and looks about for some cover from the storm. The only thing he sees is the cloak-covered Caliban on the ground. He is not so much repulsed by Caliban as curious. He cannot decide whether Caliban is a "man or a fish" . He thinks of a time when he traveled to England and witnessed freak-shows there. Caliban, he thinks, would bring him a lot of money in England. Thunder sounds again and Trinculo decides that the best shelter in sight is beneath Caliban's cloak, and so he joins the man-monster there. Stephano enters singing and drinking. He hears Caliban cry out to Trinculo, "Do not torment me! O!" . Hearing this and seeing the four legs sticking out from the cloak, Stephano thinks the two men are a four-legged monster with a fever. He decides to relieve this fever with a drink. Caliban continues to resist Trinculo, whom he still thinks is a spirit tormenting him. Trinculo recognizes Stephano's voice and says so. Stephano, of course, assumes for a moment that the monster has two heads, and he promises to pour liquor in both mouths. Trinculo now calls out to Stephano, and Stephano pulls his friend out from under the cloak. While the two men discuss how they arrived safely on shore, Caliban enjoys the liquor and begs to worship Stephano. The men take full advantage of Caliban's drunkenness, mocking him as a "most ridiculous monster"  as he promises to lead them around and show them the isle.

Analysis Trinculo and Stephano are the last new characters to be introduced in the play. They act as comic foils to the main action, and will in later acts become specific parodies of Antonio and Sebastian. At this point, their role is to present comically some of the more serious issues in the play concerning Prospero and Caliban. In Act I, scene ii, Prospero calls Caliban a "slave" , "thou earth" , "Filth" , and "Hag-seed" . Stephano and Trinculo's epithet of choice in Act II, scene ii and thereafter is "monster." But while these two make quite clear that Caliban is seen as less than human by the Europeans on the island, they also treat him more humanely than Prospero does. Stephano and Trinculo, a butler and a jester respectively, remain at the low end of the social scale in the play, and have little difficulty finding friendship with the strange islander they meet. " Misery acquaints a man with strange bedfellows," says Trinculo , and then hastens to crawl beneath Caliban's garment in order to get out of the rain. The similarity, socially and perhaps physically as well, between Trinculo and Caliban is further emphasized when Stephano, drunk, initially mistakes the two for a single monster: "This is some monster of the isle with four legs" . More important than the emphasis on the way in which Caliban seems to others more monster than man, is the way in which this scene dramatizes the initial encounter between an almost completely isolated, "primitive" culture and a foreign, "civilized" one. The reader discovers during Caliban and Prospero's confrontation in Act I, scene ii that Prospero initially "made much of" Caliban ; that he gave Caliban "Water with berries in't" ; that Caliban showed him around the island; and that Prospero later imprisoned Caliban, after he had taken all he could take from him. The reader can see these events in Act II, scene ii, with Trinculo and Stephano in the place of Prospero. Stephano calls Caliban a "brave monster," as they set off singing around the island. In addition, Stephano and Trinculo give Caliban wine, which Caliban finds to be a "celestial liquor" . Moreover, Caliban initially mistakes Stephano and Trinculo for Prospero's spirits, but alcohol convinces him that Stephano is a "brave god" and decides unconditionally to "kneel to him" . This scene shows the foreign, civilized culture as decadent and manipulative: Stephano immediately plans to "inherit" the island , using Caliban to show him all its virtues. Stephano and Trinculo are a grotesque, parodic version of Prospero upon his arrival twelve years ago. Godlike in the eyes of the native, they slash and burn their way to power. By this point, Caliban has begun to resemble a parody of himself. Whereas he would "gabble like / A thing most brutish"  upon Prospero's arrival, because he did not know language, he now is willfully inarticulate in his drunkenness. Immediately putting aside his fear that these men are spirits sent to do him harm, Caliban puts his trust in them for all the wrong reasons. What makes Caliban's behavior in this scene so tragic is that we might expect him, especially after his eloquent curses of Prospero in Act I, scene ii, to know better.

SCENE II.

_Another part of the island._

  _Enter CALIBAN with a burden of wood. A noise of thunder heard._

_Cal._ All the infections that the sun sucks up
From bogs, fens, flats, on Prosper fall, and make him
By inch-meal a disease! His spirits hear me,
And yet I needs must curse. But they'll nor pinch,
Fright me with urchin-shows, pitch me i' the mire,                   5
Nor lead me, like a firebrand, in the dark
Out of my way, unless he bid 'em: but
For every trifle are they set upon me;
Sometime like apes, that mow and chatter at me,
And after bite me; then like hedgehogs, which                       10
Lie tumbling in my barefoot way, and mount
Their pricks at my footfall; sometime am I
All wound with adders, who with cloven tongues
Do hiss me into madness.

  _Enter TRINCULO._

                        Lo, now, lo!
Here comes a spirit of his, and to torment me                       15
For bringing wood in slowly. I'll fall flat;
Perchance he will not mind me.

_Trin._ Here's neither bush nor shrub, to bear off any
weather at all, and another storm brewing; I hear it sing i'
the wind: yond same black cloud, yond huge one, looks               20
like a foul bombard that would shed his liquor. If it should
thunder as it did before, I know not where to hide my head:
yond same cloud cannot choose but fall by pailfuls. What
have we here? a man or a fish? dead or alive? A fish: he
smells like a fish; a very ancient and fish-like smell; a kind      25
of not of the newest Poor-John. A strange fish! Were I
in England now, as once I was, and had but this fish
painted, not a holiday fool there but would give a piece of
silver: there would this monster make a man; any strange
beast there makes a man: when they will not give a doit to          30
relieve a lame beggar, they will lay out ten to see a dead
Indian. Legged like a man! and his fins like arms! Warm
o' my troth! I do now let loose my opinion; hold it no
longer: this is no fish, but an islander, that hath lately
suffered by a thunderbolt. [_Thunder._] Alas, the storm is come     35
again! my best way is to creep under his gaberdine; there
is no other shelter hereabout: misery acquaints a man with
strange bed-fellows. I will here shroud till the dregs of the
storm be past.

  _Enter STEPHANO, singing: a bottle in his hand._

_Ste._ I shall no more to sea, to sea,                              40
                Here shall I die a-shore,--

This is a very scurvy tune to sing at a man's funeral: well,
here's my comfort.                                  [_Drinks._

[_Sings._ The master, the swabber, the boatswain, and I,
                       The gunner, and his mate,                    45
               Loved Mall, Meg, and Marian, and Margery,
                   But none of us cared for Kate;
                   For she had a tongue with a tang,
                   Would cry to a sailor, Go hang!
               She loved not the savour of tar nor of pitch;        50
               Yet a tailor might scratch her where'er she did itch.
                   Then, to sea, boys, and let her go hang!

This is a scurvy tune too: but here's my comfort. [_Drinks._

_Cal._ Do not torment me:--O!

_Ste._ What's the matter? Have we devils here? Do                   55
you put tricks upon 's with savages and men of Ind, ha? I
have not scaped drowning, to be afeard now of your four
legs; for it hath been said, As proper a man as ever went
on four legs cannot make him give ground; and it shall be
said so again, while Stephano breathes at's nostrils.               60

_Cal._ The spirit torments me:--O!

_Ste._ This is some monster of the isle with four legs, who
hath got, as I take it, an ague. Where the devil should he
learn our language? I will give him some relief, if it be
but for that. If I can recover him, and keep him tame, and          65
get to Naples with him, he's a present for any emperor that
ever trod on neat's-leather.

_Cal._ Do not torment me, prithee; I'll bring my wood
home faster.

_Ste._ He's in his fit now, and does not talk after the             70
wisest. He shall taste of my bottle: if he have never drunk
wine afore, it will go near to remove his fit. If I can recover
him, and keep him tame, I will not take too much for
him; he shall pay for him that hath him, and that soundly.

_Cal._ Thou dost me yet but little hurt; thou wilt anon, I          75
know it by thy trembling: now Prosper works upon thee.

_Ste._ Come on your ways; open your mouth; here is that
which will give language to you, cat: open your mouth; this
will shake your shaking, I can tell you, and that soundly:
you cannot tell who's your friend: open your chaps again.           80

_Trin._ I should know that voice: it should be--but he
is drowned; and these are devils:--O defend me!

_Ste._ Four legs and two voices,--a most delicate monster!
His forward voice, now, is to speak well of his friend;
his backward voice is to utter foul speeches and to detract.        85
If all the wine in my bottle will recover him, I will help
his ague. Come:--Amen! I will pour some in thy other
mouth.

_Trin._ Stephano!

_Ste._ Doth thy other mouth call me? Mercy, mercy!                  90
This is a devil, and no monster: I will leave him; I have
no long spoon.

_Trin._ Stephano! If thou beest Stephano, touch me,
and speak to me; for I am Trinculo,--be not afeard,--thy
good friend Trinculo.                                               95

_Ste._ If thou beest Trinculo, come forth: I'll pull thee
by the lesser legs: if any be Trinculo's legs, these are they.
Thou art very Trinculo indeed! How earnest thou to be
the siege of this moon-calf? can he vent Trinculos?

_Trin._ I took him to be killed with a thunder-stroke.             100
But art thou not drowned, Stephano? I hope, now, thou
art not drowned. Is the storm overblown? I hid me
under the dead moon-calf's gaberdine for fear of the storm.
And art thou living, Stephano? O Stephano, two Neapolitans
scaped!                                                            105

_Ste._ Prithee, do not turn me about; my stomach is not
constant.

_Cal._ [_aside_] These be fine things, an if they be not sprites.
That's a brave god, and bears celestial liquor:
I will kneel to him.                                               110

_Ste._ How didst thou 'scape? How camest thou hither?
swear, by this bottle, how thou camest hither. I escaped
upon a butt of sack, which the sailors heaved o'erboard, by
this bottle! which I made of the bark of a tree with mine
own hands, since I was cast ashore.                                115

_Cal._ I'll swear, upon that bottle, to be thy true subject;
for the liquor is not earthly.

_Ste._ Here; swear, then, how thou escapedst.

_Trin._ Swum ashore, man, like a duck: I can swim
like a duck, I'll be sworn.                                        120

_Ste._ Here, kiss the book. Though thou canst swim
like a duck, thou art made like a goose.

_Trin._ O Stephano, hast any more of this?

_Ste._ The whole butt, man: my cellar is in a rock by
the sea-side, where my wine is hid. How now, moon-calf!            125
how does thine ague?

_Cal._ Hast thou not dropp'd from heaven?

_Ste._ Out o' the moon, I do assure thee: I was the man
i' the moon when time was.

_Cal._ I have seen thee in her, and I do adore thee:               130
My mistress show'd me thee, and thy dog, and thy bush.

_Ste._ Come, swear to that; kiss the book: I will furnish
it anon with new contents: swear.

_Trin._ By this good light, this is a very shallow monster!
I afeard of him! A very weak monster! The                          135
man i' the moon! A most poor credulous monster! Well
drawn, monster, in good sooth!

_Cal._ I'll show thee every fertile inch o' th' island;
And I will kiss thy foot: I prithee, be my god.

_Trin._ By this light, a most perfidious and drunken               140
monster! when's god's asleep, he'll rob his bottle.

_Cal._ I'll kiss thy foot; I'll swear myself thy subject.

_Ste._ Come on, then; down, and swear.

_Trin._ I shall laugh myself to death at this puppy-headed
monster. A most scurvy monster! I could find in                    145
my heart to beat him,--

_Ste._ Come, kiss.

_Trin._ But that the poor monster's in drink: an abominable
monster!

_Cal._ I'll show thee the best springs; I'll pluck thee berries;   150
I'll fish for thee, and get thee wood enough.
A plague upon the tyrant that I serve!
I'll bear him no more sticks, but follow thee,
Thou wondrous man.

_Trin._ A most ridiculous monster, to make a wonder                155
of a poor drunkard!

_Cal._ I prithee, let me bring thee where crabs grow;
And I with my long nails will dig thee pig-nuts;
Show thee a jay's nest, and instruct thee how
To snare the nimble marmoset; I'll bring thee                      160
To clustering filberts, and sometimes I'll get thee
Young scamels from the rock. Wilt thou go with me?

_Ste._ I prithee now, lead the way, without any more
talking. Trinculo, the king and all our company else being
drowned, we will inherit here: here; bear my bottle: fellow        165
Trinculo, we'll fill him by and by again.

_Cal. sings drunkenly._] Farewell, master; farewell, farewell!

_Trin._ A howling monster; a drunken monster!

_Cal._ No more dams I'll make for fish;
                Nor fetch in firing                                170
                At requiring;
             Nor scrape trencher, nor wash dish:
                'Ban, 'Ban, Cacaliban
                Has a new master:--get a new man.

Freedom, hey-day! hey-day, freedom! freedom, hey-day,              175
freedom!

_Ste._ O brave monster! Lead the way.    [_Exeunt._

  Notes: II, 2.

  4: _nor_] F1 F2. _not_ F3 F4.
  15: _and_] _now_ Pope. _sent_ Edd. conj. (so Dryden).
  21: _foul_] _full_ Upton conj.
  35: [Thunder] Capell.
  38: _dregs_] _drench_ Collier MS.
  40: SCENE III. Pope.
  [a bottle in his hand] Capell.]
  46: _and Marian_] _Mirian_ Pope.
  56: _savages_] _salvages_ Ff.
  60: _at's nostrils_] Edd. _at 'nostrils_ F1. _at nostrils_ F2 F3 F4.
    _at his nostrils_ Pope.
  78: _you, cat_] _you Cat_ Ff. _a cat_ Hanmer. _your cat_ Edd. conj.
  84: _well_] F1 om. F2 F3 F4.
  115, 116: Steevens prints as verse, _I'll ... thy True ... earthly._
  118: _swear, then, how thou escapedst_] _swear then: how escapedst
    thou?_ Pope.
  119: _Swum_] _Swom_ Ff.
  131: _and thy dog, and thy bush_] _thy dog and bush_ Steevens.
  133: _new_] F1. _the new_ F2 F3 F4.
  135: _weak_] F1. _shallow_ F2 F3 F4.
  138: _island_] F1. _isle_ F2 F3 F4.
  150-154, 157-162, printed as verse by Pope (after Dryden).
  162: _scamels_] _shamois_ Theobald. _seamalls, stannels_ id. conj.
  163: Ste.] F1. Cal. F2 F3 F4.
  165: Before _here; bear my bottle_ Capell inserts [To Cal.].
    See note (XII).
  172: _trencher_] Pope (after Dryden). _trenchering_ Ff.
  175: _hey-day_] Rowe. _high-day_ Ff.


[User] Are there any eritrean restaurants in town?

[System] No, there are no eritrean restaurants in town. Would you like a different restaurant?

[User] How about Chinese food?

[System] There is a wide variety of Chinese restaurants, do you have an area preference or a price preference to narrow it down?

[User] I would like the East part of town.

[System] Yu Garden is a chinese restaurant in the east area.

[User] Could I get the address, phone number, and postcode of Yu Garden?

[System] Phone is 01223 248882, address and postcode are 529 Newmarket Road Fen Ditton C.B 5, 8 P.A

[User] Thank you.  That is all the information I needed.  Bye bye!


[User] Hi, I'm looking for a nice German restaurant.

[System] There are no German restaurants listed, do you have another preference?

[User] How about European yeah?

[System] Which area of town?

[User] I don't care.

[System] There are ten restaurants that fit that description. Do you have a price preference?

[User] Can I have the address, phone number, and area for the most expensive one?

[System] Cambridge Lodge Restaurant is listed as expensive in the west area located at 	 Cambridge Lodge Hotel 139 Huntingdon Road City Centre. Their phone number is	 01223 355166.

[User] Thank you goodbye


[User] I am looking for a restaurant in the expensive price range that serves Australasian food.

[System] There are no restaurants matching your requests.  May I help you find a different type of restaurant?

[User] I'd like to find some Mediterranean food and need to know their address and phone number.

[System] There is an expensive restaurant that serves mediterranean food located at Thompsons Lane Fen Ditton. Their phone number is 01223 362525.

[User] Thank you!


[User] I am looking for a moderately priced restaurant.

[System] What type of food would you like?

[User] Turkish food.

[System] I have two restaurants in the Centre area of town. Would you like the information for both?

[User] Yes, please give me the one Turkish food restaurant's phone number and address please.

[System] Anatolia is located at 30 Bridge Street City Centre, phone number is 01223 362372

[User] thank you.


[User] Hi I am looking for a persian restaurant in the west part of town.

[System] I'm sorry I do not have any Persian restaurants listed on the west side.  Should I try Persian restaurants in all locations?

[User] No thank you.  Is there a restaurant with italian food?

[System] Prezzo is on the west side.

[User] Great! May I have the phone number please?

[System] The phone number is  01799 521260

[User] Thanks, good night!


[User] I don't care about the price range. Just recommend me a restaurant that serves European food. I would also like to get the phone number and directions.

[System] What area of town would you like?

[User] I don't care about the area.  Anywhere.

[System] the cambridge lodge restaurant is located at Cambridge Lodge Hotel 139 Huntingdon Road City Centre and their phone number is 01223 355166.

[User] Thank you, goodbye


[User] Can you find me a cheap Spanish restaurant?

[System] there are two spanish restaurants in total, what price range do you want ?

[User] I am looking for a cheap restaurant.

[System] la raza is a spanish restaurant, in the cheap price range and in the centre part of town.

[User] can you please give me the address?

[System] The address is 4 - 6 Rose Crescent. Can I help you with anything else?

[User] What is the area?

[System] la raza's area is in the centre part of town

[User] Thank you. Good bye


[User] hello, i'm looking for a restaurant that serves moroccan food

[System] Sorry, we don't have a restaurant that fits that description.

[User] How about british food?

[System] There is a cotto restaurant that has british food

[User] Could you provide me with price range of Cotto?  I also need their address and phone.  Thank you.

[System] Yes, the number is 01223 302010.  The address is 183 East Road City Centre.  Anything else?

[User] That will do - thank you again.


[User] Hi, could you tell me the phone number and address of the nearest Mexican restaurant?

[System] Chiquito restaurant bar is at 2G Cambridge Leisure Park Cherry Hinton Road Cherry Hinton and their phone number is 01223 400170.

[User] Thank you, goodbye.


[User] Where can I go for swedish food?

[System] We have a number of swedish options, do you have a location you'd like to look in?

[User] anywhere will do.

[System] My apologies, there must have been a glitch in the system. I show no Swedish restaurants; may I help with somewhere else?

[User] How about Vietnamese?

[System] there is one Vietnamese restaurant on the west side. Would you like this information?

[User] I need the address and phone number please.

[System] Sure, the phone number is 01223 362456 and the address is 17 Magdalene Street City Centre.  Anything else I can help with?

[User] No, that's it.  Thank you, good bye.


Context: In 2014, economists with the Standard & Poor's rating agency concluded that the widening disparity between the U.S.'s wealthiest citizens and the rest of the nation had slowed its recovery from the 2008-2009 recession and made it more prone to boom-and-bust cycles. To partially remedy the wealth gap and the resulting slow growth, S&P recommended increasing access to education. It estimated that if the average United States worker had completed just one more year of school, it would add an additional $105 billion in growth to the country's economy over five years.

Question: What does wealth disparity make the economy more prone to?

boom-and-bust cycles
boom-and-bust cycles
boom-and-bust cycles


Context: Decision problems are one of the central objects of study in computational complexity theory. A decision problem is a special type of computational problem whose answer is either yes or no, or alternately either 1 or 0. A decision problem can be viewed as a formal language, where the members of the language are instances whose output is yes, and the non-members are those instances whose output is no. The objective is to decide, with the aid of an algorithm, whether a given input string is a member of the formal language under consideration. If the algorithm deciding this problem returns the answer yes, the algorithm is said to accept the input string, otherwise it is said to reject the input.

Question: What kind of problems are one of the main topics studied in computational complexity theory?

Decision problems
Decision problems
Decision


Context: Uniflow engines attempt to remedy the difficulties arising from the usual counterflow cycle where, during each stroke, the port and the cylinder walls will be cooled by the passing exhaust steam, whilst the hotter incoming admission steam will waste some of its energy in restoring working temperature. The aim of the uniflow is to remedy this defect and improve efficiency by providing an additional port uncovered by the piston at the end of each stroke making the steam flow only in one direction. By this means, the simple-expansion uniflow engine gives efficiency equivalent to that of classic compound systems with the added advantage of superior part-load performance, and comparable efficiency to turbines for smaller engines below one thousand horsepower. However, the thermal expansion gradient uniflow engines produce along the cylinder wall gives practical difficulties.[citation needed]. The Quasiturbine is a uniflow rotary steam engine where steam intakes in hot areas, while exhausting in cold areas.

Question: The uniflow engine is an attempt to fix an issue that arises in what cycle?


Context: On April 20, Kennedy sent a memo to Vice President Lyndon B. Johnson, asking Johnson to look into the status of America's space program, and into programs that could offer NASA the opportunity to catch up. Johnson responded approximately one week later, concluding that "we are neither making maximum effort nor achieving results necessary if this country is to reach a position of leadership." His memo concluded that a manned Moon landing was far enough in the future that it was likely the United States would achieve it first.

Question: How long did it take Johnson to respond to Kennedy?

approximately one week
one week
one week
one week
one week


Context: In the Presidential elections, President Kibaki under the Party of National Unity ran for re-election against the main opposition party, the Orange Democratic Movement (ODM). The elections were seen to have been flawed with international observers saying that they were below international standards. After a split which took a crucial 8% of the votes away from the ODM to the newly formed Orange Democratic Movement-Kenya (ODM-K)'s candidate, Kalonzo Musyoka, the race tightened between ODM candidate Raila Odinga and Kibaki. As the count came into the Electoral Commission of Kenya (ECK) headquarters, Odinga was shown to have a slight, and then substantial lead as the results from his strongholds came in early. As the ECK continued to count the votes, Kibaki closed the gap and then overtook his opponent by a substantial margin after votes from his stronghold arrived later. This led to protests and open discrediting of the ECK for complicity and to Odinga declaring himself the "people's president" and calling for a recount.

Question: Who called themselves the "People's President"?


Question: Find all datasets covering the theme land cover in the period 2006 - 2018

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Which are the datasets that deal with the theme land cover in the period from 2006 to 2018?

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Find all datasets that deal with the subject land cover in the time span from 2006 to 2018

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Which datasets deal with the subject land cover in the time span 2006 - 2018?

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Find all datasets that deal with theme land cover and subject land cover with temporal extent 2006 - 2018

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Which are the datasets covering the theme land cover and subject land cover in the period 2006 - 2018?

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str(2006)) > 0, 2006, 'NaN') AS ?startParam) BIND (IF(STRLEN(str(2018)) > 0, 2018, 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Find all datasets that cover the theme land cover

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?startParam) BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Which are the datasets that cover the theme land cover?

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?startParam) BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Which are the datasets that cover the subject land cover?

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?startParam) BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


Question: Find all datasets that deal with the subject land cover

select distinct ?dataset ?startDate ?endDate where { ?dataset a agricore:Dataset . ?dataset dcat:theme ?theme . FILTER ( ?theme IN (?subject)) . { SERVICE <http://publications.europa.eu/webapi/rdf/sparql> { SELECT  ?subject WHERE { graph <http://publications.europa.eu/resource/authority/data-theme> { ?subject  ?predicate  ?object . }  ?object a skos:Concept . ?subject skos:prefLabel ?label . FILTER ( regex(?label, 'land cover'@en, 'i') ) . } } } union { select ?subject where { graph <http://inspire.ec.europa.eu/theme> { ?subject  ?predicate  ?object . } ?object a <http://purl.org/net/provenance/ns#DataItem> . ?object <http://purl.org/dc/terms/title> ?title . FILTER ( lang(?title) = 'en') FILTER ( regex(?title, 'land cover', 'i') ) . } } BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?startParam) BIND (IF(STRLEN(str('')) > 0, '', 'NaN') AS ?endParam) OPTIONAL { ?dataset terms:temporal ?dateRange . ?dateRange a terms:PeriodOfTime . ?dateRange dcat:startDate ?startDate . ?dateRange dcat:endDate ?endDate . BIND (IF(?startParam <= year(?startDate), year(?startDate), ?startParam) AS ?max_start_date) BIND (IF(?endParam <= year(?endDate), ?endParam, year(?endDate)) AS ?min_end_date) FILTER (isNumeric(?startParam) && ?max_start_date <= year(?endDate) && isNumeric(?endParam) && ?min_end_date >= year(?startDate)) . } FILTER ((bound(?startDate) || ?startParam ='NaN') && (bound(?endDate) || ?endParam = 'NaN')) }


A slight flame comes out of the emptiness and

makes successful that which should not be believed in vain.


The wand in the hand is placed in the middle of the tripod's legs.

With water he sprinkles both the hem of his garment and his foot.

A voice, fear: he trembles in his robes.


When the litters are overturned by the whirlwind

the new republic will be troubled by its people.

At this time the reds and the whites will rule wrongly.


who will have little peace and a short life.

At this time the ship of the Papacy will be lost,


They will be driven away for a long drawn out fight.

The countryside will be most grievously troubled.

Town and country will have greater struggle.

Carcassonne and Narbonne will have their hearts tried.


The two of Bresse will have made a constitution

for Turin and Vercelli, which the French will trample underfoot


Arrived too late, the act has been done.

The wind was against them, letters intercepted on their way.

The conspirators were fourteen of a party.

By Rousseau shall these enterprises be undertaken.


How often will you be captured, O city of the sun ?

Changing laws that are barbaric and vain.

Bad times approach you. No longer will you be enslaved.


From the Orient will come the African heart

to trouble Hadrie and the heirs of Romulus.

the temples of Malta and nearby islands shall be deserted.


where seven children of the king are held.

The ancestors and forebears will come forth from the depths of hell,

lamenting to see thus dead the fruit of their line.


So long as we get the [NAME] from this season and not last season I'm happy


I could honestly just go without intermission interviews altogether.


I just looked for this sub so I could comment on how great he is.


And then he comes back after Wallmark's goal with, "A little Swedish Sizzle!" Best play-by-play announcer in the business. Love him!


Thank you. This sub is the one place I feel understood


Never argue with religious people. You can't win. They think [NAME] is real after all.


CNC is just the safe way to play out a rape fetish


Mixed drinks are tastier. And I hate raw clear spirits in particular.


I'm convinced alcoholism is rife in Ireland because ourselves and friends are all shite craic sober. Apparently the Heineken fake beers are nice.


I just drank some chocolate milk, now I'm a 9/10 supermodel with a great husband and my own island in a tropical location. Thanks! /s


Introduction.

Depressive disorder is one of the most widespread forms of mental disorders which lead to a significant public health concern, such as disability, suicide, and so on. Its etiology remains vague but it is believed that depressive disorder is a multifactorial disease which is induced by the interaction of social, psychological, and biological factors. Thus, there is no clear and definite pathological theory could illustrate its mechanism independently until now, involving genetics, neuroimaging, neuroinflammation, neuroendocrine, and others. Comprehensive assessment to patients with depression is the starting point for a right diagnosis. History-taking of physical condition is as important as psychiatric interview and rational usage of scales would be beneficial for screening. There are many kinds of therapeutic measures for depressive patients nowadays, including general intervention, pharmacotherapy, psychotherapy, and physical therapy. For now, anti-depressants used in clinical practice is almost monoamine-based drugs while much more progress have been made in developing new antidepressant medications, like prototypical N-methyl-D-aspartate (NMDA) receptor antagonists, opioid agonists, gamma-aminobutyric acid (GABAA) receptors, and psychedelics. Once these novel drugs are proved to be practicable, it will create a historical evolution in the field of psychiatry. In addition, we advocate that measurement-based care (MBC) should run through the whole duration of treatment and goals of MBC in every stage are different. As brain projects in many countries are conducting in inspiring ways, we believe that our understanding about depressive disorder, of course, and other neuropsychiatric disorders will be better in the future.

Question: are neurochemical drugs based on antidepressants


Effects of different nose types on class II treatments for female patients.

BACKGROUND: The aim of this study was to evaluate the effect of different nose types on the perception of facial aesthetics following camouflage treatment and orthognathic surgery for skeletal class II female patients.METHODS: A pre-treatment profile photograph of a skeletal class II adult patient was selected from the department archive. Two constructed photographs were created to represent orthognathic surgery and camouflage treatments with the aid of computer software. A total of 18 constructed images was composed using three profiles (pre-treatment, post-camouflage, and post-orthognathic surgery) and six nose types. These photographs were shown to the three groups (orthodontists, plastic surgeons, and lay people), and they were asked to assign an attractiveness score to each photo ranging from 0 to 100, with 0 indicating the least attractive and 100 indicating the most attractive.RESULTS: For the convex nose profiles, anterior movement of the mandible obtained by orthognathic surgery did not result in a significant change in the scores given by the lay people. When surgical or camouflage treatment was not implemented and, instead, just rhinoplasty was performed for these profiles, there was a significant increase in the aesthetic scores given by all groups. For the straight nose profiles, orthognathic surgery increased the attractiveness scores given by all groups. Furthermore, for all the profiles, extraction treatment did not affect the aesthetic scores given by any of the groups (P > 0.05).CONCLUSIONS: The lay people perceived that having a convex-bridged nose was a bigger problem than having a retrognathic profile. Overall, in terms of skeletal and dental orthodontic treatments, nose shape should be considered during the treatment planning process.

Question: what kind of noses does an orthognathic dentist do


[Effect of moxibustion pretreatment at different time on ovarian function in rats with dimini-shed ovarian reserve].

OBJECTIVE: To observe the effect of moxibustion pretreatment at different time on serum hormone levels in diminished ovarian reserve (DOR) rats, so as to explore its protective mechanisms.METHODS: Forty female SD rats were randomly divided into control, model, moxibustion-1 (moxibustion was given 4 weeks before modeling), moxibustion-2 (moxibustion was given 2 weeks before modeling and 2 weeks from the 1st day on after modeling ) and moxibustion-3 (moxibustion was given 4 weeks from the 1st day on after modeling) groups (n=8 rats in each group). The DOR model was established by gavage of Tripterygium Glycosides (75 mg/kg) once daily for 14 days. Grain-moxibustion was applied to "Shenshu" (BL23) and "Guanyuan" (CV4) for 7 cones, 5 times a week for 4 weeks. The body weight and the ovary weight were recorded for calculating the ovarian index. The levels of serum anti-mullerian hormone (AMH), follicle stimulating hormone (FSH), estradiol (E2), androgen (T) and dehydroepiandrosterone (DHEA) were detected by ELISA.RESULTS: After modeling, ovarian index and serum AMH levels were obviously decreased (P<0.05), and the levels of serum FSH, E2, T and DHEA were significantly increased in contrast with the control group (P<0.05). Following intervention and compared with the model group, the serum FSH and DHEA levels of each moxibustion group were significantly reduced (P<0.05), the AMH levels significantly increased and E2 and T contents significantly decreased in the moxibustion-2 and moxibustion-3 groups (P<0.05). The serum FSH, E2 and T contents in moxibustion-2 group were obviously lower than those of the moxibustion-1 and moxibustion-3 groups (P<0.05).CONCLUSION: Moxibustion pre-treatment can improve ovarian reserve function in DOR rats, while the effect is different with different intervention time, and the best intervention time is pre-occurrence and early stage of DOR.

Question: what hormones are in pretreatment rs rats


[Effect of electroacupuncture or moxibustion of "Tianshu" (ST25) on intragastric pressure in rats].

OBJECTIVE: To observe the effect of electroacupunctur (EA) and moxibustion of left or right "Tian-shu" (ST25) on intragastric pressure (IGP) in normal rats.METHODS: Twenty male SD rats were equally and randomly divided into EA group and moxibustion group. EA (2 Hz/15 Hz, 2 mA) or moxibustion (46-48 ?) was applied to unilate-ral ST25 for 2 min. The IGP was detected by using a pressure-transducer and an amplifier before and after EA or moxibustion.RESULTS: Compared with pre-intervention, the IGP was significantly decreased after EA or moxibustion stimulation of both left and right ST25 (P<0.05). The IGP levels during 0-30 s and 30-60 s of EA stimulation of both left and right ST25 were significantly lower than those of moxibustion (P<0.05). The IGP-lowering effect of EA on the left ST25 was evidently stronger than that of the right ST25 (P<0.05), but without significant difference between the bilateral sides in moxibustion-induced IGP reduction (P>0.05).CONCLUSION: Both EA and moxibustion of ST25 can lower IGP, and the effect of EA is significantly stronger than that of moxibustion in normal rats. In addition, the IGP-lowering effect of EA of the left ST25 is markedly stronger than that of the right ST25, suggesting a lateral advantage effect.

Question: how to decrease igp in rats


[Analysis on the distribution of pressure- and heat-sensitive acupoints in patients with allergic rhinitis].

OBJECTIVE: To explore the distribution of pressure- and heat-sensitive acupoints of the Large Intestine of Hand-Yangming, Stomach Meridian of Foot-Yangming and the Lung Meridian of Hand-Taiyin below the elbow and knee joints in patients with allergic rhinitis, so as to explore the positive reaction points at the body surface of allergic rhinitis.METHODS: Thirty variant rhinitis volunteer subjects and 30 healthy subjects were recruited in the present study. The subcutaneous induration, reaction points of emptiness-like feeling or pressing pain below the elbow- and knee-joints along the Large Intestine Meridian, Stomach Meridian and the Lung Meridian were inspected first, then re-examined by using heat-sensitized moxibustion method and a hand-held pain threshold tester (mechanical pressure), respectively. The frequency and coincidence rate of pressing-pain sensitive and heat-sensitive points were analyzed.RESULTS: In the 30 patients with allergic rhinitis, 10 positive reaction points as Kongzui (LU6), Chize (LU5), Hegu (LI4), Quchi (LI11), Shousanli(LI10), Zusanli (ST36), Shangjuxu (ST37), Fenglong (ST40), Xiajuxu (ST39), and non-acupoint of the Lung Meridian were found. Among them, the duration of heat-sensitive reaction in the LU6, LI10, ST37, ST40, and ST39 regions was obviously shorter in patients than in healthy subjects (P<0.01,P<0.005). The heat-sensitive forms of the positive reaction points were mainly heat transmission, heat-penetration and local reaction. The mechanical pain thresholds of the positive reaction points (LI4, LU6, LI10, LI11 and non-acupoint of the Lung Meridian) at the upper limbs and those (ST36, ST37 and ST40) at the lower limbs were evidently lower in patients than in healthy volunteer subjects (P<0.05). The pressure- and heat-sensitive acupoints were basically coincide in the patients, but being higher in patients than in healthy subjects in the frequency of occurrence. The mechanical pain threshold of the pressure-sensitive acupoints in patients was remarkably lower on the left side than on the right side of the upper limb, and obviously higher on the left side than on the right side of the lower limb (P<0.05). No significant differences were found between the right and left sides in the pain threshold in healthy subjects (P>0.05).CONCLUSION: There is a high overlap in the distribution of pressure- and heat-sensitive acupoints of the Lung, Large Intestine and Stomach meridians below the elbow and knee joints in patients with allergic rhinitis, and there is an imbalance between the left and right limbs in the mechanical pain threshold of the pressure- and heat-sensitive acupoints, but needing being further confirmed.

Question: which region of the limb is insensitive to heat


[Effect of "Buqi Yixue" needling on neurological function and nerve conduction velocity in patients with diabetic peripheral neuropathy].

OBJECTIVE: To observe the efficacy of "Buqi Yixue "needling on clinical symptoms, neurological function and nerve conduction velocity in patients with diabetic peripheral neuropathy.METHODS: Eighty-six patients with diabetic peripheral neuropathy numbness and pain were equally randomized into control group and treatment group. The patients of the control group received basic treatment and oral administration of Cilostazol (50 mg/time, 2 times/d) and Epalrestat (50 mg/time, 3 times/d). The patients of the treatment group received acupuncture stimulation of Danzhong (CV17), Qihai (CV6), Pishu (BL20), Quchi (LI11), etc., for 30 min, once every day, on the basic treatment. The treatment was conducted for 8 successive weeks. The scores of Traditional Chinese Medicine (TCM) symptoms, Toronto clinical scoring system (TCSS) and nerve conduction velocity (NCV) were detected before and after the treatment.RESULTS: After the treatment, the scores of TCM symptoms and TCSS were considerably decreased (P<0.05), and the NCV was significantly increased (P<0.05) in both groups compared with those of their own pre-treatment. The the-rapeutic effect of the treatment group was significantly superior to that of the control group in lowering the scores of TCM symptoms and TCSS, and in up-regulating the NCV (P<0.01).CONCLUSION: "Buqi Yixue" needling is effective in improving clinical symptoms and increasing NCV in patients with diabetic peripheral neuropathy.

Question: what is a buqi yixue


[Influence of different courses of electroacupuncture treatment on compliance and therapeutic outcome of patients with cervical type cervical spondylosis: a small-sample randomized controlled trial].

OBJECTIVE: To investigate the influence of different courses of electroacupuncture treatment on the compliance and therapeutic outcome of patients with cervical type cervical spondylosis.METHODS: A total of 60 patients with cervical type cervical spondylosis were randomly divided into 5-time treatment group and 10-time treatment group, with 30 patients in each group. With the same electroacupuncture prescription, the patients in the 5-time treatment group were given electroacupuncture once a day for 5 times in total, and those in the 10-time treatment group were given electroacupuncture once a day for 10 times in total, with an interval of 2 days between every 5 times of treatment. The two groups were compared in terms of cervical Visual Analogue Scale (VAS) score and treatment score of cervical spondylosis before and after treatment, as well as whether and why the patients were willing to continue treatment after 5 times of treatment. The two groups were followed up to observe the recurrence of cervical spondylosis within 12 months.RESULTS: Both groups had significant improvements in cervical VAS score and treatment score of cervical spondylosis after treatment (P<0.05), and there were no significant differences in these scores between the two groups after treatment (P>0.05). There was also no significant difference in long-term recurrence between the two groups (P>0.05). Of the 30 patients in the 10-time treatment group, 21 (70%) showed no willingness to continue treatment after 5 times of treatment since they were satisfied with their treatment outcomes.CONCLUSION: Electroacupuncture can effectively improve the pain symptom of patients with cervical type cervical spondylosis, and compared with 5 times of electroacupuncture treatment, 10 times of electroacupuncture treatment may affect patients' compliance with clinical treatment.

Question: does electroacupuncture work for cervical spondylosis


[Effect of "Yinqi Guiyuan" needling on primary insomnia].

OBJECTIVE: To observe the clinical effect of "Yinqi Guiyuan" needling in the treatment of primary insomnia.METHODS: A total of 79 primary insomnia outpatients were randomly divided into treatment group (n=40) and control group (n=39). The patients in the control group were given oral Estazolam tablets once a day, for successive 4 weeks. For patients of the treatment group, Zhongwan (CV12), Xiawan (CV10), Qihai (CV6), Guanyuan (CV4), Baihui (GV20), etc., were punctured with filiform needles for 30 min. The treatment was conducted three times per week for 4 successive weeks. The sleep quality (sleeping quality, falling asleep time, sleep duration, sleep efficiency, sleep disorders, hypnotic and daytime dysfunction, 0 to 21 points) was evaluated by using Pittsburgh Sleep Quality Index (PSQI). The severity of insomnia (self-perception, sleep satisfaction, daytime function damage, sensibility change, and concern for sleep problems, 0 to 28 points) was assessed using insomnia severity index (ISI) score. The therapeutic effect was evaluated according to the PSQI score reduction rate = (pre-treatment PSQI score-post-treatment PSQI score)/pre-treatment PSQI score ?100%.RESULTS: After treatment, the total score of PSQI, ISI and the score of each item were all significantly reduced in the two groups relevant to their own pre-treatment (P<0.05). The total score, and scores of hypnotic and daytime dysfunction were significantly lower in the treatment group than in the control group (P<0.05). Of the 40 and 39 cases in the treatment and control groups, 5 (12.50%) and 4 (10.25%) were cured, 20 (50.00%) and 18 (46.15%) experienced marked improvement, 12 (30.00%) and 13 (33.33%) were effective, and 3 (7.50%) and 4 (10.25%) ineffective, with the total effective rate being 92.50% and 89.74%, respectively. No significant difference was found between the two groups in the effective rate (P>0.05).CONCLUSION: "Yinqi Guiyuan" needling and Estazolam are comparable in treatment primary insomnia, and the former is superior to the latter in avoiding hypnotic drug use and in improving daytime function.

Question: yinqi guiyuan effect


[A modified device for transcutaneous electrical auricular concha stimulation in rats].

In the present paper, we introduce a newly modified device named "transcutaneous electrical auricular concha stimulator (TEACS)" for rats. It concludes a main unit (power and control buttons) with newly designed specific output electrodes. Each of the output electrode is made up of two pieces of iron sheet containing magnet and can be firmly attached to the auricular concha and the corresponding site of dorsal auricle, respectively. The two iron sheets are separately connected to each of the output terminal of the main unit via two pieces of wire. This newly modified output electrode replaces the original wire clip, and solves the problems of easy loosening and easy injury of the original spring clip due to repeated usage, being simple, flexible and convenient in application.

Question: teach aurcular stimulator


Experimental transmission of infectious spleen and kidney necrosis virus (ISKNV) from freshwater ornamental fish to silver sweep Scorpis lineolata, an Australian marine fish.

The Australian native marine fish species, silver sweep Scorpis lineolata, is susceptible to the megalocytivirus Infectious spleen and kidney necrosis virus (strain DGIV-10) obtained from a freshwater ornamental fish, dwarf gourami Trichogaster lalius. This was demonstrated by direct inoculation and through cohabitation. Transmission by cohabitation was also demonstrated from inoculated freshwater Murray cod Maccullochella peelii to euryhaline Australian bass Macquaria novemaculeata and to marine silver sweep. The virus was also transmitted from infected marine silver sweep to euryhaline Australian bass and then to freshwater Murray cod. This study is the first to demonstrate the virulence of a megalocytivirus derived from ornamental fish in an Australian marine species and the first to show a feasible pathway for the exchange of megalocytiviruses between freshwater and marine finfish hosts. These results demonstrate that megalocytiviruses from freshwater ornamental fish have the potential to spread to diverse aquatic environments.

Question: is the megalocytivirus found in fish


Question: what website is linked in the tweet?

Answer: instagram

I can finally say it out loud and proud: I'm going to a galaxy far far away! Lupita Nyong'o (@Lupita_Nyongo) June 2, 2014


Question: what is up to us to keep doing?

Answer: exploring

Cassini showed us the beauty of Saturn. It revealed the best in us. Now it's up to us to keep exploring. CassiniSaturn (@CassiniSaturn) September 15, 2017


from django.conf import settings
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.http import HttpResponse

from tardis.tardis_portal.auth import decorators as authz
from tardis.tardis_portal.models import Dataset
from tardis.tardis_portal.shortcuts import get_experiment_referer
from tardis.tardis_portal.shortcuts import render_response_index

@authz.dataset_access_required
def view_full_dataset(request, dataset_id):
    """Displays a MX Dataset and associated information.

    Shows a full (hundreds of images) dataset its metadata and a list
    of associated files with the option to show metadata of each file
    and ways to download those files.  With write permission this page
    also allows uploading and metadata editing.

    Settings for this view:
    INSTALLED_APPS += ("tardis.apps.mx_views",)
    DATASET_VIEWS = [("http://synchrotron.org.au/views/dataset/full",
                      "tardis.apps.mx_views.views.view_full_dataset"),]

    """
    dataset = Dataset.objects.get(id=dataset_id)

    def get_datafiles_page():
        # pagination was removed by someone in the interface but not here.
        # need to fix.
        pgresults = 100

        paginator = Paginator(dataset.datafile_set.all(), pgresults)

        try:
            page = int(request.GET.get('page', '1'))
        except ValueError:
            page = 1

        # If page request (9999) is out of range, deliver last page of results.

        try:
            return paginator.page(page)
        except (EmptyPage, InvalidPage):
            return paginator.page(paginator.num_pages)

    display_images = dataset.get_images()
    image_count = len(display_images)
    if image_count > 4:
        # take 4 evenly spaced images from the set
        display_images = display_images[0::image_count / 4][:4]

    upload_method = getattr(settings, "UPLOAD_METHOD", "uploadify")

    c = {
        'dataset': dataset,
        'datafiles': get_datafiles_page(),
        'parametersets': dataset.getParameterSets()
                                .exclude(schema__hidden=True),
        'has_download_permissions':
            authz.has_dataset_download_access(request, dataset_id),
        'has_write_permissions':
            authz.has_dataset_write(request, dataset_id),
        'from_experiment': \
            get_experiment_referer(request, dataset_id),
        'other_experiments': \
            authz.get_accessible_experiments_for_dataset(request, dataset_id),
        'display_images': display_images,
        'upload_method': upload_method,
        'default_organization':
            getattr(settings, 'DEFAULT_ARCHIVE_ORGANIZATION', 'classic'),
        'default_format':
            getattr(settings, 'DEFAULT_ARCHIVE_FORMATS', ['tgz', 'tar'])[0]
    }
    return HttpResponse(render_response_index(
        request, 'mx_views/view_full_dataset.html', c))


from sourcer import Grammar

# This is work in progress.
# See: https://help.salesforce.com/articleView?id=customize_functions.htm&type=5

g = Grammar(r'''
    ```
    import ast
    ```

    start = Expression

    Expression = OperatorPrecedence(
        Atom | "(" >> Expression << ")",
        Postfix(ArgumentList | FieldAccess),
        Prefix("-" | "+" | "!"),
        RightAssoc("^"),
        LeftAssoc("*" | "/"),
        LeftAssoc("+" | "-" | "&"),
        NonAssoc("<=" | "<" | ">=" | ">"),
        NonAssoc("!=" | "<>" | "==" | "="),
        LeftAssoc("&&"),
        LeftAssoc("||"),
    )

    class ArgumentList {
        arguments: "(" >> (Expression /? ",") << ")"
    }

    class FieldAccess {
        field: "." >> Word
    }

    Atom = Global | Identifier | Rational | Integer | String

    class Global {
        name: "$" >> Word
    }

    class Identifier {
        name: Word
    }

    # ASK: What is the real syntax for these things?
    Word = /[_a-zA-Z][_a-zA-Z0-9]*/
    Rational = /(\d+\.\d*)|(\d*\.\d+)/ |> `float`
    Integer = /\d+/ |> `int`
    StringLiteral = /("([^"\\]|\\.)*")/ | /('([^'\\]|\\.)*')/

    # For now, just use ast module to evaluate string literals.
    class String {
        value: StringLiteral |> `ast.literal_eval`
    }

    ignore /\s+/

''', include_source=True)

aliases = {
    '=': '==',
    '<>': '!=',
}

constants = {
    'NULL': None,
    'TRUE': True,
    'FALSE': False,
}

# Incomplete collection of evaluators.
evaluators = {
    '*': lambda x, y: x * y if x is not None and y is not None else None,
    '/': lambda x, y: x / y if x is not None and y is not None else None,
    '+': lambda x, y: x + y if x is not None and y is not None else None,
    '-': lambda x, y: x - y if x is not None and y is not None else None,
    '==': lambda x, y: x == y,
    '!=': lambda x, y: x != y,
    '&&': lambda x, y: x and y,
    '||': lambda x, y: x or y,
    '>': lambda x, y: x > y if x is not None and y is not None else False,
    '<': lambda x, y: x < y if x is not None and y is not None else False,
    '>=': lambda x, y: x >= y if x is not None and y is not None else False,
    '<=': lambda x, y: x <= y if x is not None and y is not None else False,
    'AND': lambda *a: all(a),
    'CONTAINS': lambda x, y: str(y) in str(x) if x is not None else True,
    'IF': lambda x, y, z: y if x else z,
    'ISBLANK': lambda x: x is None,
    'LOG': lambda x: log10(x) if x is not None else None,
    'MAX': lambda *a: max(*a),
    'MIN': lambda *a: min(*a),
    'MOD': lambda x, y: (x % y) if x is not None and y is not None else None,
    'NOT': lambda x: not(x),
    'OR': lambda *a: any(a),
    'SQRT': lambda x: sqrt(x) if x is not None else None,
    'TEXT': lambda x: str(x),
}

def evaluate(node, bindings):
    # Look up identifiers.
    if isinstance(node, g.Identifier):
        if node.name in bindings:
            return bindings[node.name]

        name = node.name.upper()
        return bindings.get(name, name)

    # Look up fields.
    if isinstance(node, g.Postfix) and isinstance(node.operator, g.FieldAccess):
        obj, field = node.left, node.operator.field
        if hasattr(obj, field):
            return getattr(obj, field)
        elif isinstance(obj, dict):
            return obj.get(field)
        else:
            return node

    # Evaluate function calls and operators.
    if isinstance(node, g.Infix):
        x, func, y = node.left, node.operator, node.right
        args = (x, y)
    elif isinstance(node, g.Postfix) and isinstance(node.operator, g.ArgumentList):
        func, args = node.left, node.operator.arguments
    else:
        return node

    # Check if we're using an alias.
    func = aliases.get(func, func)

    if func in evaluators:
        return evaluators[func](*args)
    else:
        return node

def run(formula, bindings=None):
    updated_bindings = dict(constants)
    updated_bindings.update(bindings or {})
    tree = g.parse(formula)
    return g.transform(tree, lambda node: evaluate(node, updated_bindings))

def test_some_simple_formulas():
    result = run('1 + 2 * 3')
    assert result == 7

    result = run('foo == bar && fiz == buz', bindings={
        'foo': 1, 'bar': 1, 'fiz': 2, 'buz': 2,
    })
    assert result == True

    result = run('foo == bar && fiz == buz', bindings={
        'foo': 1, 'bar': 1, 'fiz': 2, 'buz': 3,
    })
    assert result == False

    result = run('1 <= 2 && (false || true)')
    assert result == True # Explicitly compare to True.

    result = run('1 > 2 || (true && false)')
    assert result == False # Explicitly compare to False.

    result = run('foo != bar', bindings={'foo': 10, 'bar': 10})
    assert not result

    result = run('foo != bar', bindings={'foo': 1, 'bar': 2})
    assert result

    result = run('foo.bar', bindings={'foo': {'bar': 10}})
    assert result == 10

    result = run('foo.bar.baz', bindings={'foo': {'bar': {'baz': 100}}})
    assert result == 100

    result = run('MIN(20, 10, 30)')
    assert result == 10

    result = run('MIN(20, 10, 30) + MAX(11, 12, 13)')
    assert result == 23


## Copyright 2003-2009 Luc Saffre
## This file is part of the TimTools project.
## TimTools is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
## TimTools is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with TimTools; if not, see <http://www.gnu.org/licenses/>.

import re

def plain2xml(txt):
   txt = txt.replace("&","&")
   txt = txt.replace("<","<")
   return txt

memocommands = (
   ( re.compile('\[url\s+(\S+)\s*(.*?)\]',re.DOTALL),
     lambda m : ''+m.group(2)+' (' + m.group(1)+ ')'),
   )
# urlfind =
# urlrepl = re.compile('\2 (\1)')

# def urlrepl(m):

def memo2xml(txt):
   txt = plain2xml(txt)
   txt = txt.replace('[B]','')
   txt = txt.replace('[b]','')
   txt = txt.replace('[U]','')
   txt = txt.replace('[u]','')
   for find,repl in memocommands:
      txt = re.sub(find,repl,txt)
   return txt

def rst2xml(txt):
   raise "doesn't work"
   import docutils.parsers.rst
   import docutils.utils
   parser = docutils.parsers.rst.Parser()
   doc = docutils.utils.new_document("feed")
   parser.parse(txt, doc)
   raise "and now?"

_feeders={
   'xml' : lambda x : x,
   'plain' : plain2xml,
   'rst' : rst2xml,
   'memo' : memo2xml,
   }

def getFeeder(name):
   return _feeders[name]


from __future__ import absolute_import
from typing import Any, List, Dict, Optional, Text

from django.conf import settings
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse, HttpRequest
from django.shortcuts import redirect
from django.utils import translation
from django.utils.cache import patch_cache_control
from six.moves import zip_longest, zip, range

from zerver.decorator import zulip_login_required, process_client
from zerver.forms import ToSForm
from zerver.lib.realm_icon import realm_icon_url
from zerver.models import Message, UserProfile, Stream, Subscription, Huddle, \
    Recipient, Realm, UserMessage, DefaultStream, RealmEmoji, RealmAlias, \
    RealmFilter, PreregistrationUser, UserActivity, \
    UserPresence, get_recipient, name_changes_disabled, email_to_username, \
    list_of_domains_for_realm
from zerver.lib.events import do_events_register
from zerver.lib.actions import update_user_presence, do_change_tos_version, \
    do_update_pointer, get_cross_realm_dicts, realm_user_count
from zerver.lib.avatar import avatar_url
from zerver.lib.i18n import get_language_list, get_language_name, \
    get_language_list_for_templates
from zerver.lib.push_notifications import num_push_devices_for_user
from zerver.lib.streams import access_stream_by_name
from zerver.lib.utils import statsd, get_subdomain
from zproject.backends import password_auth_enabled
from zproject.jinja2 import render_to_response

import calendar
import datetime
import logging
import os
import re
import simplejson
import time

@zulip_login_required
def accounts_accept_terms(request):
    # type: (HttpRequest) -> HttpResponse
    if request.method == "POST":
        form = ToSForm(request.POST)
        if form.is_valid():
            do_change_tos_version(request.user, settings.TOS_VERSION)
            return redirect(home)
    else:
        form = ToSForm()

    email = request.user.email
    special_message_template = None
    if request.user.tos_version is None and settings.FIRST_TIME_TOS_TEMPLATE is not None:
        special_message_template = 'zerver/' + settings.FIRST_TIME_TOS_TEMPLATE
    return render_to_response(
        'zerver/accounts_accept_terms.html',
        {'form': form,
         'email': email,
         'special_message_template': special_message_template},
        request=request)

def approximate_unread_count(user_profile):
    # type: (UserProfile) -> int
    not_in_home_view_recipients = [sub.recipient.id for sub in
                                   Subscription.objects.filter(
                                       user_profile=user_profile, in_home_view=False)]

    # TODO: We may want to exclude muted messages from this count.
    #       It was attempted in the past, but the original attempt
    #       was broken.  When we re-architect muting, we may
    #       want to to revisit this (see git issue #1019).
    return UserMessage.objects.filter(
        user_profile=user_profile, message_id__gt=user_profile.pointer).exclude(
        message__recipient__type=Recipient.STREAM,
        message__recipient__id__in=not_in_home_view_recipients).exclude(
        flags=UserMessage.flags.read).count()

def sent_time_in_epoch_seconds(user_message):
    # type: (UserMessage) -> Optional[float]
    # user_message is a UserMessage object.
    if not user_message:
        return None
    # We have USE_TZ = True, so our datetime objects are timezone-aware.
    # Return the epoch seconds in UTC.
    return calendar.timegm(user_message.message.pub_date.utctimetuple())

def home(request):
    # type: (HttpRequest) -> HttpResponse
    if settings.DEVELOPMENT and os.path.exists('var/handlebars-templates/compile.error'):
        response = render_to_response('zerver/handlebars_compilation_failed.html',
                                      request=request)
        response.status_code = 500
        return response
    if not settings.SUBDOMAINS_HOMEPAGE:
        return home_real(request)

    # If settings.SUBDOMAINS_HOMEPAGE, sends the user the landing
    # page, not the login form, on the root domain

    subdomain = get_subdomain(request)
    if subdomain != "":
        return home_real(request)

    return render_to_response('zerver/hello.html',
                              request=request)

@zulip_login_required
def home_real(request):
    # type: (HttpRequest) -> HttpResponse
    # We need to modify the session object every two weeks or it will expire.
    # This line makes reloading the page a sufficient action to keep the
    # session alive.
    request.session.modified = True

    user_profile = request.user

    # If a user hasn't signed the current Terms of Service, send them there
    if settings.TERMS_OF_SERVICE is not None and settings.TOS_VERSION is not None and \
       int(settings.TOS_VERSION.split('.')[0]) > user_profile.major_tos_version():
        return accounts_accept_terms(request)

    narrow = [] # type: List[List[Text]]
    narrow_stream = None
    narrow_topic = request.GET.get("topic")
    if request.GET.get("stream"):
        try:
            narrow_stream_name = request.GET.get("stream")
            (narrow_stream, ignored_rec, ignored_sub) = access_stream_by_name(
                user_profile, narrow_stream_name)
            narrow = [["stream", narrow_stream.name]]
        except Exception:
            logging.exception("Narrow parsing")
        if narrow_stream is not None and narrow_topic is not None:
            narrow.append(["topic", narrow_topic])

    register_ret = do_events_register(user_profile, request.client,
                                      apply_markdown=True, narrow=narrow)
    user_has_messages = (register_ret['max_message_id'] != -1)

    # Reset our don't-spam-users-with-email counter since the
    # user has since logged in
    if user_profile.last_reminder is not None:
        user_profile.last_reminder = None
        user_profile.save(update_fields=["last_reminder"])

    # Brand new users get the tutorial
    needs_tutorial = settings.TUTORIAL_ENABLED and \
        user_profile.tutorial_status != UserProfile.TUTORIAL_FINISHED

    first_in_realm = realm_user_count(user_profile.realm) == 1
    # If you are the only person in the realm and you didn't invite
    # anyone, we'll continue to encourage you to do so on the frontend.
    prompt_for_invites = first_in_realm and \
        not PreregistrationUser.objects.filter(referred_by=user_profile).count()

    if user_profile.pointer == -1 and user_has_messages:
        # Put the new user's pointer at the bottom
        #
        # This improves performance, because we limit backfilling of messages
        # before the pointer.  It's also likely that someone joining an
        # organization is interested in recent messages more than the very
        # first messages on the system.

        register_ret['pointer'] = register_ret['max_message_id']
        user_profile.last_pointer_updater = request.session.session_key

    if user_profile.pointer == -1:
        latest_read = None
    else:
        try:
            latest_read = UserMessage.objects.get(user_profile=user_profile,
                                                  message__id=user_profile.pointer)
        except UserMessage.DoesNotExist:
            # Don't completely fail if your saved pointer ID is invalid
            logging.warning("%s has invalid pointer %s" % (user_profile.email, user_profile.pointer))
            latest_read = None

    desktop_notifications_enabled = user_profile.enable_desktop_notifications
    if narrow_stream is not None:
        desktop_notifications_enabled = False

    if user_profile.realm.notifications_stream:
        notifications_stream = user_profile.realm.notifications_stream.name
    else:
        notifications_stream = ""

    # Set default language and make it persist
    default_language = register_ret['default_language']
    url_lang = '/{}'.format(request.LANGUAGE_CODE)
    if not request.path.startswith(url_lang):
        translation.activate(default_language)

    request.session[translation.LANGUAGE_SESSION_KEY] = default_language

    # Pass parameters to the client-side JavaScript code.
    # These end up in a global JavaScript Object named 'page_params'.
    page_params = dict(
        # Server settings.
        share_the_love        = settings.SHARE_THE_LOVE,
        development_environment = settings.DEVELOPMENT,
        debug_mode            = settings.DEBUG,
        test_suite            = settings.TEST_SUITE,
        poll_timeout          = settings.POLL_TIMEOUT,
        login_page            = settings.HOME_NOT_LOGGED_IN,
        server_uri            = settings.SERVER_URI,
        maxfilesize           = settings.MAX_FILE_UPLOAD_SIZE,
        max_avatar_file_size  = settings.MAX_AVATAR_FILE_SIZE,
        server_generation     = settings.SERVER_GENERATION,
        use_websockets        = settings.USE_WEBSOCKETS,
        save_stacktraces      = settings.SAVE_FRONTEND_STACKTRACES,

        # realm data.
        # TODO: Move all of these data to register_ret and pull from there
        realm_uri             = user_profile.realm.uri,
        password_auth_enabled = password_auth_enabled(user_profile.realm),
        domains               = list_of_domains_for_realm(user_profile.realm),
        name_changes_disabled = name_changes_disabled(user_profile.realm),
        mandatory_topics      = user_profile.realm.mandatory_topics,
        show_digest_email     = user_profile.realm.show_digest_email,
        realm_presence_disabled = user_profile.realm.presence_disabled,
        is_zephyr_mirror_realm = user_profile.realm.is_zephyr_mirror_realm,

        # user_profile data.
        # TODO: Move all of these data to register_ret and pull from there
        fullname              = user_profile.full_name,
        email                 = user_profile.email,
        enter_sends           = user_profile.enter_sends,
        user_id               = user_profile.id,
        is_admin              = user_profile.is_realm_admin,
        can_create_streams    = user_profile.can_create_streams(),
        autoscroll_forever = user_profile.autoscroll_forever,
        default_desktop_notifications = user_profile.default_desktop_notifications,
        avatar_url            = avatar_url(user_profile),
        avatar_url_medium     = avatar_url(user_profile, medium=True),
        avatar_source         = user_profile.avatar_source,
        timezone              = user_profile.timezone,

        # Stream message notification settings:
        stream_desktop_notifications_enabled = user_profile.enable_stream_desktop_notifications,
        stream_sounds_enabled = user_profile.enable_stream_sounds,

        # Private message and @-mention notification settings:
        desktop_notifications_enabled = desktop_notifications_enabled,
        sounds_enabled = user_profile.enable_sounds,
        enable_offline_email_notifications = user_profile.enable_offline_email_notifications,
        pm_content_in_desktop_notifications = user_profile.pm_content_in_desktop_notifications,
        enable_offline_push_notifications = user_profile.enable_offline_push_notifications,
        enable_online_push_notifications = user_profile.enable_online_push_notifications,
        enable_digest_emails  = user_profile.enable_digest_emails,

        # Realm foreign key data from register_ret.
        # TODO: Rename these to match register_ret values.
        subbed_info           = register_ret['subscriptions'],
        unsubbed_info         = register_ret['unsubscribed'],
        neversubbed_info      = register_ret['never_subscribed'],
        people_list           = register_ret['realm_users'],
        bot_list              = register_ret['realm_bots'],
        initial_pointer       = register_ret['pointer'],
        initial_presences     = register_ret['presences'],
        event_queue_id        = register_ret['queue_id'],

        # Misc. extra data.
        have_initial_messages = user_has_messages,
        initial_servertime    = time.time(), # Used for calculating relative presence age
        default_language_name = get_language_name(register_ret['default_language']),
        language_list_dbl_col = get_language_list_for_templates(register_ret['default_language']),
        language_list         = get_language_list(),
        needs_tutorial        = needs_tutorial,
        first_in_realm        = first_in_realm,
        prompt_for_invites    = prompt_for_invites,
        notifications_stream  = notifications_stream,
        cross_realm_bots      = list(get_cross_realm_dicts()),
        unread_count          = approximate_unread_count(user_profile),
        furthest_read_time    = sent_time_in_epoch_seconds(latest_read),
        has_mobile_devices    = num_push_devices_for_user(user_profile) > 0,
    )

    # These fields will be automatically copied from register_ret into
    # page_params.  It is a goal to move more of the page_params list
    # into this sort of cleaner structure.
    page_params_core_fields = [
        'alert_words',
        'attachments',
        'default_language',
        'emoji_alt_code',
        'last_event_id',
        'left_side_userlist',
        'max_icon_file_size',
        'max_message_id',
        'muted_topics',
        'realm_add_emoji_by_admins_only',
        'realm_allow_message_editing',
        'realm_authentication_methods',
        'realm_bot_domain',
        'realm_create_stream_by_admins_only',
        'realm_default_language',
        'realm_default_streams',
        'realm_email_changes_disabled',
        'realm_emoji',
        'realm_filters',
        'realm_icon_source',
        'realm_icon_url',
        'realm_invite_by_admins_only',
        'realm_invite_required',
        'realm_message_content_edit_limit_seconds',
        'realm_name',
        'realm_name_changes_disabled',
        'realm_restricted_to_domain',
        'realm_waiting_period_threshold',
        'referrals',
        'twenty_four_hour_time',
        'zulip_version',
    ]

    for field_name in page_params_core_fields:
        page_params[field_name] = register_ret[field_name]

    if narrow_stream is not None:
        # In narrow_stream context, initial pointer is just latest message
        recipient = get_recipient(Recipient.STREAM, narrow_stream.id)
        try:
            initial_pointer = Message.objects.filter(recipient=recipient).order_by('id').reverse()[0].id
        except IndexError:
            initial_pointer = -1
        page_params["narrow_stream"] = narrow_stream.name
        if narrow_topic is not None:
            page_params["narrow_topic"] = narrow_topic
        page_params["narrow"] = [dict(operator=term[0], operand=term[1]) for term in narrow]
        page_params["max_message_id"] = initial_pointer
        page_params["initial_pointer"] = initial_pointer
        page_params["have_initial_messages"] = (initial_pointer != -1)

    statsd.incr('views.home')
    show_invites = True

    # Some realms only allow admins to invite users
    if user_profile.realm.invite_by_admins_only and not user_profile.is_realm_admin:
        show_invites = False

    request._log_data['extra'] = "[%s]" % (register_ret["queue_id"],)
    response = render_to_response('zerver/index.html',
                                  {'user_profile': user_profile,
                                   'page_params': simplejson.encoder.JSONEncoderForHTML().encode(page_params),
                                   'nofontface': is_buggy_ua(request.META.get("HTTP_USER_AGENT", "Unspecified")),
                                   'avatar_url': avatar_url(user_profile),
                                   'show_debug':
                                       settings.DEBUG and ('show_debug' in request.GET),
                                   'pipeline': settings.PIPELINE_ENABLED,
                                   'show_invites': show_invites,
                                   'is_admin': user_profile.is_realm_admin,
                                   'show_webathena': user_profile.realm.webathena_enabled,
                                   'enable_feedback': settings.ENABLE_FEEDBACK,
                                   'embedded': narrow_stream is not None,
                                   },
                                  request=request)
    patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
    return response

@zulip_login_required
def desktop_home(request):
    # type: (HttpRequest) -> HttpResponse
    return HttpResponseRedirect(reverse('zerver.views.home.home'))

def is_buggy_ua(agent):
    # type: (str) -> bool
    """Discrimiate CSS served to clients based on User Agent

    Due to QTBUG-3467, @font-face is not supported in QtWebKit.
    This may get fixed in the future, but for right now we can
    just serve the more conservative CSS to all our desktop apps.
    """
    return ("Humbug Desktop/" in agent or "Zulip Desktop/" in agent or "ZulipDesktop/" in agent) and \
        "Mac" not in agent


from zeit.cms.i18n import MessageFactory as _
from zope.cachedescriptors.property import Lazy as cachedproperty
import os.path
import zeit.cms.browser.view
import zeit.cms.content.interfaces
import zeit.cms.interfaces
import zeit.content.image.interfaces
import zeit.content.video.interfaces
import zeit.edit.browser.form
import zeit.edit.browser.landing
import zeit.edit.browser.view
import zeit.newsletter.interfaces
import zope.formlib.form

class LandingZoneBase(zeit.edit.browser.landing.LandingZone):

    uniqueId = zeit.edit.browser.view.Form('uniqueId')
    block_type = 'teaser'

    def initialize_block(self):
        content = zeit.cms.interfaces.ICMSContent(self.uniqueId)
        self.block.reference = content

class GroupLandingZone(LandingZoneBase):
    """Handler to drop objects to the body's landing zone."""

    order = 0

class TeaserLandingZone(LandingZoneBase):
    """Handler to drop objects after other objects."""

    order = 'after-context'

class Teaser(zeit.cms.browser.view.Base):

    @cachedproperty
    def metadata(self):
        return zeit.cms.content.interfaces.ICommonMetadata(
            self.context.reference, None)

    @cachedproperty
    def image(self):
        # XXX copy&paste&tweak of zeit.content.cp.browser.blocks.teaser.Display
        content = self.context.reference
        if content is None:
            return
        if zeit.content.video.interfaces.IVideoContent.providedBy(content):
            return content.thumbnail
        images = zeit.content.image.interfaces.IImages(content, None)
        if images is None:
            preview = zope.component.queryMultiAdapter(
                (content, self.request), name='preview')
            if preview:
                return self.url(preview)
            return
        if not images.image:
            return
        group = images.image
        for name in group:
            basename, ext = os.path.splitext(name)
            if basename.endswith('148x84'):
                image = group[name]
                return self.url(image, '@@raw')

class Advertisement(zeit.cms.browser.view.Base):

    @cachedproperty
    def image(self):
        if not self.context.image:
            return
        return self.url(self.context.image, '@@raw')

class GroupTitle(zeit.edit.browser.form.InlineForm):

    legend = None
    prefix = 'group'
    undo_description = _('edit group title')

    form_fields = zope.formlib.form.FormFields(
        zeit.newsletter.interfaces.IGroup).select('title')

class Empty(object):

    def render(self):
        return u''