text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AlgorithmChallenges
{
    public class ArithmeticProgressions
    {
        /*https://www.hackerrank.com/challenges/arithmetic-progressions
         * Let F(a,d) denote an arithmetic progression (AP) with first term 'a' and common difference 'd'. i.e  F(a,d) denotes an infinite AP => a, a+d, a+2d, a+3d,… You are given 'n' APs => F(a1,d1), F(a2,d2), F(a3,d3),… F(an,dn). Let G(a1,a2,… an,d1,d2,… dn) denote the sequence obtained by multiplying the 'n' APs.

        Multiplication of 2 sequences is defined as follows: Let the terms of the first sequence be A1, A2,… Am, and terms of the second sequence be B1, B2,… Bm. The sequence obtained by multiplying these two sequences is: A1*B1, A2*B2,… Am*Bm. We also give the definition for the kth difference of a sequence. If A1, A2,… Am,… be the terms of a sequence, then the terms of the 1st difference of this sequence are given by A2-A1, A3-A2,… Am-A(m-1),… In general, if A1, A2,… Am,… be the terms of the kth difference of a sequence, then the terms of the k+1th difference are given by A2-A1, A3-A2,… Am-A(m-1),… We say that the kth difference of a sequence is a constant, if all the terms of the kth difference are equal.

        Let F'(a,d,p) be a sequence defined as => a^p, (a+d)^p, (a+2d)^p,… Similarly, G'(a1,a2,… an,d1,d2,… dn,p1,p2,… pn) is defined as => product of F'(a1,d1,p1), F'(a2,d2,p2),… F'(an,dn,pn). Now, your task is to find the smallest 'k' for which the kth difference of the sequence G' is a constant. You are also required to find this constant value.

        You will be given many operations. Each operation is of one of the 2 forms:

        1) 0 i j => 0 indicates a query (1<=i<=j<=n).You are required to find the smallest 'k' for which the  kth difference of G'(ai,ai+1,… aj,di,di+1,… dj,pi,pi+1,… pj) is a constant. You should also output this constant value.

        2) 1 i j v => 1 indicates an update (1<=i<=j<=n). For all i<=k<=j, we update pk = pk+v.

        Input:

        The first line of input contains a single integer 'n', denoting the number of APs. Each of the next 'n' lines consists of 3 integers ai, di, pi (1<=i<=n). The next line consists of a single integer 'q', denoting the number of operations. Each of the next 'q' lines consist of one of the two operations mentioned above.

        Output:

        For each query, output a single line containing 2 space separated integers 'K' and 'V'. 'K' is the least value for which the Kth difference of the required sequence is a constant. 'V' is the value of this constant. Since 'V' might be large, output the value of 'V' modulo 1000003.

        Note: 'K' will always be such that it fits into a signed 64-bit integer. All indices for query and update are 1-based. Do not take modulo 1000003 for 'K'.

        Constraints:
        1<=n<=100000
        1<=ai, di, pi<=10000
        1<=q<=100000
        For updates of the form "1 i j v", 1 <= v <= 10000

        Sample Input:
        2
        1 2 1
        5 3 1
        3
        0 1 2
        1 1 1 1
        0 1 1

        Sample Output:
        2 12
        2 8

        Explanation:

        The first sequence given in the input is => 1, 3, 5, 7, 9,…
        The second sequence given in the input is => 5, 8, 11, 14, 17,…

        For the first query operation, we have to consider the product of these two sequences:
        => 1*5, 3*8, 5*11, 7*14, 9*17,…
        => 5, 24, 55, 98, 153,…
        First difference is => 19, 31, 43, 55,…
        Second difference is => 12, 12, 12,… This is a constant and hence the output is "2 12".

        After the update operation "1 1 1 1", the first sequence becomes => 1^2, 3^2, 5^2, 7^2, 9^2,…
        i.e => 1, 9, 25, 49, 81,…
        For the second query, we consider only the first sequence => 1, 9, 25, 49, 81,…
        First difference is => 8, 16, 24, 32,…
        Second difference is => 8, 8, 8,… This is a constant and hence the output is "2 8"
         */
    }
}

redpajama_set_name: RedPajamaGithub


text:
Q: Error 424 when trying to delete element in array vba I was trying to delete the specific element in the array vba when certain condition are true but i end up getting error 424. May I know the right way to do it? I tired to use redim, however it doesn't suit my condition as after the comparing with others array i need to store the data back into excel file where the location in the excel file is already sorted.
Before changing the remarkRange to array variant, I used it as Dim remarkRange
 As Range where I can just use .Clear to clear the range item in a specific element.
I tried remarkRange(I, 1)=" " it runs without error but im not sure if its suitable.  May I know the correct way to do it? Thanks.
Dim remarkRange() As Variant
remarkRange= wb.Sheets("wb").Range("A1:A5").Value2

For I = LBound(remarkRange) To UBound(remarkRange)
   If (some condition is true) then
       remarkRange(I, 1).Delete
   End If
Next I

I expected the element in the specific cell in the array to be empty, but I got error 424

A: An array doesn't have a Delete method. It's also misleading to have the Range in remarkRange when it's an array, not a Range. Maybe a different name, e.g. remarks or whatever is clear to you.
If you're going to write the array back to the worksheet, then I see no problem changing an element to a blank string.
For i = LBound(remarks, 1) To UBound(remarks, 1)
    If some condition Then
        remarks(i, 1) = ""
    End If
Next i

A: It seems you'll need to decide what you mean by 'delete'. I'm not aware of a Delete property of an array of variants so while your code might compile it would throw an object required error.
However, your point about previously using the Clear method on a Range object, suggests that you just want to read your range values into an array, remove the contents if certain conditions aren't me, and then re-write your array to the range. If that's the case, you probably wouldn't want to resize your array as the rows or columns wouldn't line up - more commonly, you'd set the item of your variant array to Empty.
The code below shows how to do this in a simple routine of taking 10 numbers from column A, removing all odd numbers and re-writing the numbers to Column C - but with the rows still matching:
Public Sub EmptyItemsAndKeepArraySize()
    Dim inArr() As Variant
    Dim i As Long

    'Read range into arrays.
    inArr = Sheet1.Range("A1:A10").Value2

    'Clear all numbers that are not even.
    For i = 1 To UBound(inArr, 1)
        If inArr(i, 1) Mod 2 <> 0 Then inArr(i, 1) = Empty
    Next

    'Write cleared array to column C
    Sheet1.Range("c1").Resize(UBound(inArr, 1)).Value = inArr
End Sub

If, however, you really do want to remove and resize your array, then a simple way of doing it is to populate a temporary collection first, resizing an output array and then populating that with the collection items. In the example below the code removes all odd numbers and then writes the array to column B - but as an array reduced in size (ie contiguous rows):
Public Sub DeleteItemsAndShrinkArray()
    Dim inArr() As Variant, outArr() As Variant
    Dim i As Long
    Dim temp As Collection
    Dim v As Variant

    'Read range into arrays.
    inArr = Sheet1.Range("A1:A10").Value2

    'Keep all even numbers in a temporary collection.
    Set temp = New Collection
    For i = 1 To UBound(inArr, 1)
        If inArr(i, 1) Mod 2 = 0 Then temp.Add inArr(i, 1)
    Next

    'Dimension the output array.
    ReDim outArr(1 To temp.Count, 1 To 1)

    'Populate new array from temp collection.
    i = 1
    For Each v In temp
        outArr(i, 1) = v
        i = i + 1
    Next

    'Write reduced array to column B
    Sheet1.Range("B1").Resize(UBound(outArr, 1)).Value = outArr

End Sub

redpajama_set_name: RedPajamaStackExchange


Our Monthly Auto-Pay is our best package with unlimited classes with the convenience of automatic monthly renewal. Our reduced price for this membership is charged to your credit/debit card on file once a month. This offer comes with a 2 month minimum commitment.
After the initial 2 months, unless a cancellation form is submitted, your credit/debit card will be automatically charged on a monthly basis. To freeze or cancel, you will need to inform us in writing at least 7 days in advance of your next billing date in order for your request to be effective for the following month.
Changing Cards: If for any reason your card has been lost or stolen, please notify the studio immediately. We can easily change the card you are currently using to one that is active in order to avoid any interruption in your membership status.


text:
Pages (113 of 266): First, Prev, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, Next, Last
Category Index / Forum / IYH Forums
WASHINGTON -- The head of the Federal Communications Commission says the Washington Redskins nickname is "offensive and der ( 1 2 3 )
by emmaverxn
The Philadelphia Flyers will try to get by without their No. [url=http://www.laramsfansshop.com/c-46-rams-mark-barron-jersey.asp
ST. [url=http://www.tottenhamhotspureteamshop.com/dele-alli-tottenham-jersey.html]Dele Alli Jersey 16/17[/url] . PETERSBURG, Rus
MIAMI -- Atlanta Braves left-hander Mike Minor is set to pitch in the major leagues for the first time this season. [url=http://
JOHANNESBURG, South Africa -- A bearded and much skinnier Oscar Pistorius was "overcome with emotion" as he pulled on
Billy Payne wore a smile as wide as the Augusta National fairways as he watched eight kids file out of the room with their troph
NASHVILLE, Tenn. [url=http://www.authenticpatriotsfanatic.com/c-68-patriots-reggie-wayne-jersey.aspx]Reggie Wayne Jersey[/url] .
Ed Chamberlin will be joined by Jamie Carragher and Graeme Souness on a special edition of Monday Night Football at 6pm on Sky S
Did Ferrari throw it away - again? How did Valtteri Bottas go from seventh to third? And what went wrong with Jenson Buttons McL
NEW YORK, N. [url=http://www.footballramsstore.us/authentic-kenny-britt-rams-jersey/]Kenny Britt Rams Jersey[/url] .Y. - Jason K
ASHBURN, Va. [url=http://www.thepanthersofficialstore.com/authentic-kelvin-benjamin-panthers-jersey/]Kelvin Benjamin Panthers Je
MILAN, Italy -- Alessandro Matri scored twice on his Fiorentina debut to help his new team win 3-0 at bottom club Catania in Ser
CALGARY - Johnny Gaudreau was still living in a Calgary hotel seven weeks after reporting to Flames training camp. [url=http://w
VANCOUVER - Rory MacDonald says he doesnt feel any added pressure to carry Canadas mixed martial arts torch in Georges St-Pierre
The Winnipeg Jets begin a stretch of 22 games in 44 days to close out the NHL regular season schedule with a 7pm ct face off ton
LILLEHAMMER, Norway - Paal Golberg of Norway won the mens sprint Friday at a World Cup cross-country skiing event. [url=http://w
Sean Fitzpatrick has selected the biggest and hardest hits from round nine of Super Rugby. [url=http://www.brazilsoccerproshop.c
IRVING, Texas - Anthony Spencer quietly worked his way back without knowing when he would return from left knee surgery that thr
LOS ANGELES -- The Arizona Diamondbacks kept within striking distance all game, but when the big hit was needed, they came up sh
FIVE QUICK NBA HOOPS THOUGHTS Happy Holidays to all. [url=http://www.chargersfansofficial.com/keenan-allen-jersey/]http://www.ch
CLEVELAND -- With seven games still left this month, Jason Kipnis has already surpassed his statistics from last April. [url=htt
ST. [url=http://www.cheapnflchinajerseys.us/]Jerseys NFL Wholesale[/url] . LOUIS -- Lance Lynn has been among the best first-hal ( 1 2 3 4 )
null [url=http://www.authenticseahawksstoreonline.com/Black-90-Chris-Clemons-Womens-Jersey/]Chris Clemons Seahawks Jersey[/url]
MAYS LANDING, N. [url=http://www.cheapjerseysandwholesale.us/]Wholesale Jerseys[/url] .J. -- Baltimore Ravens running back Ray R
PALM BEACH GARDENS, Fla. [url=http://www.giantsauthenticshop.com/Youth-Eli-Manning-Giants-Jersey/]Eli Manning Giants Jersey[/url
MIAMI -- Colorado Rockies right-handed pitcher Tyler Chatwood was placed on the 15-day disabled list and Jordan Lyles was recall
The NHL Play of the Year Showdown resumes today with an incredible goal and an incredible save. [url=http://www.nflauthentic.us.
SHAWINIGAN, Que. [url=http://www.laramsfootballshops.com/mark-barron-jersey/]http://www.laramsfootballshops.com/mark-barron-jers
Montreal, QC (SportsNetwork. [url=http://www.seahawksfansprostore.com/Black-Germain-Ifedi-Seahawks-Jersey.html?cat=948]Germain I
SILVIS, Ill. [url=http://www.nfltexansgearsshop.com/Black-J-J-Watt-Texans-Jersey.html?cat=899]J.J. Watt Texans Jersey[/url] . --
7972 threads in this category.
Showing 30 threads per page.
Topic icon
Pinned/Sticky topic
New posts since your last visit
Topic has multiple pages

redpajama_set_name: RedPajamaCommonCrawl


text:
Myrmecophytes
AntWiki - Where Ant Biologists Share Their Knowledge
2 Ant Plants
3 Cecropia
4 Leonardoxa africana
5 Macaranga
6 Triplaris
From The Ants Chapter 14:
The strongest evidence for ant-plant mutualism comes from the existence of domatia, or plant structures that serve no evident purpose other than to shelter ant colonies. Domatia increase the density of ants on the plant itself. It is easy to see how the phenomenon could arise in evolution. Ants are always quick to take advantage of whatever hollows and crevices plants have to offer. In most cases the shelters are not true domatia. They are adventitious, and the ants therefore live as parasites or commensals on the plants. These incidental nest sites can be divided into convenient categories as follows:
• Preformed cavities in live branches and stems, excavated by woodboring beetles and other insects and later occupied by ant colonies belonging to such diverse genera as Daceton, Podomyrma, Crematogaster, Azteca, Lasius, and Camponotus.
• Cavities in stems and branches that are naturally hollow or contain a pith soft enough to be easily excavated by ants. A legion of grasses, sedges, composites, and other herbaceous and shrubby plant forms provide this form of refuge and a great variety of ants occupy them. A typical field of sedges and weeds in Florida, for example, contains dense populations of one or more species of Pseudomyrmex, Colobopsis, Crematogaster, and Monomorium. The low trees and bushes of a Brazilian cerrado contain the same genera along with several species of Zacryptocerus.
• Natural or preformed cavities in bark. The bases of pine trees in the southern United States shelter an entire fauna of Hypoponera, Pheidole, Solenopsis, Crematogaster, Brachymyrmex, and other ant genera that nest adventitiously in the bark. Higher up can be found colonies of the small myrmicines Leptothorax bradleyi and Leptothorax wheeleri, which are specialized to this environment to some extent (Wilson, 1952). An ant restricted entirely to this microsite is Melissotarsus, which occurs in the bark cavities of living trees in tropical Africa and Madagascar. Its body form and locomotory behavior are modified for existence in tight spaces. The workers walk with their middle legs held upright and touching the roofs of the galleries. If placed outside, in the open, they are unable to move around in a normal manner (Delage-Darchen, 1972a).
• Roots of epiphytes. The tangled root systems of orchids, gesneriads, and other tropical epiphytes are ideal nest sites for ants. One of the most profitable ways to collect ants anywhere in the world is to hold an epiphyte over a pan or ground cloth and strike the root system several times with a trowel. In Central and South America, this technique yields large numbers of colonies of Hypoponera, Gnamptogenys, Strumigenys, Nesomyrmex, and other genera, many belonging to rare or previously undescribed species.
• Ants frequently nest in galls formed by cynipid wasp larvae; the phenomenon has been observed in Europe (Torossian, 1972; Espadaler and Nieves, 1983) and North America (Wheeler, 1910a). Leptothorax obturator of Texas appears to be a specialist on this nest site (Longino and Wheeler, 1987).
• A few ant species, such as the large ponerines Ectatomma tuberculatum and Paraponera clavata of the New World tropics, construct earthen or carton nests vertically against the sunken portions of tree trunks. Thus the tree provides a partial wall of solid wood that is virtually invulnerable. Paraponera clavata prefers trees of the abundant legume Pentaclethra macroloba, but the relationship is not obligatory. It is possible that the ants benefit from both the well-formed buttresses of the Pentaclethra and the extrafloral nectaries in the foliage of this species (Bennett and Breed, 1985).
None of these diverse structures appear to be "designed" to accommodate ant colonies. All are ordinary anatomical features of the plants that the ants exploit, apparently in a unilateral manner. In contrast, the domatia listed comprehensively in Table 14-1 do appear uniquely to serve as ant nests. They are characterized by cavities that form independently of the ants (even in greenhouses, where no ants are present), adventitious roots and tubercles that absorb nutrients from waste material carried onto the cavities, and even holes or thin windows of tissue through which ants can more conveniently enter and leave. Some of the most distinctive forms are illustrated in Figures 14-4 through 14-8. Domatia are almost always occupied by ant colonies in nature. Furthermore, plant species with the most complex domatia are typically occupied by only one or a small number of species specialized to live with them. Finally, species with domatia usually also manufacture food bodies, which are unique structures with no known function other than the feeding of ants (see also Table 14-2). In short, strong circumstantial evidence indicates that domatia are structures specialized in evolution to promote symbioses with ants. Benson (1985) has suggested that the ant domatia of many ant species evolved from the sheltered feeding sites used by mealy bugs and other homopterous insects. Because of the honeydew produced by the homopterans, ants were attracted to these sites, which were enlarged and otherwise structurally modified into ant domatia.
Further evidence of coevolution is provided by the legendary ferocity of many of the guest ants. The vast majority of Pseudomyrmex species not occupying domatia are timid and flee even when their nest is broken apart. In sharp contrast, Pseudomyrmex triplarinus, an obligate resident of Triplaris americana, falls upon any intruder touching the nest tree without hesitation or mercy. To be stung by several of these ants within a few seconds is like encountering a nettle--you pull back at once. Or conversely, if you want to locate Triplaris quickly in an Amazonian forest, shake one sapling after another until one produces a swarm of the stinging ants. The Pseudomyrmex also attack and remove intruding insects, and they are significantly more efficient than the Crematogaster that also occupy Triplaris (Oliveira et al., 1987a). The species of Camponotus offer a similar dichotomy. Most retreat or offer limited resistance when the nest is disturbed by a human being. Possibly the shyest ant species in the world is the Amazonian Camponotus paradoxus, whose workers disperse and hide so quickly that it is difficult to catch any specimens at all. At the opposite extreme is Camponotus femoratus, an obligatory resident of epiphytic ant gardens in South America. Diane Davidson (personal communication) describes its behavior as follows:
When I approached to within 1-2 m of their nests, workers of this species typically began to run back and forth and frequently jumped or fell onto me. Workers of all size classes of this polymorphic species attempted to bite, but usually only the major castes were capable of breaking the skin with their mandibles and causing a stinging sensation by simultaneously biting and spraying formic acid into the wound. In addition, these workers often exhibited a second type of apparently aggressive behavior, which I will term "coughing" behavior. With mandibles held wide open and the prothoracic legs upraised, they brought their legs down abruptly in a jerking movement that resembled a cough.
Tetraponera tessmanni, the obligate pseudomyrmecine tenant of the verbenaceous creeper Vitex staudtii in West Africa, was described by Bequaert (1922) as "exceedingly vicious and alert. When its host plant is ever so slightly disturbed, the workers rush out of the hollow stalks in large numbers and actively explore the plant. Their sting is extremely painful and sometimes produces vesicles on the skin." Even more redoubtable is the African pseudomyrmecine Tetraponera aethiops, the obligate tenant of the small flacourtiaceous tree Barteria fistulosa: "As soon as any portion of their host plant is disturbed, they rush out in numbers and hastily explore the trunk, branches, and leaves. Some of the workers usually also run over the ground about the base of the tree and attack any nearby intruder, be it animal or man. All observers agree that the sting of the Tetraponera is exceedingly painful and is felt for several hours. Its effects can best be compared with those produced by female velvet ants." The ant is feared by the natives of the Congo, who try to avoid the unpleasant task of cutting the small Barteria trees scattered through the forest. As a consequence individuals of Barteria fistulosa are often found standing by themselves in the center of clearings or near the sides of forest paths. The species is also abundant in secondary forest growth.
Not all myrmecophyte ants are this formidable. A few, such as the tiny Pheidole species that occupy Maieta and Piper, seem incapable of defeating most herbivores. Many authors have commented on the evident ineptness of these ants in the protection of their adopted plants. However, Letourneau (1983) points out that such ants can perform their service by removing the eggs and early developmental stages of the herbivores rather than face down the adults. She showed that Piper plants in Costa Rica occupied by Pheidole bicornis (now known to involve three species, Pheidole bicornis, Pheidole bicornisculpta, Pheidole passivaeferox (Longino, 2019)), their principal ant guest, suffered less damage than those deprived of the ants. The workers preferred to patrol new leaves, which are the most susceptible to insect damage. When Letourneau placed termite eggs on Piper bushes, the ants discovered more than 75 percent and dropped them off the plants within an hour. Risch et al. (1977) also found some evidence that the Pheidole chew through or push aside alien vines from their host plants, and they postulate that the ants also bring nutrients to the plant cavities as part of their nest material. No one has assayed the relative importance of these benefits to trees.
Competition for the ant plants is intense. Young plants are soon fully occupied by colony-founding queens of plant-ant species. It is common to find different internodes of very young Cecropia saplings occupied by one or more queens of Azteca. Sometimes the inhabitants belong to two species. As many as a dozen colonies are started in this manner in each tree. When the first workers emerge, they cut holes through the septa separating the internodes. Fighting and other forms of competition ensue, and all of the young colonies except one are either destroyed or perhaps even assimilated, so that in the end only one large colony and a single nest queen survive (Dan Perlman, personal communication). The same reductive sequence occurs in Pseudomyrmex ferrugineus, a resident of swollen-thorn acacias (Janzen, 1967), as well as Pseudomyrmex triplarinus, an obligate resident of Triplaris (Schremmer, 1984).
The pervasiveness of competition is indicated by the patchiness of distribution of the ants among plants of the same species. At the Manu National Park, Peru, Davidson et al. (1988b) found eight myrmecophyte species. Among 130 plants dissected, 127 contained ant colonies, and of these 126 belonged to one species only. In many instances the structure of the plant was found to bias which ant species can colonize it. Maieta guianensis, for example, has dense epidermal hairs (trichomes) covering the leaves and stems. Its usual guest ants, the tiny Pheidole minutula, are able to walk through the hairs without difficulty. A second and less common ant, a Crematogaster belonging to the victima group, apparently has to cut trails through the trichomes (Diane Davidson, personal communication). In addition, the narrow tunnel entrances leading into the pouch-like domatia are readily entered by the Pheidole queens during colony founding but not by the Crematogaster queens, which are forced to chew holes into the plant. Allomerus demararae enjoy a similar advantage in the occupancy of the myrmecophyte Cordia nodosa over species of Crematogaster and Azteca, which must cut trails through the trichomes just to move around (Davidson et al., 1988b). Put briefly, certain ant species occupy individual myrmecophytes predominantly and other species intrude occasionally, but only one species is found in each plant. The final result of this competitive pressure is that the myrmecophytes are saturated with ants.
Ant Plants
There are many plants that have co-evolved with ants and now have structures and life histories that are intimately tied with ant partners. One example is the epiphyte Dischidia major where highly modified leaves ('pitchers') provide lodging for various ants, especially Philidris. In return, the plants obtain nutrients from organic debris brought in by the ants, through close contact with branching adventitious roots growing within inhabited pitchers.
Cluster of pitcher leaves of Dischidia major growing on a tree trunk. Note the normal leaves at bottom. From Songkla, Thailand (Photo by Christian Peeters).
Philidris ants build soil runways to connect the entrances of adjacent pitchers of Dischidia major (the central stem can no longer be seen). (Photo by Christian Peeters).
Inhabited pitcher cut away to reveal Philidris workers and brood, as well as roots and inner partitions. (Photo by Christian Peeters).
Philidris build inner partitions by using the internal roots as framework. Ants bring debris from outside as construction material. These roots allow the epiphyte to use ant faeces and food remains as a nitrogen source. (Photo by Christian Peeters).
Ants and Plants
Cecropia
A neotropical genus of fast growing pioneer trees. Ants of the genus Azteca are most commonly found living in and patrolling these plants. Neoponera luteola nests exclusively inside the stems of Cecropia tessmannii trees in Peru, feeding on glycogen-rich Müllerian bodies produced by the plant to guarantee the protection of ants against herbivores.
Leonardoxa africana
A complex of subspecies, this is an African forest understory plant with some forms having extrafloral nectaries and/or domatia. Two ant species Petalomyrmex phylax and Cataulacus mckeyi are known to be associated with these plants.
Macaranga
A southeastern Asian genus of pioneer tree species.
Triplaris
A neotropical plant genus. These dioecious species of trees are most often associated with Pseudomyrmex but other species will also inhabit their hollow stems.
Janzen D.H. 1974. Epiphytic myrmecophytes in Sarawak: mutualism through the feeding of plants by ants. Biotropica 6: 237 – 259.
Hölldobler B. and Wilson E.O. 1990. The Ants. Cambridge, Mass. Harvard University Press.
Kaufmann E. and Maschwitz U. 2006. Ant-gardens of tropical Asian rainforests. Naturwissenschaften 93: 216 – 227.
Peeters, C. & D. Wiwatwitaya 2014. Philidris ants living in Dischidia epiphytes from Thailand. Asian Myrmecology 6: 49-61.
Weir JS and Kiew R. 1986. A reassessment of the relations in Malaysia between ants (Crematogaster) on trees (Leptospermum and Dacrydium) and epiphytes of the genus Dischidia (Asclepiadaceae) including 'ant-plants'. Biological Journal of the Linnean Society 27: 113 – 132.
Interactions with Other Organisms
Ants and Plants • Myrmecophytes • Epiphytes and Ant Gardens • Bromeliads
Seed Harvesting • Honeydew Gatherers • Eliosomes • Extrafloral Nectaries • Leaf-cutting • Beltian Bodies
Domatia • Ant gardens • Twig Nests
Pitcher Plants
Ants as Predators • Predators Specialising on Ants (Myrmecophagy) • Phoresy • Parasites and Parasitoids • Organisms living with Ants (Myrmecophily)Mimicry (Myrmecomorphy)
Social Parasitism
Dulosis • Inquilinism • Temporary Parasitism • Xenobiosis
Fungus Growing • Mushroom Harvesting • List of Fungi-related pages
Entomopathogenic fungi • Laboulbeniales • Microsporidia
Bacteria and Viruses
Ants and Bacteria • Entomoplasma • Spiroplasma • Wolbachia
Retrieved from "http://antwiki.org/wiki/index.php?title=Myrmecophytes&oldid=510814"
About Antwiki
Species Accounts
Life History
Distribution & Diversity
Ant Societies
Morphology & Terminology
Biochemistry, Genetics & Evolution
Human Culture & Ants
People & History
Extinct Ants


Steam Cleaning is one of the newest cleaning methods. It uses hot (up to +160°C) steam under pressure. Cleaned surfaces are ready for use already after 1-2 hours after treatment.
Cleaning process is ecologically- friendly, as chemicals either are not used at all or used in the minimal amount. High temperature and pressure can dissolve major part of dirt. Steam can get into the most remote and hardly accessible parts. All dust bugs and dirt are removed during cleaning. In comparison to chemical cleaning, results are better and more long-lasting. What is more, steam connects dust pieces and therefore lessens allergic reaction. Since main cleaning component is water, this method is harmless to everyone who cannot bare chemicals.
Steam cleans and disinfects different surfaces, which helps to create cleanliness of your home and prevent viruses from spreading.
To create not allergic home.
*VAT is not included into the price!


text:
Montan (;  ) is a municipality with 1,701 inhabitants (as of 31 December 2018) in the South of South Tyrol in northern Italy, about  south of Bolzano. The name Montan comes from the Latin mons ("mountain").

Geography
The municipality of Montan, totalling , extends on the orographically left, i.e. eastern flank of the South Tyrolean Lowlands (Unterland), as the section of the Adige valley between Bolzano and the Salorno chasm is called. The main settlement areas are located on a wide hillside terrace, on which sits the main town of Montan (); somewhat south of it lie the two districts Pinzon () and Glen (). The Castelfeder hill () between Neumarkt and Auer protrudes west of the main town into the Adige valley. Below the hill, the municipality of Montan also occupies a small part of the valley floor up to the Adige river.

To the east of the main town, the terrain rises to the Cislon (), a ridge of the forested mountain range that is part of the Fiemme Valley, which separates Unterland from Fiemme. This vast majority of this ridge is part of the protected Trudner Horn Nature Park and borders on the municipality of Truden. To the North, the Schwarzenbach valley forms the border to Aldein; here, a narrow strip of the municipality encloses parts of Kaltenbrunn (). In the south, another strip of territory crosses the Truden stream valley and – bordering Neumarkt, Salorno, Truden and Capriana in Trentino – occupies the northwestern slopes of the Trudner Horn (), where the small settlement of Gschnon () is located.

Frazioni
The municipality of Montan contains the frazioni (subdivisions, mainly villages and hamlets) Glen (Gleno), Gschnon (Casignano), Kaltenbrunn (Fontanefredde), Kalditsch (Doladizza), and Pinzon (Pinzano).

Coat-of-arms
The emblem represents an argent lion, with fixed eyes and claws of or, on azure. It is the arms of the Lords of Enn who built the Castle in the twelfth century. The emblem was granted in 1967.

History
Finds from the pre-Christian area show that early settlements in the Montan area date back to that period. Results from linguistics research in the field of place and field names support this assumption. Local names of pre-Roman (Gomaroa, Tschalfai) and Romanesque (Kalditsch, Montan, Glen, Pinzon) origin suggest a lively settlement activity in the centuries BC and AD.
Around 955, Bavarian settlers began colonising the area. This colonisation culminated in the 12th century and ended in the mid-13th century. In 1133, the possession of the Weyarn monastery was registered at Enn court, as was the Sonnenburg monastery in Kalditsch in 1181. The lords of Enn appeared in Montan in the mid-12th century.

In 1435, Pastor Hans Hach of Montan ("her Hans Hach pharrer zu Montæny") was a member of the South Tyrolean priesthood, which pledged to hold the Austrian anniversary in Holy Mary parish church in Bozen.
Until the end of the First World War, Montan belonged to the county of Tyrol and thus to the Austro-Hungarian empire. Within Tyrol, Montan was assigned to the Neumarkt judicial district, which in turn was part of the Bozen district. With the Treaty of Saint-Germain, Montan, along with most of Tyrol south of the main ridge of the Alps, was ceded to Italy in 1920.  When these former Austrian territories became the two provinces of Bozen and Trento in 1927, Montan and other surrounding villages were assigned to the predominantly Italian-speaking province of Trento. In 1948 that Montan became again part of the Province of Bolzano/South Tyrol.

Linguistic distribution
According to the 2011 census, 92.54% of the population speak German, 6.94% Italian and 0.52% Ladin as first language.

Education
There is a German-language primary school in Montan, which is part of the school district of the neighbouring municipality of Auer.

Main sights
 Castelfeder is a prehistoric and Roman settlement on a strategically important porphyry hill near Montan (South Tyrol) above Auer and represents a multi-sectioned, spacious dome. The upper "fortress" rises around  above the valley floor and is located at  above sea level.
 Enn castle
 Hans-Klocker altar, a winged altar by master Hans Klocker from Brixen in the St. Stefan church in Pinzon
 The cemetery holds the tomb of the Italian nationalist Ettore Tolomei.
 The former Fleimstal railway track is a destination for hikers in Montan. This railway line was built during the First World War. The route begins in Auer and originally led to Predazzo. A cycling and hiking trail now follows the well-preserved section between Auer and San Lugano.

Twin cities
  Nuremberg, Germany

References

External links

 Official website
 Homepage of Montan

Municipalities of South Tyrol

redpajama_set_name: RedPajamaWikipedia


Money raised during this event goes back into the community. We have contributed to Rotary House, Pathstone Mental Health, School Breakfast Program, GNGH Foundation, Boys and Girls Club of Niagara, Habitat for Humanity and Literacy Niagara to name but a few.
"Awesome sauce! I would buy out the supply. LOL" – Michael S.
"It made them even tastier when I discovered where they came from. Fort Erie rocks the rib scene!" – Haidee W.
If you are interested in becoming a vendor at Ribfest, please complete the following Vendor Application form.
Please complete all questions and submit your form.
We would like to thank the following sponsors for their continued support for and making the Niagara Falls Ribfest a success.
To be a Niagara Falls Ribfest Sponsor, please contact info@niagarafallsribfest.com.
Easy and Convenient Location with plenty of parking.
Please do not bring your pets to Ribfest due to health regulations.


text:
Q: How can I use \psgraph with polar axes? With pspicture
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\psset{axesstyle=polar,plotpoints=100}
\begin{document}
\begin{pspicture}(-4,-4)(4,4)
    \psaxes[axesstyle=polar,linecolor=gray](3,360)
    \psplot[algebraic,polarplot,linecolor=red]{0}{TwoPi}{sin(3*x)+2}
\end{pspicture}
\end{document}

With psgraph
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\psset{axesstyle=polar,plotpoints=100}
\begin{document}
\begin{psgraph}[linecolor=gray](3,360){4cm}{4cm}
    \psplot[algebraic,polarplot,linecolor=red]{0}{TwoPi}{sin(3*x)+2}
\end{psgraph}
\end{document}

How can I use psgraph with polar axes?

A: Just for fun with PGFPlots:

\documentclass[border=5mm]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{compat=1.10}

\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[enlargelimits=false, xticklabel=$\pgfmathprintnumber{\tick}^\circ$]
\addplot [thick, red, domain=0:360, samples=100] {sin(3*x)+2};
\end{polaraxis}
\end{tikzpicture}
\end{document}

If you want to specify the function and domain in terms of radians, set data cs=polarrad. this can be useful if you want to plot a data file that uses radians, for instance.
If you want to plot a function with data cs=polarrad, note that the math parser will still expect the input to trigonometric functions to be in degrees, so you'll have to use sin(deg(...)) instead of sin(...), for example.

A: It makes no sense to use \psgraph here: it is a simple scaling of the graph.
\documentclass{article}
\usepackage{pst-plot}
\begin{document}

\frame{\psscaleboxto(4cm,4cm){%
\psset{axesstyle=polar,plotpoints=100,plotstyle=curve}
\begin{pspicture}(-4,-4)(4,4)
    \psaxes[axesstyle=polar,linecolor=gray](3,360)
    \psplot[algebraic,polarplot,linewidth=1.5pt,linecolor=red]{0}{TwoPi}{sin(3*x)+2}
\end{pspicture}}}
\frame{\psscaleboxto(4cm,4cm){%
\psset{axesstyle=polar,plotpoints=100,plotstyle=curve}
\begin{pspicture}(-0.2,-0.5)(4,4)
    \psaxes[axesstyle=polar,linecolor=gray](3,90)
    \psplot[algebraic,polarplot,linewidth=1.5pt,linecolor=blue]{0}{Pi2}{sin(3*x)+2}
\end{pspicture}}}

\rule{4cm}{1pt}

\end{document}

And just for fun:
\documentclass{article}
\usepackage{pst-plot}
\begin{document}

\psset{axesstyle=polar,plotpoints=10000,plotstyle=curve}
\begin{pspicture}(-4,-4)(4,4)
    \psaxes[axesstyle=polar,linecolor=gray](3,360)
    \psplot[algebraic,polarplot,linewidth=1.5pt,fillstyle=eofill,fillcolor=blue!60,
      opacity=0.5,linecolor=red]{0}{20 Pi mul}{sin(3*x)+2*cos(x/2)}
\end{pspicture}

\end{document}

A:
With psgraph, we can specify the size of graph in advance and the
  vertical and horizontal units are automatically adjusted.

The same thing troubled me when I first started using pstricks  - we can specify xunit and yunit using psset, but we simply have to live with whatever the width and height of the figure turn out to be. As far as I could tell, there was no way to specify the width and/or height and then calculate xunit and yunit.
Of course, a little bit of mathematics can be invoked and, given a width and values of xmin and xmax, we can calculate xunit; similarly for a height, with given values of ymin and ymax we can compute yunit.
The code below defines a setwindow command that is invoked in the following way:
\setwindow[optional height ratio]{xmin}{xmax}{ymin}{ymax}{\figurewidth}

For example, it can be used as
\setlength{\figurewidth}{.5\textwidth}
\setwindow{0}{-.5}{3}{3}{\figurewidth}

which will set the pspicture environment to have width and height of half of the text width, with xmin=0, ymin=-.5, xmax=3, and ymax=3.
The optional argument can be used to scale the height with respect to the width. For example, using
\setwindow[.5]{0}{-.5}{3}{3}{\figurewidth}

will set the height of the pspicture to be half of the width. Using
\setwindow[.25]{0}{-.5}{3}{3}{\figurewidth}

will set the height to be a quarter of the width.
Here's a complete example to play with - I hope it's useful!
% arara: latex
% arara: dvips
% arara: ps2pdf
% !arara: indent: {overwrite: yes}
\documentclass{article}
\usepackage{pst-plot}
\usepackage[showframe=true]{geometry}

\newlength{\figurewidth}
% setwindow command: takes 6 arguments (1st is optional)
%       [1]. aspect ratio (height = aspect ratio * width) default=1
%         2. xmin (number)
%         3. ymin (number)
%         4. xmax (number)
%         5. ymax (number)
%         6. figurewidth (length)
\makeatletter
\newcommand{\setwindow}[6][1]{\def\xmin{#2}%
    \def\ymin{#3}%
    \def\xmax{#4}%
    \def\ymax{#5}%
    % set up xunit
    \pstFPsub\viewingwidth{#4}{#2}%
    \pstFPdiv\result{\strip@pt#6}{\viewingwidth}%
    \psset{xunit=\result pt}
    % set up yunit
    \pstFPsub\viewingheight{#5}{#3}%
    \pstFPdiv\result{\strip@pt#6}{\viewingheight}%
    % set up aspect ratio
    \pstFPmul\result{\result}{#1}%
    \psset{yunit=\result pt}%
}

\begin{document}

\setlength{\figurewidth}{.5\textwidth}
\psset{axesstyle=polar,plotpoints=100,plotstyle=curve}
\setwindow[.5]{0}{-.5}{3}{3}{\figurewidth}
\noindent\begin{pspicture}(\xmin,\ymin)(\xmax,\ymax)
\psgrid
\psaxes[axesstyle=polar,linecolor=gray](3,90)
\psplot[algebraic,polarplot,linewidth=1.5pt,linecolor=blue]{0}{Pi2}{sin(3*x)+2}
\end{pspicture}

\end{document}

PS: the arara directives are included for your convenience :)


text:
A Case of Joni: Mitchell Curates New Love-Themed, Career-Spanning Box Set
October 15, 2014 By Joe Marchese Leave a Comment
In 2007, Joni Mitchell released her last studio album to date, Shine. That release was her first recording since 2002's Travelogue and first collection of new songs since 1998's Taming the Tiger. Over the past seven years, the influential singer-songwriter has mainly made headlines for her candid and revealing interviews, on which she's held forth about such topics as Bob Dylan's alleged plagiarism and her own struggles with Morgellons disease. So it's refreshing that Mitchell is back in the spotlight for her music, thanks to a new box set to arrive just in time for the holiday gift-giving season. On November 17, Rhino will release a new four-disc collection entitled Love Has Many Faces: A Quartet, A Ballet, Waiting to Be Danced.
In the tradition of past compilations curated by Mitchell including The Beginning of Survival, Dreamland and Songs of a Prairie Girl, Love Has Many Faces promises to be a thematic exploration of the artist's poetic, soulful and jazz-inflected music created over the decades. The set includes 53 newly-remastered songs selected from her catalogue which began with 1968's David Crosby-produced album Song to a Seagull and has encompassed such acknowledged classics as Ladies of the Canyon (1970), Blue (1971), Court and Spark (1974) and Both Sides Now (2000). It's promised that the remastered songs on Love will be "familiar but fresh," with "a lot of sonic adjustment." In a press release, Mitchell elaborated, "I am a painter who writes songs. My songs are very visual. The words create scenes …What I have done here is to gather some of these scenes (like a documentary filmmaker) and by juxtaposition, edit them into a whole new work."
As the title indicates, the box set was initially conceived for the ballet stage. "I wanted the music to feel like a total work – a new work," Mitchell writes in the liner notes. "No matter what I did, though, at that [ballet performance] length, it remained merely a collection of songs." So the artist rearranged 53 songs into "thematic acts" like that of a ballet. Comparing her to that of a film editor, she offers, "I had 40 years of footage to review. Then, suddenly, scenes began to hook up. Then series began to form." She elucidates, "Instead of it being an emotional roller coaster ride as it was before — crammed into one disc — themes began to develop. Moods sustained. I was getting there…When this long editorial process finally came to rest, I had four ballets or a four-act ballet — a quartet. I also had a box set."
Hit the jump for more details including the complete track listing and pre-order links!
Among the diverse songs chosen by Mitchell are classics including "River," "A Case of You," "In France They Kiss on Main Street," "All I Want," "Carey," and "Raised on Robbery" as well as the title songs of Blue, Court and Spark, Hejira, Don Juan's Reckless Daughter and The Night Ride Home. Numerous favorites, of course, aren't here, such as "Help Me" or "Free Man in Paris." The discs are housed within a deluxe, hardcover book including 53 "lyrical poems" to coincide with the songs, six brand new Mitchell paintings, and the artist's liner notes.
Joni Mitchell's Love Has Many Faces: A Quartet, A Ballet, Waiting to Be Danced arrives from Rhino on November 17 and can be pre-ordered at the links below!
Joni Mitchell, Love Has Many Faces: A Quartet, A Ballet, Waiting to Be Danced (Rhino, 2014) (Amazon U.S. / Amazon U.K.)
In France They Kiss On Main street
Ray's Dad's Cadillac
You Turn Me On I'm A Radio
Harlem In Havana
Car On a Hill
Dancin' Clown
Chinese Cafe/Unchained Melody
Harry's House/Centerpiece
Shades of Scarlett Conquering
The Windfall (Everything For Nothing)
Come In From the Cold
Court and Spark
Trouble Child
Not to Blame
Comes Love
Moon at the Window
The Wolf That Lives In Lindsey
Hejira
Night Ride Home
You're My Thrill
The Crazy Cries of Love
Love Puts On a New Face
A Strange Boy
You Dream Flat Tires
Yvette In English
Just Like This Train
The Only Joy In Town
Don Juan's Reckless Daughter
Two Grey Rooms
God Must Be a Boogie Man
Down To You
The Last Time I Saw Richard
Raised on Robbery
Sweet Sucker Dance
My Best To You
NOTE: Joni Mitchell re-recorded "Both Sides Now" and "A Case of You" for her 2000 album of the same name and a number of her other songs on 2002's Travelogue. The information below pertains only to the original versions of the songs, as we do not yet have confirmation as to which versions she has included on the forthcoming box set.
CD 1, Tracks 1, 9-10 from The Hissing of Summer Lawns, Asylum, 1975
CD 1, Tracks 2, 12-13, CD 2, Tracks 5, 14 & CD 3, Track 13 from Night Ride Home, Geffen, 1991
CD 1, Track 3 from For the Roses, Asylum, 1972
CD 1, Track 4, CD 2, Tracks 2, 13, CD 3, Tracks 2-3 & CD 4, Track 13 from Taming the Tiger, Reprise, 1998
CD 1, Track 5, CD 2, Tracks 1, 3, CD 3, Track 11 & CD 4, Tracks 4, 7 from Court and Spark, Asylum, 1974
CD 1, Tracks 6, 11 & CD 4, Tracks 9-10 from Chalk Mark in a Rain Storm, Geffen, 1988
CD 1, Track 7, CD 2, Track 8, CD 3, Tracks 8, 12, & CD 4, Tracks 5-6 from Blue, Reprise, 1971
CD 1, Track 8 from Travelogue, Nonesuch, 2002
CD 1, Track 9 from The Hissing of Summer Lawns, Asylum, 1975
CD 2, Track 4, CD 3, Tracks 4, 10 from Turbulent Indigo, Reprise, 1994
CD 2, Track 6, CD 3, Track 1 from Both Sides Now, Reprise, 2000
CD 2, Track 7, CD 3, Tracks 6-7, 9 & CD 4, Track 2 from Wild Things Run Fast, Geffen, 1982
CD 2, Track 9 from Dog Eat Dog, Geffen, 1985
CD 2, Track 10, CD 4, Tracks 3 & 8 from Mingus, Asylum, 1979
CD 2, Track 11 from Shine, Hear Music, 2007
CD 2, Track 12, CD 3, Track 5 & CD 4, Track 11 from Hejira, Asylum, 1976
CD 4, Track 1 from Don Juan's Reckless Daughter, Asylum, 1977
CD 4, Track 12 from Clouds, Reprise, 1969
Categories: News Formats: Box Sets, CD Genre: Classic Rock, Folk, Pop Tags: Joni Mitchell
Joe Marchese
JOE MARCHESE (Editor) joined The Second Disc shortly after its launch in early 2010, and has since penned daily news and reviews about classic music of all genres. In 2015, Joe formed the Second Disc Records label. Celebrating the great songwriters, producers and artists who created the sound of American popular song, Second Disc Records, in conjunction with Real Gone Music, has released newly-curated collections produced by Joe from iconic artists such as Johnny Mathis, Bobby Darin, Laura Nyro, Melissa Manchester, Chet Atkins, and many others. He has contributed liner notes to reissues from a diverse array of artists, among them Nat "King" Cole, Paul Williams, Lesley Gore, Dusty Springfield, B.J. Thomas, The 5th Dimension, Burt Bacharach, The Mamas and the Papas, Carpenters, Perry Como, Rod McKuen, Doris Day, Jackie DeShannon, and Andy Williams, and has compiled releases for talents including Robert Goulet and Keith Allison of Paul Revere and the Raiders. Over the past two decades, Joe has also worked in a variety of capacities on and off Broadway as well as at some of the premier theatres in the U.S., including Lincoln Center Theater, George Street Playhouse, Paper Mill Playhouse, Long Wharf Theatre, and the York Theatre Company. He has felt privileged to work on productions alongside artists such as the late Jack Klugman, Eli Wallach, Arthur Laurents, Betty Comden and Adolph Green. In 2009, Joe began contributing theatre and music reviews to the print publication The Sondheim Review, and in 2012, he joined the staff of The Digital Bits as a regular contributor writing about film and television on DVD and Blu-ray. Joe currently resides in the suburbs of New York City.
Connect With Joe: FacebookTwitter
Back To This Heavenly Bliss: Joni Mitchell's "Shine" Arriving on Vinyl from Craft Recordings
Year-End Review: Bob Dylan, "The Rolling Thunder Revue: The 1975 Live Recordings"
The Second Disc's Picks for Record Store Day Black Friday 2019
Let the Wind Carry Me: Joni Mitchell's Stunning Volume of Handwritten Lyrics and Drawings Reviewed
William Keats says
I'm scratching my head at this point, what with the constant recycling of her back catalog in various themed packages. I'm sure her new paintings are worth seeing, but not sure this is the best method to display them, bundled with 4 discs of old tracks that were never intended to sit side-by-side. How about a live archival series, given that many of Joni's performances were recorded professionally for television and radio? Her live sets often featured unusual re-arrangements of her songs, which I'd prefer to hear over another shuffling of her studio tracks.
John H says
Yeah, this is pretty disappointing, since most Mitchell fans will have nearly all of this stuff, or at least a decent chunk of it, and she's not the sort of artist that has a lot of casual fans who'd pay for a 4CD boxed set. Not to mention, there *must* be a lot of unreleased goodies in the vault.
Morgellons, by the way, is almost universally understood to be a delusion (in the medical sense) and not really any sort of physical malady at all, except in the sense that it affects the mind. I know Mitchell's had some tough moments, and hope she's getting the real help she needs.
baward says
3rd-ed for disappointing. She says "What I have done here is to gather some of these scenes and by juxtaposition, edit them into a whole new work." Isn't that like an artist saying, "Well, I've rearranged the previously-seen paintings that were displayed the four or more times I've displayed them before, and created a whole new exhibition." Yes, well, kinda…
Robert Lett says
I'm pretty stoked about this actually. Definitely in.
shashibiya says
As a life-long fan who keeps her entire ouvre on whatever device I'm currently listening to, I have no need to buy this for myself, but it'll make a great Christmas gift. Compiling a playlist of her personal choices in the order she's selected makes for a most interesting – one might even say relevatory – musical
experience. Topping them off with seventeen more I couldn't live without, for a total of seventy, and I've got the perfectly portable essential Joni, who, if it needs to be said again, is without peer.
(Correction, "revelatory.")
If you read the remarks about the basis of the set – a suite designed for a ballet, which Joni decided to share with the public that might be interested in having it – I don't think the complaints are called for at all. It was not intended as a new set of rarities or outtakes. I suppose she could just as well have not shared her ballet concept at all, then no one could have it. Buy it or don't buy it.
Gerry Hassan says
I am a huge Joni Mitchell fan and IMHO the above comments – even the critical ones – are letting Joni and her record company off lightly.
This is the year 2014 and until now there has been no Joni box set. And now with this news we have the mssed opportunity of a totally pointless box set. Yes no one has to buy it; but what a total and utter waste of everyone's time. Where are the live tracks, unreleased studio tracks, alternate versions and demos?
The ballet logic is a complete misnomner for this collection.That could have formed the basis of this collection – with an extra CD of rarities added on. One of the most pointless, disappointing releases of recent years; and so sad when a Joni box set could be such an interesting listen and fascinating item.
Is it too late to hope that Joni and the record company at the last minute add an extra disc?
I have been a fan of Joni Mitchell for many years. I have a friend, in fact we've been friends for 55 years, whom I didn't even know was a Joni fan until Travelogue came out. He thought it was so great but it didn't do much for me. Recently he sent me the Amazon link to this new collection and he thought I would be very excited. However, all I could think was 'here she goes again, time to make some money, rehash the old stuff, throw some new artwork on it and watch the suckers lap it up.' Sorry to sound so harsh, but enough is enough, Joni!


I heard that a study group of Mastodon study group is being held now.
I'm hooked on recently to playing a smartphone game "Another Eden". This story is so fun.
I've just arrived at Google Japan!
G'morning! The sky is cloudy today.
So, while I was sleeping, the admin of mstdn.jp accepted a job offer from Niconico's parent company Dwango. He says there are no plans to merge mstdn.jp with friends.nico; but it does mean that both the two largest instances (which now are significantly larger than any others, no longer roughly the same as #3 and #4) are connected with Japanese media companies.
Also, mstdn.jp's total number of posted items is set to outstrip .social's soon, despite being a very much younger instance.
What is your surprising aspect?
I don't know my surprising aspect. I like … I like Ireland too much.
Mstdn.js admin is japanese graduated student. A week passed since build instance.


text:
Hipertricose auricular é uma condição que se caracteriza pelo aparecimento de pêlos longos e abundantes no bordo das orelhas.

Genética
O gene responsável pelo distúrbio está localizado no cromossoma Y e, devido a isso, a condição só se manifesta em indivíduos do sexo masculino.

Doenças congénitas
Dermatologia


text:
require 'rails_helper'

describe Admin::CollectionsController, type: :controller do
  render_views

  describe 'security' do
    let(:collection) { FactoryBot.create(:collection) }

    describe 'ingest api' do
      it "all routes should return 401 when no token is present" do
        expect(get :index, params: { format: 'json' }).to have_http_status(401)
        expect(get :show, params: { id: collection.id, format: 'json' }).to have_http_status(401)
        expect(get :items, params: { id: collection.id, format: 'json' }).to have_http_status(401)
        expect(post :create, params: { format: 'json' }).to have_http_status(401)
        expect(put :update, params: { id: collection.id, format: 'json' }).to have_http_status(401)
      end
      it "all routes should return 403 when a bad token in present" do
        request.headers['Avalon-Api-Key'] = 'badtoken'
        expect(get :index, params: { format: 'json' }).to have_http_status(403)
        expect(get :show, params: { id: collection.id, format: 'json' }).to have_http_status(403)
        expect(get :items, params: { id: collection.id, format: 'json' }).to have_http_status(403)
        expect(post :create, params: { format: 'json' }).to have_http_status(403)
        expect(put :update, params: { id: collection.id, format: 'json' }).to have_http_status(403)
      end
    end
    describe 'normal auth' do
      context 'with end-user' do
        before do
          login_as :user
        end
        # New is isolated here due to issues caused by the controller instance not being regenerated
        it "should redirect to restricted content page" do
          expect(get :new).to render_template('errors/restricted_pid')
        end
        it "all routes should redirect to restricted content page" do
          expect(get :index).to render_template('errors/restricted_pid')
          expect(get :show, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(get :edit, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(get :remove, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(post :create).to render_template('errors/restricted_pid')
          expect(put :update, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(patch :update, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(delete :destroy, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(post :attach_poster, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(delete :remove_poster, params: { id: collection.id }).to render_template('errors/restricted_pid')
          expect(get :poster, params: { id: collection.id }).to render_template('errors/restricted_pid')
        end
      end
    end
  end

  describe "#manage" do
    let!(:collection) { FactoryBot.create(:collection) }
    before(:each) do
      request.env["HTTP_REFERER"] = '/'
      login_as(:administrator)
    end

    it "should add users to manager role" do
      manager = FactoryBot.create(:manager)
      put 'update', params: { id: collection.id, submit_add_manager: 'Add', add_manager: manager.user_key }
      collection.reload
      expect(manager).to be_in(collection.managers)
    end

    it "should not add users to manager role" do
      user = FactoryBot.create(:user)
      put 'update', params: { id: collection.id, submit_add_manager: 'Add', add_manager: user.user_key }
      collection.reload
      expect(user).not_to be_in(collection.managers)
      expect(flash[:error]).not_to be_empty
    end

    it "should remove users from manager role" do
      #initial_manager = FactoryBot.create(:manager).user_key
      collection.managers += [FactoryBot.create(:manager).user_key, FactoryBot.create(:manager).user_key]
      collection.save!
      manager = User.where(Devise.authentication_keys.first => collection.managers.first).first
      put 'update', params: { id: collection.id, remove_manager: manager.user_key }
      collection.reload
      expect(manager).not_to be_in(collection.managers)
    end

    context 'with zero-width characters' do
      let(:manager) { FactoryBot.create(:manager) }
      let(:manager_key) { "#{manager.user_key}\u200B" }

      it "should add users to manager role" do
        put 'update', params: { id: collection.id, submit_add_manager: 'Add', add_manager: manager_key }
        collection.reload
        expect(manager).to be_in(collection.managers)
      end
    end
  end

  describe "#edit" do
    let!(:collection) { FactoryBot.create(:collection) }
    before(:each) do
      request.env["HTTP_REFERER"] = '/'
    end

    it "should add users to editor role" do
      login_as(:administrator)
      editor = FactoryBot.build(:user)
      put 'update', params: { id: collection.id, submit_add_editor: 'Add', add_editor: editor.user_key }
      collection.reload
      expect(editor).to be_in(collection.editors)
    end

    it "should remove users from editor role" do
      login_as(:administrator)
      editor = User.where(Devise.authentication_keys.first => collection.editors.first).first
      put 'update', params: { id: collection.id, remove_editor: editor.user_key }
      collection.reload
      expect(editor).not_to be_in(collection.editors)
    end
  end

  describe "#deposit" do
    let!(:collection) { FactoryBot.create(:collection) }
    before(:each) do
      request.env["HTTP_REFERER"] = '/'
    end

    it "should add users to depositor role" do
      login_as(:administrator)
      depositor = FactoryBot.build(:user)
      put 'update', params: { id: collection.id, submit_add_depositor: 'Add', add_depositor: depositor.user_key }
      collection.reload
      expect(depositor).to be_in(collection.depositors)
    end

    it "should remove users from depositor role" do
      login_as(:administrator)
      depositor = User.where(Devise.authentication_keys.first => collection.depositors.first).first
      put 'update', params: { id: collection.id, remove_depositor: depositor.user_key }
      collection.reload
      expect(depositor).not_to be_in(collection.depositors)
    end
  end

  describe "#index" do
    let!(:collection) { FactoryBot.create(:collection) }
    subject(:json) { JSON.parse(response.body) }

    let(:administrator) { FactoryBot.create(:administrator) }

    before(:each) do
      ApiToken.create token: 'secret_token', username: administrator.username, email: administrator.email
      request.headers['Avalon-Api-Key'] = 'secret_token'
    end
    it "should return list of collections" do
      get 'index', params: { format:'json' }
      expect(json.count).to eq(1)
      expect(json.first['id']).to eq(collection.id)
      expect(json.first['name']).to eq(collection.name)
      expect(json.first['unit']).to eq(collection.unit)
      expect(json.first['description']).to eq(collection.description)
      expect(json.first['object_count']['total']).to eq(collection.media_objects.count)
      expect(json.first['object_count']['published']).to eq(collection.media_objects.reject{|mo| !mo.published?}.count)
      expect(json.first['object_count']['unpublished']).to eq(collection.media_objects.reject{|mo| mo.published?}.count)
      expect(json.first['roles']['managers']).to eq(collection.managers)
      expect(json.first['roles']['editors']).to eq(collection.editors)
      expect(json.first['roles']['depositors']).to eq(collection.depositors)
    end
    it "should return list of collections for good user" do
      get 'index', params: { user: collection.managers.first, format:'json' }
      expect(json.count).to eq(1)
    end
    it "should return no collections for bad user" do
      get 'index', params: { user: 'foobar', format:'json' }
      expect(json.count).to eq(0)
    end
  end

  describe 'pagination' do
    subject(:json) { JSON.parse(response.body) }
    let(:administrator) { FactoryBot.create(:administrator) }

    before(:each) do
      ApiToken.create token: 'secret_token', username: administrator.username, email: administrator.email
      request.headers['Avalon-Api-Key'] = 'secret_token'
    end
    it 'should paginate index' do
      5.times { FactoryBot.create(:collection) }
      get 'index', params: { format:'json', per_page: '2' }
      expect(json.count).to eq(2)
      expect(response.headers['Per-Page']).to eq('2')
      expect(response.headers['Total']).to eq('5')
    end
    it 'should paginate collection/items' do
      collection = FactoryBot.create(:collection, items: 5)
      get 'items', params: { id: collection.id, format: 'json', per_page: '2' }
      expect(json.count).to eq(2)
      expect(response.headers['Per-Page']).to eq('2')
      expect(response.headers['Total']).to eq('5')
    end
  end

  describe "#show" do
    let!(:collection) { FactoryBot.create(:collection) }

    it "should allow access to managers" do
      login_user(collection.managers.first)
      get 'show', params: { id: collection.id }
      expect(response).to be_ok
    end

    context "with json format" do
      subject(:json) { JSON.parse(response.body) }

      it "should return json for specific collection" do
        ApiToken.create token: 'secret_token', username: 'archivist1@example.com', email: 'archivist1@example.com'
        request.headers['Avalon-Api-Key'] = 'secret_token'
        get 'show', params: { id: collection.id, format:'json' }
        expect(json['id']).to eq(collection.id)
        expect(json['name']).to eq(collection.name)
        expect(json['unit']).to eq(collection.unit)
        expect(json['description']).to eq(collection.description)
        expect(json['object_count']['total']).to eq(collection.media_objects.count)
        expect(json['object_count']['published']).to eq(collection.media_objects.reject{|mo| !mo.published?}.count)
        expect(json['object_count']['unpublished']).to eq(collection.media_objects.reject{|mo| mo.published?}.count)
        expect(json['roles']['managers']).to eq(collection.managers)
        expect(json['roles']['editors']).to eq(collection.editors)
        expect(json['roles']['depositors']).to eq(collection.depositors)
      end

      it "should return 404 if requested collection not present" do
        ApiToken.create token: 'secret_token', username: 'archivist1@example.com', email: 'archivist1@example.com'
        request.headers['Avalon-Api-Key'] = 'secret_token'
        get 'show', params: { id: 'doesnt_exist', format: 'json' }
        expect(response.status).to eq(404)
        expect(JSON.parse(response.body)["errors"].class).to eq Array
        expect(JSON.parse(response.body)["errors"].first.class).to eq String
      end
    end
  end

  describe "#items" do
    let!(:collection) { FactoryBot.create(:collection, items: 2) }
    let(:administrator) { FactoryBot.create(:administrator) }

    before(:each) do
      ApiToken.create token: 'secret_token', username: administrator.username, email: administrator.email
      request.headers['Avalon-Api-Key'] = 'secret_token'
    end
    it "should return json for specific collection's media objects" do
      get 'items', params: { id: collection.id, format: 'json' }
      expect(JSON.parse(response.body)).to include(collection.media_objects[0].id,collection.media_objects[1].id)
      #TODO add check that mediaobject is serialized to json properly
    end

  end

  describe "#create" do
    let!(:collection) { FactoryBot.build(:collection) }
    let(:administrator) { FactoryBot.create(:administrator) }

    before(:each) do
      ApiToken.create token: 'secret_token', username: administrator.username, email: administrator.email
      request.headers['Avalon-Api-Key'] = 'secret_token'
    end

    it "should notify administrators" do
      login_as(:administrator) #otherwise, there are no administrators to mail
      # mock_email = double('email')
      # allow(mock_email).to receive(:deliver_later)
      # expect(NotificationsMailer).to receive(:new_collection).and_return(mock_email)
      # FIXME: This delivers two instead of one for some reason
      expect {post 'create', params: { format:'json', admin_collection: {name: collection.name, description: collection.description, unit: collection.unit, managers: collection.managers} }}.to have_enqueued_job(ActionMailer::DeliveryJob).twice
      # post 'create', format:'json', admin_collection: {name: collection.name, description: collection.description, unit: collection.unit, managers: collection.managers}
    end
    it "should create a new collection" do
      post 'create', params: { format:'json', admin_collection: {name: collection.name, description: collection.description, unit: collection.unit, contact_email: collection.contact_email, website_label: collection.website_label, website_url: collection.website_url, managers: collection.managers} }
      expect(JSON.parse(response.body)['id'].class).to eq String
      expect(JSON.parse(response.body)).not_to include('errors')
      new_collection = Admin::Collection.find(JSON.parse(response.body)['id'])
      expect(new_collection.contact_email).to eq collection.contact_email
      expect(new_collection.website_label).to eq collection.website_label
      expect(new_collection.website_url).to eq collection.website_url
    end
    it "should create a new collection with default manager list containing current API user" do
      post 'create', params: { format:'json', admin_collection: { name: collection.name, description: collection.description, unit: collection.unit } }
      expect(JSON.parse(response.body)['id'].class).to eq String
      collection = Admin::Collection.find(JSON.parse(response.body)['id'])
      expect(collection.managers).to eq([administrator.username])
    end
    it "should return 422 if collection creation failed" do
      post 'create', params: { format:'json', admin_collection: { name: collection.name, description: collection.description } }
      expect(response.status).to eq(422)
      expect(JSON.parse(response.body)).to include('errors')
      expect(JSON.parse(response.body)["errors"].class).to eq Array
      expect(JSON.parse(response.body)["errors"].first.class).to eq String
    end

  end

  describe "#update" do
    it "should notify administrators if name changed" do
      login_as(:administrator) #otherwise, there are no administrators to mail
      # mock_delay = double('mock_delay').as_null_object
      # allow(NotificationsMailer).to receive(:deliver_later).and_return(mock_delay)
      # expect(mock_delay).to receive(:update_collection)
      @collection = FactoryBot.create(:collection)
      # put 'update', id: @collection.id, admin_collection: {name: "#{@collection.name}-new", description: @collection.description, unit: @collection.unit}
      expect {put 'update', params: { id: @collection.id, admin_collection: {name: "#{@collection.name}-new", description: @collection.description, unit: @collection.unit} }}.to have_enqueued_job(ActionMailer::DeliveryJob).once
    end

    context "update REST API" do
      let!(:collection) { FactoryBot.create(:collection)}
      let(:contact_email) { Faker::Internet.email }
      let(:website_label) { Faker::Lorem.words.join(' ') }
      let(:website_url) { Faker::Internet.url }

      before do
        ApiToken.create token: 'secret_token', username: 'archivist1@example.com', email: 'archivist1@example.com'
        request.headers['Avalon-Api-Key'] = 'secret_token'
      end

      it "should update a collection via API" do
        old_description = collection.description
        put 'update', params: { format: 'json', id: collection.id, admin_collection: { description: collection.description+'new', contact_email: contact_email, website_label: website_label, website_url: website_url }}
        expect(JSON.parse(response.body)['id'].class).to eq String
        expect(JSON.parse(response.body)).not_to include('errors')
        collection.reload
        expect(collection.description).to eq old_description+'new'
        expect(collection.contact_email).to eq contact_email
        expect(collection.website_label).to eq website_label
        expect(collection.website_url).to eq website_url
      end
      it "should return 422 if collection update via API failed" do
        allow_any_instance_of(Admin::Collection).to receive(:save).and_return false
        put 'update', params: { format: 'json', id: collection.id, admin_collection: {description: collection.description+'new'} }
        expect(response.status).to eq(422)
        expect(JSON.parse(response.body)).to include('errors')
        expect(JSON.parse(response.body)["errors"].class).to eq Array
        expect(JSON.parse(response.body)["errors"].first.class).to eq String
      end
    end
  end

  describe "#update_access" do
    let(:collection) { FactoryBot.create(:collection) }

    before do
      login_user(collection.managers.first)
    end

    context "should not allow empty" do
      it "user" do
        expect{ put 'update', params: { id: collection.id, submit_add_user: "Add", add_user: "", add_user_display: "" }}.not_to change{ collection.reload.default_read_users.size }
      end

      it "class" do
        expect{ put 'update', params: { id: collection.id, submit_add_class: "Add", add_class: "", add_class_display: "" }}.not_to change{ collection.reload.default_read_groups.size }
      end
    end

    context "add new special access" do
      it "user" do
        expect{ put 'update', params: { id: collection.id, submit_add_user: "Add", add_user: "test1@example.com", add_user_display: "test1" }}.to change{ collection.reload.default_read_users.size }.by(1)
      end

      it "group" do
        expect{ put 'update', params: { id: collection.id, submit_add_group: "Add", add_group: "test_group" }}.to change{ collection.reload.default_read_groups.size }.by(1)
      end

      it "external group" do
        expect{ put 'update', params: { id: collection.id, submit_add_class: "Add", add_class: "external", add_class_display: "external" }}.to change{ collection.reload.default_read_groups.size }.by(1)
      end

      it "IP address/range" do
        expect{ put 'update', params: { id: collection.id, submit_add_ipaddress: "Add", add_ipaddress: "255.0.0.1" }}.to change{ collection.reload.default_read_groups.size }.by(1)
      end
    end

    context "remove existing special access" do
      before do
        collection.default_read_users = ["test1@example.com"]
        collection.default_read_groups = ["test_group", "external_group", "255.0.1.1"]
        collection.save!
      end
      it "user" do
        expect{ put 'update', params: { id: collection.id, remove_user: "test1@example.com" }}.to change{ collection.reload.default_read_users.size }.by(-1)
      end

      it "group" do
        expect{ put 'update', params: { id: collection.id, remove_group: "test_group" }}.to change{ collection.reload.default_read_groups.size }.by(-1)
      end

      it "external group" do
        expect{ put 'update', params: { id: collection.id, remove_class: "external_group" }}.to change{ collection.reload.default_read_groups.size }.by(-1)
      end

      it "IP address/range" do
        expect{ put 'update', params: { id: collection.id, remove_ipaddress: "255.0.1.1" }}.to change{ collection.reload.default_read_groups.size }.by(-1)
      end
    end

    context "change default access control for item" do
      it "discovery" do
        put 'update', params: { id: collection.id, save_access: "Save Access Settings", hidden: "1" }
        collection.reload
        expect(collection.default_hidden).to be_truthy
      end

      it "access" do
        put 'update', params: { id: collection.id, save_access: "Save Access Settings", visibility: "public" }
        collection.reload
        expect(collection.default_visibility).to eq("public")
      end
    end

  end

  describe "#apply_access" do
    let(:collection) { FactoryBot.create(:collection) }

    before do
      login_user(collection.managers.first)
    end

    context "replacing existing Special Access" do
      let(:overwrite) { true }
      it "enqueues a BulkActionJobs::ApplyCollectionAccessControl job" do
        expect { put 'update', params: { id: collection.id, apply_access: "Apply to All Existing Items", overwrite: overwrite } }.to have_enqueued_job(BulkActionJobs::ApplyCollectionAccessControl).with(collection.id, overwrite).once
      end
    end

    context "adding to existing Special Access" do
      let(:overwrite) { false }
      it "enqueues a BulkActionJobs::ApplyCollectionAccessControl job" do
        expect { put 'update', params: { id: collection.id, apply_access: "Apply to All Existing Items", overwrite: overwrite } }.to have_enqueued_job(BulkActionJobs::ApplyCollectionAccessControl).with(collection.id, overwrite).once
      end
    end
  end

  describe "#remove" do
    let!(:collection) { FactoryBot.create(:collection) }

    it "redirects to restricted content page when user does not have ability to delete collection" do
      login_as :user
      expect(controller.current_ability.can? :destroy, collection).to be_falsey
      expect(get :remove, params: { id: collection.id }).to render_template('errors/restricted_pid')
    end
    it "displays confirmation form for managers" do
      login_user collection.managers.first
      expect(controller.current_ability.can? :destroy, collection).to be_truthy
      expect(get :remove, params: { id: collection.id }).to render_template(:remove)
    end
  end

  describe '#attach_poster' do
    let(:collection) { FactoryBot.create(:collection) }

    before do
      login_user collection.managers.first
    end

    it 'adds the poster' do
      file = fixture_file_upload('/collection_poster.png', 'image/png')
      expect { post :attach_poster, params: { id: collection.id, admin_collection: { poster: file } } }.to change { collection.reload.poster.present? }.from(false).to(true)
      expect(collection.poster.mime_type).to eq 'image/png'
      expect(collection.poster.original_name).to eq 'collection_poster.png'
      expect(collection.poster.content).not_to be_blank
      expect(response).to redirect_to(admin_collection_path(collection))
      expect(flash[:success]).not_to be_empty
    end

    context 'with an invalid file' do

      it 'displays an error when the file is not an image' do
        file = fixture_file_upload('/captions.vtt', 'text/vtt')
        expect { post :attach_poster, params: { id: collection.id, admin_collection: { poster: file } } }.not_to change { collection.reload.poster.present? }
        expect(response).to redirect_to(admin_collection_path(collection))
        expect(flash[:error]).not_to be_empty
      end
    end

    context 'when saving fails' do
      before do
        allow_any_instance_of(Admin::Collection).to receive(:save).and_return(false)
      end

      it 'returns an error' do
        file = fixture_file_upload('/collection_poster.png', 'image/png')
        expect { post :attach_poster, params: { id: collection.id, admin_collection: { poster: file } } }.not_to change { collection.reload.poster.present? }
        expect(flash[:error]).not_to be_empty
        expect(response).to redirect_to(admin_collection_path(collection))
      end
    end
  end

  describe '#remove_poster' do
    let(:collection) { FactoryBot.create(:collection, :with_poster) }

    before do
      login_user collection.managers.first
    end

    it 'removes the poster' do
      expect { delete :remove_poster, params: { id: collection.id } }.to change { collection.reload.poster.present? }.from(true).to(false)
      expect(response).to redirect_to(admin_collection_path(collection))
      expect(flash[:success]).not_to be_empty
    end

    context 'when saving fails' do
      before do
        allow_any_instance_of(Admin::Collection).to receive(:save).and_return(false)
      end

      it 'returns an error' do
        expect { delete :remove_poster, params: { id: collection.id } }.not_to change { collection.reload.poster.present? }
        expect(response).to redirect_to(admin_collection_path(collection))
        expect(flash[:error]).not_to be_empty
      end
    end
  end

  describe '#poster' do
    let(:collection) { FactoryBot.create(:collection, :with_poster) }

    before do
      login_user collection.managers.first
    end

    it 'returns the poster' do
      get :poster, params: { id: collection.id }
      expect(response).to have_http_status(:ok)
      expect(response.content_type).to eq "image/png"
      expect(response.body).not_to be_blank
    end
  end
end


text:
Best Kodi alternatives for Windows 10
If you are an ardent fan of TV shows, movies, sports, and films, looking for streaming the content from the home network, internet or local storage, the streaming app like Kodi is the one that surely flashes your mind. Undoubtedly, Kodi is an extremely amazing streaming app that would turn any digital devices like smartphone, computer or a tablet to a streaming setup box and would give the users, the benefit to take media anywhere with Kodi.
Kodi is an open source software which was earlier called as Xbox Media Center (XBMC) and was originally used for the Microsoft Xbox. Kodi lacks some features when it comes to using a good user interface. Here are few free alternatives to Kodi which offers almost the same features and functionality as Kodi for streaming the content from all over the world
Kodi alternatives for Windows
While there are plenty of streaming apps like, Chromecast, Apple TV and others which are confined to a curated app store, Kodi allows users to customize the software by downloading a wide range of add-ons, builds, and applications without any boundaries, and is not held back by licensing. Kodi is an open source software which was earlier called as Xbox Media Center (XBMC) and was originally used for the Microsoft Xbox. It is now run by an independent XBMC foundation and recently renamed as Kodi.
Kodi allows users to run all type of content like videos, music on all the devices like Android, iOS, Linux, Windows, and even Raspberry Pi. However, Kodi lacks some features when it comes to using a good user interface. Fortunately, there are few free alternatives to Kodi which offers almost the same features and functionality as Kodi for streaming the content from all over the world. In this article, we round up some of the best Kodi Alternatives for the Windows platform that would allow users to stream and access the content across all the devices any time irrespective of the location.
Universal Media Server is one of the media streaming services that offers a simple user interface for transcoding media content between computers, smartphones, Blu-ray players and smart TVs. The media server is the popular alternative to the Kodi that allows to stream audios, images, and videos to the DLNA -capable devices and also has provision to stream contents to the non-DLNA support devices. The server is designed to run on all major operating system like Mac, Windows, and Linux. The media server has some additional features as compared to Kodi. The server is updated with new features regularly and is available for free download. Users can also subscribe to the paid media servers to get the benefit of the additional features. It can be streamed to devices like PS3, PS4, Microsoft Xbox One, Microsoft Xbox 360, Smart TVs, gaming consoles, smartphones and more.
Open Source Media Center (OSMC)
OSMC is an open source media center which shares similar features like Kodi but with additional versatility. It is a Linux distro based on Kodi Media Center and Debian Linux. Unlike Kodi, OSMC has an easy to use user interface and is available to use for free. OSMC also offers its user a customization option through the App Store to ease the experience as per the user's preference. OSMC can be used to play a wide variety of media formats across most of the devices and streaming protocols. It is designed to run on all major operating system like Mac, Windows, and Linux
Plex is a popular software for streaming your favorite collection of TV shows, music, movies and images on all your devices, anywhere. This is a best Kodi alternative that manages all favorite media content and it runs on all type of server than just a dedicated PC. Users can get Plex for free and also can take the benefit of the premium features with a Plex Pass. It supports all the major operating system like Linux, iOS, Windows and even Android.
Emby is another amazing software for streaming your favorite collection of TV shows, music, home videos and photos on all your devices, anywhere. This serves as an alternative to both Plex and Kodi that organizes all your favorite media content like home videos, music and pictures into a single place. Additionally, like Plex software, Emby runs on all type of server than just a dedicated PC and automatically converts all type of media and stream them on any devices. Users can get Emby for free, and it supports all the major operating system like Linux, iOS, Windows and BSD server operating systems.
Media Portal is an open source media center software similar to Kodi. The software is exclusively for Windows where users can stream favorite radio, music, TV shows, videos on all devices. Additionally, users can tune into Live TV, install the plugin as well as record live TV. Users can install a broad set of skins and select from a wide choice of plugins to customize the software and manage the media content. It supports TV channel logos, Picture in Picture, advanced EPG and, CI/CAM support. In a nutshell, Media Portal is ideal a solution for Window users to turn PC into a Home Theater PC.
Your recommendations?
Tags: Media
PavithraBhat@TWC
Pavithra is a Windows enthusiast, who loves keeping abreast with the latest in the world of technology.


text:
Back to Journals » Vascular Health and Risk Management » Volume 9
Emerging families of biomarkers for coronary artery disease: inflammatory mediators
Authors Yayan J
Received 25 March 2013
Published 31 July 2013 Volume 2013:9 Pages 435—456
DOI https://doi.org/10.2147/VHRM.S45704
Josef Yayan
Department of Internal Medicine, University Hospital of Saarland, Homburg/Saar, Germany
Introduction: Inflammation has been implicated in the development of atherosclerosis in patients with acute coronary syndrome. C-reactive protein is an established nonspecific prognostic inflammatory biomarker for patients with acute coronary syndrome in the medical literature. This has led to a concerted effort to identify circulating inflammatory biomarkers to facilitate predicting the risk for and diagnosing coronary artery disease in at-risk subjects. The objective of this study was to search after novel inflammatory biomarkers reported as useful for diagnosing coronary artery disease.
Methods: The PubMed database was searched for reports published from January 1, 2000 to June 30, 2012 of novel circulating biomarkers for coronary artery disease in addition to the established biomarker, C-reactive protein. The search terms used were "infarction", "biomarkers", and "markers", and only original articles describing clinical trials that were written in English were included. All published articles were separately examined carefully after novel inflammatory markers for acute coronary syndrome. All irrelevant publications without content pertaining to inflammatory biomarkers for acute coronary syndrome were excluded from this study. Our results reflect all articles concerning biomarkers in humans.
Results: The PubMed search yielded 4,415 research articles. After further analysis, all relevant published original articles examining 53 biomarkers were included in this review, which identified 46 inflammation biomarkers useful for detecting coronary artery disease.
Conclusion: The emergence of diverse novel biomarkers for coronary artery disease has provided insight into the varied pathophysiology of this disease. Inflammatory biomarkers have tremendous potential in aiding the prediction of acute coronary syndrome and recurrent ischemic episodes, and will eventually help improve patient care and management.
Keywords: arteriosclerosis, biomarkers, coronary artery disease, myocardial infarction, inflammation, markers


Those looks sinful! I need to go and find them at the store. I am craving them now.
I'm a BIG sucker for cookies! Although I can't quite guarantee they would make it into the oven and into full sized cookies. LOL BTW that cookie ice cream sandwich looks incredible.
Well this would make baking quick desserts much easier. I'm glad the cookies turned out so soft and chewy.
I love soft, chewy cookies like these. I can't stand the crunchy ones. These are the type of cookies I need to get and throw in the oven.
This sounds like a great idea!! I love that you can choose to make 1 cookie or 10, that's perfect for a single gal like me!
Oh that ice cream cookie sandwich looks reallllly good! Now I must find these to make!
There are times wherein it would be nice to bake some goodies but then you barely have time to do so, these ready to bake cookies come in handy and it's really awesome. serving it with cold milk is a classic, one of the best things in life!
Those look amazing! I am a huge fan for any type of cookie. I think I cookie tester in my former life!! lol Great post!
Ready to back cookies? SO LOVE THIS! Hopefully they are available to here at our place.
And now I want cookies! I love short cuts for baking because baking isn't my strongest area. These look yummy!
Oh yum! I want some now and that ice cream cookie...tasty.
I've got to get some of these and let the grand kids help me bake them. I know we'd all love them as well as making the ice cream sammy's.
I just wish there's 600lb Gorilla here so I can make easy snacks and desserts.


text:
The Board of Perry Township Trustees met
in Regular Session on Monday, February 10, 2014 at 7:00 p.m. at the Community Room in East Liberty.  Roll Call; John Brose, present, Jeff Rosebrook, present, Terry Cook, present, and Cindy Stalling present.  Also present was Rhonda Cook, Bonnie Brose, Keith Montgomery, and Dan Ackley.    All stood and said the Pledge of Allegiance.     The minutes of the previous meeting was given to the Trustees to read prior to this meeting.  Mr. Brose asked if there were any additions or corrections to the minutes and then asked if there were any additions or corrections to the financial statements that were given to the Trustees from the fiscal officer.  They both stand approved by the trustees.      Mrs. Bonnie Brose thanked Mr. Jeff Rosebrook and Mr. Terry Cook for covering for John and Dave while their mother and mother-in-law has been ill and in the hospital.       Bonnie reported that she has talked to Virginia Stanford about her property on N. Main Street to see if she was interested in us filling out the paperwork to have it torn down?  She told Bonnie that her and her son, Jeff will go through it and then she will let us know what she wants to do with the property.      Fire Chief, Keith Montgomery, reported that the fire dept. has hired 3 new ff/medics they are Phillip Wright, Doug Hager and Brandon Rutherford.  Phillip will need new boots, and gloves, Doug needs a whole set of turn-out gear and Brandon needs pants, boots and a helmet.  They will be putting in 2-3 days per week and will be working the 8 hr. shifts.  They will not be working the 24 hr. shifts.  Kyle Brugler will be going on the 24 hr. shift rotation; he signed a 60 day contract and is on a probation period, He is an EMT-I, so he can administer drugs.       Larry Wellington needs a new coat, his is outdated and he has never had a new one.  He got a used one when he joined the department.      There is a new lock for the door at the fire house.  The dept. conducted a training session on Sunday and 14-15 firemen showed up for training on the new truck.  It went very well.      Chief reported that Mr. Logan Brown has resigned from the department, and he got a better job.      Chief thanked the trustees for his raise.      Chief reported that the rescue is fixed and the grass truck is still out to TRC getting serviced.      The volunteer pay was brought up and there is some confusion about whether they got the $.25 raise or not?  After some discussion, Mr. Jeff Rosebrook made a motion to raise the volunteer pay from $11.00 per hour to $11.25 an hour, seconded by Mr. John Brose.  Brose, yes, Rosebrook, yes and Cook, yes.  This goes into effect on Feb. 10, 2014.      Mr. Jeff Rosebrook reported that they are still awaiting word from the County on the tile on T.R. 131.      Mr. John Brose reported that the repeaters are in and working good.      Mrs.  Stalling had Johnson's contract for the Trustees to sign for 2014.     Mr. Terry Cook reported that he had his first funeral, it was for Berty Moore.  Terry wants to get the East Liberty Cemetery surveyed.  We need to get ahold of a couple of surveyors and get prices from them.  Mr. John Brose made a motion to get estimates for this, seconded by Mr. Jeff Rosebrook.  Brose, yes, Rosebrook, yes and Cook, yes.  We are not measuring the lots; we need to get the property lines surveyed.      There has been A LOT of snow plowing done in the past month.      Mr. Jeff Rosebrook reported that he has talked to Mr. Chuck Litteral and Mr. Litteral would like to have some of the risers that were put on his property when we fixed the tile behind the fire house, cut off to be even with the ground.  We can leave the ones in the fence row and put posts beside the ones in the ground.  But, they like to ride their 4 wheelers out in their property so they would like the majority of them cut off.       Mr. Rosebrook talked to a State guy about putting up a shed at the Temperance Street garage.  He was told that we can't put up more than a 120 sq. ft. shed unless we get an architect in and have blueprints and permits.  We can put up an overhang with no doors on it.  After some discussion the trustees all agreed to go to Morton Builders and see what they can do and they have their own architect.       Mr. Ralph Hall called John today and said that he would let us know in a couple of weeks if he is interested in mowing the cemeteries this year or not.  He said it looks real promising.      Mr. Terry Cook brought up about the picnic tables that we are going to purchase for the shelter house at Perry Park.  He reported that we can get 6' treated lumber tables from the Amish store up on S.R.68 for $189.00 each.  We voted earlier to get 10 new tables before summer.  Trustees will make a trip up there and look at them and see if they will give us a better deal for buying 10 at a time.      Mr. John Brose talked to Andrea King from BWC about whether she knew anything yet about the stair chair grant that we applied for.  She said we should hear something in the next week or two.  John also asked her about the training at the fire house and for our employees on the tree trimming.  Do the trainers have to be certified?  Andrea told him No they just have to have the knowledge to do the training.       Mr. Brose reported that Mr. Dean Moore checked out the siren and he is sure it is the circuit board that is wrong with it.  Dean thinks we already have the part to fix it.  He will look into this and get it fixed.      Mr. Dan Ackley, zoning inspector, gave a zoning update.  He has had a couple of calls in the past month.  He reported that James Furlong has a 1 acre lot on what was his Gpa's property.  He wants to put a hog barn on this acre.  It would house 300 head.  The owners of the property (which was his Gpa's) now are against him putting in this hog barn.  They have called Dan as well, stating that they are against the hog barn.  James told Dan that he has tried to sell the owners now the 1 acre and they said they can't afford it.  James told Dan that he wants to put the land to use but he doesn't want to cause any problems either. Dan told both parties that agriculture is exempt from zoning, so there isn't anything he can do about the hog barn.       Mr. John Brose brought up that he would like to have the township meetings moved back to starting at 7:30 p.m. instead of 7:00 p.m. as it really rushes Dan to be able to get to the meetings at 7:00.  After some discussion, Mr. Brose made a motion to move the starting time for the meetings starting with the March meeting back to 7:30 p.m., seconded by Mr. Jeff Rosebrook.  Brose, yes, Rosebrook, yes and Cook, yes.  Cindy will advertise this in the Examiner and also post it at the post office.            Mr. John Brose made a motion to pay the bills, seconded by Mr. Jeff Rosebrook.  Brose, yes, Rosebrook, yes and Cook, yes.    TOTAL OF BILLS:    $75.272.46                                                                                TOTAL OF ELECTRONIC PAYMENTS    $5,590.94      TOTAL OF INCOME FOR JANUARY   $ 11,932.45           Mr. John Brose made a motion for adjournment, seconded by Mr. Jeff Rosebrook.  Brose, yes, Rosebrook, yes and Cook, yes.
unCopyright. PERRY TOWNSHIP LOGAN COUNTY OHIO. All Rights Reserved.


Charm Windows Limited of WORKSOP Nottinghamshire. Double glazing frames are normally in one in all three supplies: uPVC (or PVCu), aluminium, or hardwood.
As a part of the service your double glazing company offers, a surveyor will have a look at your property and advise you as to which material can be best. They should be capable to provide samples so that you can take a look at, either in your own dwelling, or in a showroom. If this is not potential, then they are able to show you different installations locally that can present you the differences between the three materials.
Aside from the looks of the totally different supplies, which can have an effect on your decision, every material has its personal advantages.
The selection of fabric is admittedly as much as you and a good surveyor will be capable to provide you with advice. She or he will take a look at your property, hearken to your wants and reply your questions before advising you on which double glazing materials she or he thinks would go well with you best. Give Charm Windows Limited a call to discuss your requirements.