text:
You Can't Participate
By Mark Scaramella on September 28, 2011
Last Tuesday, the Mendocino County Board of Supervisors spent more than half an hour aimlessly discussing Mendocino County's "Legislative Platform." O mi o my o how can we get federal and state agencies to pay attention to little Mendo's "priorities?" Having dumped the County's expensive "lobbyist" last year, who now would defend us from the wolves? The lobbyist position, of course, was a political slot maintained for pals of our permanent cadre of elected officials who, normally, would be expected to "lobby" to their constituents.
The dialog that follows is choppy and disjointed because it's verbatim; we carefully reviewed the recording of the meeting to make sure we captured the Board discussion accurately, unlikely as it may read in the cold, unforgiving light of print. Everybody who participated in this discussion makes north of $60k a year; they are the Mendo's best-paid officials.
Supervisor Carre Brown: "It's important that any Supervisor that has legislation that they're aware of or any of the committees they sit on, to bring that forward as well so the committee has that in order to incorporate into its platform."
Supervisor Dan Hamburg: "Absolutely."
Supervisor John Pinches: "I have a question about that. What would be the process? Because if you form this [ad hoc] committee, let's say I have a federal issue. Which I do, a major one, that I want to bring forward. Do I have to bring it forward to the committee? That would be a violation of the Brown Act. So how would I do it? Wait for the committee to come forward with their recommendations and then I would add that to it? That seems kind of awkward."
County Counsel Jeanine Nadel: "Or you could put it on the agenda and direct it to the committee. You know, through the, through the Board process."
Hamburg: "Couldn't you also just direct it to the CEO's office?"
Nadel: "You can do that."
Pinches: "But how do I advocate for this?"
Nadel: "You have to put it out there."
Pinches: "Without violating the Brown Act?"
Nadel: "It would have to go on the agenda or if you are directing the CEO's office to look into something or, or provide information that would be one thing. But if you're going to advocate for it and you want the full board support then you would have to put it on the agenda."
Pinches: "But I cannot do it through the committee process."
Nadel: "No."
Brown: "But if it's a timely item, you would just bring it forward, forth, as your own agenda item, I would assume."
Deputy CEO Kristi Furman (who was making the presentation on the subject): "I would think that the ad hoc committee would come up a draft compilation of the important issues that the Board submits and then you would all decide on the final adoption what should be included and what may not."
Nadel: "But this is different."
Brown: "But I think what Supervisor Pinches is saying is that there's something that is happening now that he has a concern with, that he would like to advocate on behalf of the County of Mendocino."
Pinches: "Can I air it out there right now, just briefly?"
Board Chair Kendall Smith: "You have to ask County Counsel."
Nadel: "Let's finish what you're doing here first."
Pinches: "See, it's hard to even get it out there."
Smith: "Oh, you can't!"
Pinches: "Outside the committee process."
Brown: "You have to get with staff and get that agendized for next Tuesday. You have to have it tomorrow morning."
Pinches: "But the agenda item, say that I'm opposed to this or for it or something. Then it kind of stops there. You have to have a forum before you can go advocate, advocate your position and then the committee process is a violation of the Brown Act providing you show up. That's my point."
Hamburg: "Well, whatever came forward from our committee would certainly not be the final; it's not final until it comes here."
Smith: "Well, I certainly can ask Supervisor Hamburg if we got progress, we actually got the work in process."
Hamburg: "We can do a 45 day report."
Smith: "Yeah. Yeah. We don't just get the finished product."
Furman: "No, certainly not. And I think the board members should report back to you."
Hamburg: "They would be here for a discussion by the board."
Nadel: "Right."
Smith: "So there is an avenue to give input. We understand that. I mean, from Supervisors to Department Heads. I'm, I, I'm, I think the general idea is good but I'd like to remind the board that this was a big issue with me, I think it was two years ago, that this process absolutely had to be a public process, that having it be an ad hoc was just not what this body was wanting to do. So that, this is a real turnaround all of a sudden to create an ad hoc process for this. That was a big point that the board, the board majority made at one point that this had to be a public, you, because the public wanted to come and weigh in on it. Is that true, Ms. Angelo?"
CEO Carmel Angelo: "Absolutely, Madam Chair. And when we, when Ms. Furman was working on this and we were talking about it we were really recommending that the, the General Government Committee actually do this as it had done in the past. So…"
Smith: "Quite honestly I think that's a better forum."
Angelo: "As a public process."
Smith: "To get it done."
Pinches: "And you, and if you haven't. If I may Madam Chair?"
Smith: "Yeah. Go ahead."
Pinches: "To have it in a, a standing committee forum then you, then the third supervisor can actually go to that committee, committee meeting and make a presentation, right?"
Pinches: "Because those are public."
Nadel: "No. You can attend the meeting but you can't participate. But you could attend the meeting."
Pinches: "But those are public meetings, though. Those are open public meetings. And you can advocate."
Nadel: "Right. You can attend the meeting, but you can't participate. But with an ad hoc it would be problematic for you to even attend."
Pinches: "But I mean, it is a standing committee, so you can go and make your presentation on your, on your position of some kind."
Nadel. "No. You could attend the meeting but you cannot participate."
Brown: "I think the ad hoc will work until we get to our January meeting where we'll once again, first meeting of the year, discuss standing committees, etc. and maybe we'll want to go forward with general government just for this purpose, this once. We do not have the lobbyist, so to speak."
Smith: "I don't know. It looks like Counsel is kind of frowning when you, we've got to get this wrapped up. So, by…"
Brown: "With the ad hoc committee for the next 45 days, but we will once again, I believe, where we left it last January, that we would revisit standing committees and general government."
Nadel: "Your ad hoc committee would have to be your general government committee because you couldn't then have a third board member working on the same project, so, um…"
Brown: "But it has gone forth and been approved by the board, if it's all ready to go, by the first of the year, it's not, it's like, not that it could be. But perhaps."
Smith: "But they need it, Supervisor Brown, by December. The state, before they, they need the finished product by December. So it's not. Next year is next year but they need it, they need it by December. We missed that date last year."
Brown: "So, but, that, that, that. I'm just trying to show an example to County Counsel."
Nadel: "No. Your ad hoc committee work is done and completed by the end of the year. And then the board takes action on it. And the ad hoc is disbanded. That's one thing. But if you expect to have the ad hoc continue the work along with the standing committee then you've got a, you've got a problem with the Brown act. You can't."
Brown: "No."
Nadel: "You can't."
Furman: "The board also I believe by your rule structure allows you to determine if this ad hoc committee should be subject to the Brown Act with agendized meetings. So that could certainly be a part of your motion. If you chose to have public involvement."
Smith: "That's true. Supervisor McCowen."
McCowen: "Well, and separate from it being subject to the Brown Act, it could also just be, you know, an informal notice put out there in the community, you're welcome to attend. The same way that the marijuana dispensary issue is being dealt with. Uh, could we call for the question? Maybe take Supervisor Pinches' comment. And then let's vote on this."
Smith: "Supervisor Pinches."
Pinches: "Well, it's clear to me that the only way if you come to a specific issue which I have in mind, the only way for me to do it is agendize it as a separate issue and bring it forward and then if they wanted it for a committee or something. Otherwise, it's really awkward for me to get it that way. As a third member that's not on the committee, it's really awkward for me to get it out there."
McCowen: "But County Counsel is saying even if it was assigned to a standing committee, you could not have any input."
Pinches: "That's what I'm saying."
McCowen: "Yeah."
Pinches: "So I have no other option than to agendize it as a separate issue."
McCowen: "And you've always had that option."
Pinches: "Yeah."
Smith: "Well, I wanted to comment on Supervisor Hamburg's question."
McCowen: "Call for the question. There is actually a motion."
Smith: "Well, Supervisor, I didn't…"
McCowen (commandingly): "Call for the question. It's a motion."
Smith: "So what is the actual, what is the actual motion? We'll have to have the clerk read it."
McCowen (commandingly): "Vote."
Clerk: "I would like clarification. The motion that I have here is a motion by Supervisor Hamburg and seconded by Supervisor McCowen that the Board of Supervisors appoints Supervisors Brown and Hamburg to an ad hoc committee to discuss the 2012 County of Mendocino legislative platform and submit recommendations to the full board for action within the next 90 days."
Smith: "I think that's good. Yeah, that's good. And there were some other anecdotal things that I wanted clarification, but if that's the motion then I think, we don't, I don't need to add those questions. So we? Is that where? Can we?"
Hamburg: "The only thing we might add to that is that we agreed that, we might add to that a, a 45 day, have a 45 day report working."
Smith: "That's good. Does the second accept that? Who is the second?"
McCowen: "Well, I don't know that I want to put a tight time limit on it. And if you run into a problem."
Smith: "It's not tight, it's not, you monitor."
McCowen: "Okay, fine. I accept that."
Hamburg: "Do we have to vote on this John? Shall we bring this to a vote?"
Smith: "Ok. So, all in favor?"
(Everyone says aye. No one is opposed.)
Smith: "Motion passes unanimously."
Also on last week's agenda was whether the Board should consider a moratorium on pot dispensaries as Supervisor McCowen holds meetings and prepares a draft pot dispensary ordinance.
Supervisor Hamburg began the discussion by saying, "I recuse myself because of the appearance of a conflict of interest." (Supervisor Hamburg's daughter Laura has proposed to open a marijuana dispensary in downtown Boonville.) Hamburg then left the room.
About 18 Boonville residents spoke in favor of the moratorium, saying that the process was moving too fast, that they were worried about "the youth," that no one has a "right" to marijuana — "it's a privilege," that the County should have some "governance" over the location of dispensaries, that by licensing and permitting marijuana dispensaries the County was "aiding and abetting" a federal crime, that "everybody and their dog can already get all the marijuana they need."
Opponents of the moratorium said Mendo residents need their medicine, that the dispensaries will comply with any ordinance as required, that more education is needed, that a moratorium is not necessary because there are no problems with existing dispensaries, that marijuana is being unfairly demonized, that dispensaries can be a source of revenue for the County.
In other words, just another open mike day at the Mendocino County Supervisor Chambers in Ukiah.
Laura Hamburg somewhat dramatically announced that she had decided not to sell marijuana or marijuana-related products at her "alternative healing center" in Boonville.
Then the issue returned to the Board for discussion.
Supervisor McCowen: "If Laura Hamburg is not selling pot, do we need a moratorium now?"
Supervisor Brown said that it was important to "move forward," and therefore she would make a motion for a moratorium on marijuana dispensaries in the unincorporated areas of the County.
Supervisor Smith seconded "for discussion."
Supervisor Pinches: "Prop 215 is the law. We have numerous dispensaries now, and there's no problem. People complain about beer and wine outlets. Now that Laura Hamburg has withdrawn the pot aspect, there's no need."
Supervisor Brown said she had received emails about the dispensaries in the town of Mendocino and that she would like to avoid more conflict in other communities. "Other communities will come in," said Brown.
County Counsel Nadel said she expected that Supervisor McCowen would finish preparing a draft dispensary ordinance in 45 days, adding, "The way I read the statute for four-fifths, that means with Hamburg recusing, all four remaining have to vote for [the moratorium]."
McCowen suggested a partial moratorium in areas that are within a certain distance from such facilities as schools or churches.
Pinches said he was willing to take Ms. Hamburg at her word so the issue should be off the table. "But the ordinance is on a fast track. I won't vote for urgency because the urgency is no longer there."
Supervisor Smith: "Let's just withdraw the motion. We don't have enough support."
Pinches: "Prop 215 passed 15 years ago. I hardly think there's any urgency here."
McCowen: "That's a great rhetorical comment."
Brown: "I still want to move forward with the motion, a moratorium for 45 days. Why not support this?"
McCowen: "A moratorium is common [when regulations are being drafted]. It's a time out. It's temporary. I support the motion on the floor."
Pinches: "I like idea of dispensaries out in the open. I know people don't like them, or a liquor store or a winery. They have a right to oppose it and express their own feelings."
Brown: "We need parameters for people in the backwoods, plus communities and residential areas."
Smith: "45 days won't help much. It's a small matter."
Chair Smith called for the vote. The four Supervisors present voted "by the button." The lights on vote-board said 3-1 in favor. Only Pinches voted no.
Clerk of the Board: "I'd like clarification from County Counsel. With Supervisor Hamburg recusing himself…"
Smith: "You said a four-fifths vote was required."
Pinches: "You said it was a four-fifths vote on the issue."
Nadel: "I said the ordinance requires a four-fifths vote. But certainly direction to staff, you've given direction by adopting the resolution and that only requires a majority."
Pinches: "I'm confused."
Smith: "I am too. Counsel can take two seconds to…"
Pinches: "I think the vote is four votes out of five. Clearly. It's not a majority."
Nadel: "Yeah."
Pinches: "It's four-fifths. Four out of five."
Nadel: "Yeah. What you just voted on was the resolution directing staff to bring back the urgency ordinance. It's the urgency ordinance itself that will require four votes. So you're directing me to bring it back and put it on the agenda."
Pinches: "Why devote staff time to bringing something forward that's not going to go forward?"
Nadel: "That's right."
McCowen: "Well, I personally don't favor that if it's a foregone conclusion that it's not going to pass, so, uh, I will make a motion to reconsider our last action."
Brown (Laughs): "You need a four-fifths vote."
Smith: "To re-consider…"
McCowen (to Brown): "And you wouldn't support reconsideration?"
Brown: "I will not support reconsideration."
McCowen: "I will return the gavel to Chair Smith."
Smith (sarcastically): "Thanks."
Pinches: "Madam Chair? I would refer to the agenda item, it says, the last item says, passage of any urgency ordinance requires a four-fifths vote. That's any urgency ordinance."
Brown: "That's the ordinance. This is the resolution."
Nadel: "Four-fifths is required for any urgency ordinance. The ordinance is not before you, this is the resolution."
McCowen: "I'm going to go get Dan." (Walks out the back door.)
Smith: "So, um, on this point, because no one wants to waste anyone's time."
Smith: "So what we have is the attached ordinance… is the attached resolution. So you're not going to need to do any more work if it's going to come forward and then…?"
Nadel: "No. I will have to now prepare the urgency ordinance."
Smith: (Rolls eyes dramatically).
Nadel: "I wanted direction on whether to do that. It's a lot of work. You have directed me to do that and that's fine. It will come back…"
Brown looks on smilingly.
McCowen returns without Hamburg.
Nadel: "And perhaps Supervisor Pinches will change his mind. I don't know."
Smith: "Yeah, but you're…"
Nadel: "I don't know what will happen next week."
Pinches: "I can tell you that right now."
McCowen: "What is the snowball's chance?"
Smith: "Ok, well, Ok, that's a procedural matter. That's just how that goes. So here we are."
Pinches: "Supervisor Brown, you won't reconsider? Are you going to reconsider to change, to stop this train wreck?"
McCowen: "It requires a four-fifths vote and, uh, Supervisor Brown has indicated she's standing firm, just as you are."
Smith: "So perhaps Counsel can read… Because there are a number of rules and procedures with respect to bringing things back at subsequent dates and times, but maybe Counsel could, um… I think Counsel is… I mean, is there any way to not…?"
Nadel: "Motion to reconsider doesn't require a four-fifths vote. [Reading] 'A motion to reconsider if lost shall not be renewed, nor shall any subject be a second time reconsidered within twelve months except by a four-fifths vote.' So if you want to reconsider now, someone who voted in the majority can ask for that, now that doesn't require a four-fifths vote."
McCowen: "That being the case, I…"
Smith: "Ok, Supervisor McCowen."
McCowen: "I will move reconsideration of the action just taken."
Pinches: "Second."
Smith: "So we have a motion to reconsider item 7a. Now, to Counsel, what does the reconsideration say about members present? What percentage to do we need for reconsideration?"
Nadel: "Just the simple majority."
Smith: "The majority of those present, is that correct?"
Nadel: (Nods.)
McCowen: "And if the motion passes, it would put the previous motion back on the floor."
Smith: "So we're just voting to reconsider the previous action. That's the first vote. So all in favor say Aye."
(Motion passes, 3-1, Brown dissents.)
Smith: "So that's 3-1 in support with Supervisor Brown. So the item comes back before the Board. This is item number 7a. So anyone want to speak to this item?
Pinches: "Well, Supervisor McCowen made the motion to reconsider, so I would expect him to make the new motion."
Smith: "Well! He may. He may not."
McCowen: "No. No. What has happened is the original motion is back on the floor."
Smith: "Right."
McCowen: "And at this point, to spare County Counsel from going through a pointless exercise, I will vote against the motion on the floor."
Smith: "Well, perhaps, the Chair will go to County Counsel. Maybe we just need to take no action. I don't know that we need to vote against it to take… We just said… The item before us says, 'Discussion and possible action.' We could decide, as I think I have even suggested earlier on, we don't need to take action."
Nadel: "The problem is you have a motion on the table, so you need to take action on your motion."
Smith: "The motion on the table …"
Nadel: "…is to adopt… is to move the resolution and direct County Counsel."
Smith: "No it isn't! We just voted."
McCowen: "Yes it is."
Nadel: "Yes it is."
Smith: "We just voted to reconsider and now it's before us."
Pinches: "Now we can vote on the motion."
Nadel: "That motion is before you, it was on the table before."
McCowen: "That's what reconsideration does."
Smith: "Oh, I see what you're saying."
Nadel: "Ok."
McCowen: "And folks, I told you democracy in action can be a little messy at times."
Smith: "Ok, so then we… we need a …"
McCowen: "We need a vote."
Smith: "We need a motion."
McCowen: "A motion is on the floor."
Smith: "We have a motion by Supervisor McCowen."
McCowen: "No."
Nadel: "A motion by Supervisor Brown."
Smith: "Oh, Ok. So we're returning to the same…"
Nadel: "Yes."
Smith: "Same…"
Nadel: "Got it."
Smith: "Ok. Well, I'm going to withdraw my second."
McCowen: (Laughs.)
Smith: "I know. I'm withdrawing so you don't… If we're trying to unravel this, because of… if we're trying to be efficient, then I'm withdrawing my second, to the motion. (Shrugs.) So the motion fails for a lack of second. Ok!"
Result: No action taken. No moratorium.
Let's hear it for efficiency.
Trelanie Hill September 29, 2011
Dispensary ordinance used as free media exposure to get McCowen reelected.
Those of you keeping track at home, this is free exposure number 10.
McCowen's challenger won't be able to afford this type of press coverage. McCowen will keep his name in print in the name of marijuana legalization and his challenger won't have the same opportunity.
The advantage of being an incumbent and using cannabis issues to get reelected.
What are all those Measure B supporters thinking about now?
Probably, how McCowen did such a great job convincing them 6 plants was such a great deal and then flip-flopping to support a 99 plant scheme.
If I was a Measure B supporter, I would be angry for the trick McCowen played.
As always just my opinion,
Potter Valley
subscriber2@theava.com September 29, 2011
What the heck would happen if they took on something important?
Oh, that's right. The budget.
Here is a project for you, Mark: Try to get a sense if this Lewis Carroll dialogue happens in other counties.
Harvey Reading October 2, 2011
Other counties? Hell, it happens throughout the country, right up to the halls of "congress".


That time of year, that often-dreaded time of year, has come again. New Year's resolutions. Just the thought of setting any goals or structure to things like fiction writing can be downright horrifying to one group of authors. Really, you ask, it's that bad? Trust me, it is. I understand this because I am a card-carrying member of that group—The Pantsers. We proud Pantsers approach our creative endeavors with little more than a vague notion of what we're doing and a fire to get the project done. Personally, I am quite impressed with authors who can say they've got X many chapters left before the end of the story. Me? I have no idea where the chapter breaks are until I go back and edit. So how do we Pantsers handle this time of year, especially when we are struck with a sincere desire to get more organized? I've got a couple tools I want to show you, and a challenge at the end.
As I've said, I'm a Pantser as an author. It's ironic in a way since I am hyper-organized as a counselor, but such is life. I can't tell you how many times I've tried to get organized, to use outlines, and to plan out novel manuscripts as chapters. And I've failed. Pretty much every single time. Then, as we all took on topics to write about this month, I figured I had enough background on both sides of the fence to tackle planning for Pantsers. In discussing this topic with our editors, Heidi and Stephanie, they cued me in to a planner designed for Pantsers, and a challenge was born.
The planner I'm introducing all of you Pantsers to today is one I will use throughout this year in yet another attempt at being more organized and purposeful to what I write and do. I'll share bits of it here with you today, and then I'll update you periodically on how I'm doing with my follow through in the planner the rest of this year. I've also got another great tool I ran across online that can help with planning and organization while writing a novel.
Here's the link for the planner. Take a moment and flip through it. I know I had to page through the planner a couple times to wrap my head around how it would help me focus more this year. As I did, I realized the beautiful genius of this planner. It takes the most critical parts of goal-setting and organization and lays these things out in a way that keeps this from being constrained. There's no detailed steps to take, no due dates, no check boxes showing a task is complete. The closest it gets is a monthly calendar you can fill in however you want. There are a few other key parts to the planner. I'll warn you ahead of time I might wax a little psychological as we discuss them since they play into my academic background so well.
If you need help figuring out how to set good goals, here's an article that does a wonderful job of explaining principles to good goal-setting. The next page of the planner has you do some rough outlining of smaller steps and ideas of things to do to accomplish the goals you set. Don't worry, my dear fellow Pantsers, you only write out as much as you want to in this section. There are no specific rules you "have" to follow.
You see, pursuing my creative side is helping me teach him to pursue his creative side. He told me those doodles were a snowflake and a lowercase heart. I'd never seen a lowercase heart before that, but I think it's a wonderful idea.
Notice that much of my work so far is concentrated toward the beginning of the year. I planned my year this way for two reasons. First, if I don't move fast through the work I laid out, I still have time to finish it before the year is over. Second, if I stay on track with my work as planned, I can add projects later in the year without ending up overwhelmed or losing some of my organization.
Now, here's my challenge to all you Pantsers: print out or save your copy of the planner (here's the link again) and do it with me. The worst that could happen is we end the year like we have in the past, a little disorganized and not as directed as we would have liked. Best case scenario? We're well on our way to becoming a more organized Pantser and have more work done to prove it. Tell me what you think of the planner in the comments below. Or, better yet, share pictures of your planner with me and we can work together to keep each other on track.
Now we've got our year sketched out, it's time to shift gears. Let's look at a tool to help us Pantsers stay a little more organized as we write our novels. Don't worry—I'm not taking all the spontaneity of pantsing our way through the novels away. I won't do that because, in my experience, as soon as I've done that, I end up with a flat, boring piece of work that is better used as coloring sheets for my son than a manuscript worth editing.
The tool I'm talking about is a beat sheet. Perhaps you've heard of it before. I hadn't until I was poking around looking for useful tools to help us Pantsers out. For those of you who have not seen one before, the premise of a beat sheet is it functions as an outline for the story, but not in a traditional way.
The basic version lays out four major points, or beats, in the story that should come at roughly even intervals. First, at about the 25% mark, is the event that gets the protagonist to commit to the goal. Then, at the midpoint is where something shifts the reader and/or protagonist's understanding of the goal, stakes, choices, etc. The Black Moment comes next, at about 75%, and makes the protagonist lose all hope for the desired happy ending. The Ending Point is the final 25% of the story where the final battle occurs.
With me so far? Good. There are also four minor beats to a story as well since the major beats are each significant chunks of the novel. Minor beat one starts the protagonist on the path that leads to the conflict and the choice to commit to the goal. From there, minor beat two occurs just before the Midpoint that puts some added pressure on the protagonist. Next, minor beat three does the same thing, but after the Midpoint. This helps reinforce the shift in the goals, choices, outcomes, etc. Finally, minor beat four occurs after the final battle. This beat gives the reader a glimpse into the protagonist's future, that "what happens next" moment after the story has resolved.
Now, as Pantsers, we might not even need the four minor beats. Just the four major beats might be enough. If we make sure we know what they are, and that we have them, before we write can save a lot of time in the editing phase. You could take a piece of notebook paper and write out your four major beats to the story. Or, there are many pre-made beat sheets on the internet. Here's one website that provides some great beat sheet templates that range from the basic one I described here to genre specific sheets. A couple even have accompanying Scrivener templates.
The key to using these beat sheets is they are not rigid structures we must follow. The four major beats should be close to the marks we discussed to help keep overall story pacing on track. They need not land on a specific page or anything like that, just close. We can even change the beats if we find our story is drifting from what we originally thought. As long as we have the four major beats, then we have a loose structure on which to hang everything else. This saves us a lot of headache and editing later on trying to put them in.
I wish I would have had this back when I first drafted this novel. I can see my major beats in the novel, but shifting the scenes and such around now trying to get the pacing right and connect everything well is more challenging than it should be. But, I pantsed this one to the point I had no idea what the ending was or where the story was going when I first wrote the draft.
There you have it. Two tools to help us Pantsers out in getting a leg up on the organization side of writing. I started using them in the last week myself and found them to be easy, non-restricting. The potential for benefits are huge without sacrificing the spontaneity of my innate pantsing style. Let me know what you think and I hope to see you taking my planner challenge!
Stacy Overby is a child-chasing, teenager-wrangling, author and poet who hangs out in Minnesota with her family when she's not writing. She, her work, and her social media links can be found at www.thisisnothhitchhikersguide.wordpress.com.


text:
By Catalogue #
Meredith Monk: Turtle Dreams (ECM New Series 1240)
March 31, 2010 June 28, 2012 | Tyran Grillo
Turtle Dreams
Meredith Monk voice, piano, organ, mini-moog, casio
Andrea Goodman voice
Paul Langland voice
Robert Een voice
Julius Eastman organ
Steve Lockwood organ
Collin Walcott organ, didjeridoo
Recorded June/July 1982 and January 1983 in New York and Ludwigsburg
Engineers: John Kilgore, Thomas Lazarus / Howard Kaufman, Phil Lee, M. Monk, M. Wieland
Produced by Manfred Eicher and Collin Walcott
The shell of Meredith Monk's Turtle Dreams is, like that of its eponymous animal, of cellular design and impenetrable strength while also housing a fragile heart within. This turtle's heart is the album's rhythmic center, represented through the regularity of the organ that opens the title track. The instrument is stripped of effects, direct and without pretension. We meet a voice that might be described as eerie, yet which with a few deep listens reveals its sobering honesty. A second vocalist mimics these incantations. Their combined syllables feel precisely notated and yet free, as if passed down orally rather than through the written page. Eventually the voices rise into mechanical sirens, becoming protracted and devoid of the regularity that has spawned them, until they bubble and froth. The organ stops suddenly, leaving vocal trails to flash and fade like shooting stars. Notes ululate and dance, congregating like insects—dispersed with the wave of a hand, only to return in greater chorus. The first movement ends with return of the two voices, only now slightly askew and in freefall, as other voices rise in countermeasure before fading against the organ, which continues its commentary before deciding on a contentious chord.
The second movement, "View 1," introduces a sharper pianistic sound. The music is so precise and so cyclical that it almost resembles that of video games, which must also be open-ended so that it can be looped seamlessly (and potentially endlessly) to match the imagery for which it was composed. A single voice comes in, post-processed with a shallow echo, presaging a similarly processed keyboard that slathers the music with nostalgia. Against Monk's private songs, two voices interject like teasing children. The electric piano then signals a shift in narrative. No longer is the human voice responsible for telling us the tale, but is instead co-opted by silence, reminding us that the same realm which guards our cherished past is the same realm from which arises the most hurtful things. A modulated synthesizer shows its face before bringing the movement to a close.
Next is "Engine Steps," in which timed silence breeds an unusual industrial rhythm, like a conveyor belt carrying things to be stamped and shipped out into the universe.
A diminutive voice laces the following "Ester's Song," a brief peek into the mind of a child at play.
"View 2" signals the organ's final return, carrying upon its back the same choral cargo. The single voice, the narrative voice, becomes divided, speaking of ancestors, each of whom casts a single lure into Ester's mind. Her hair grows, but her face stays the same.
The title of the album as a whole, aside from being rather evocative, also might just be the most accurate description of the mood contained therein. For what is a turtle, if not a living being whose body is its home, whose life is lived in and near water, and whose dreams must also be liquid, submerged, and full of the sounds of the marsh. As with much of Monk's compositional work, what we get on this CD is only half the journey, complimented as it is by dance and imagery. The brief clips available online don't seem to do justice to the overall shape and feel of what I am sure is a far more inclusive live experience. Nevertheless, the descriptive power of Monk's wordlessness is staggering, and albums like this one continue to enlarge the scope of linguistic possibility. I can only hope it might do the same for all who listen.
Posted in Classical, ECM New Series Releases	Collin WalcottECM RecordsMeredith Monk
< Meredith Monk: Dolmen Music (ECM New Series 1197)
Gavin Bryars: Three Viennese Dancers (ECM New Series 1323) >
"...some of the most beautiful writing next to enjoying the music itself."
–Doug Payne (producer, writer, critic)
"...allows wonderful familiarity with the daunting, endless (and endlessly stunning) ECM catalog—and opens up possibilities that may have been missed on previous listening experiences."
–Craig LeHoullier (ECM lover, author, dedicated reader)
ECM New Series Releases (389)
ECM Releases (1,001)
ECM: A Cultural Archaeology (3)
JAPO Releases (37)
Non-ECM Reviews (172)
Old & New Masters (15)
Out of Print (127)
Touchstones (88)
XtraWATT (2)
Archives Select Month January 2020 (2) November 2019 (8) October 2019 (3) September 2019 (22) August 2019 (21) July 2019 (49) June 2019 (34) April 2019 (2) March 2019 (37) February 2019 (4) January 2019 (7) December 2018 (3) September 2018 (2) July 2018 (7) June 2018 (6) May 2018 (4) April 2018 (6) March 2018 (10) February 2018 (8) January 2018 (6) December 2017 (7) November 2017 (5) October 2017 (4) August 2017 (8) June 2017 (2) May 2017 (6) March 2017 (8) February 2017 (5) January 2017 (5) December 2016 (2) November 2016 (2) October 2016 (3) September 2016 (6) August 2016 (14) July 2016 (3) June 2016 (10) May 2016 (19) April 2016 (30) March 2016 (5) February 2016 (16) January 2016 (6) December 2015 (9) November 2015 (2) October 2015 (21) September 2015 (3) August 2015 (19) July 2015 (1) June 2015 (8) May 2015 (82) April 2015 (22) March 2015 (2) February 2015 (16) January 2015 (2) December 2014 (28) November 2014 (18) October 2014 (19) September 2014 (22) August 2014 (7) July 2014 (10) June 2014 (21) May 2014 (20) April 2014 (22) March 2014 (12) February 2014 (16) January 2014 (13) November 2013 (45) October 2013 (7) September 2013 (27) August 2013 (24) July 2013 (20) June 2013 (27) May 2013 (14) April 2013 (4) March 2013 (13) February 2013 (23) January 2013 (1) December 2012 (13) November 2012 (21) October 2012 (39) September 2012 (29) August 2012 (22) July 2012 (3) June 2012 (80) May 2012 (1) April 2012 (26) March 2012 (21) February 2012 (26) January 2012 (66) December 2011 (44) November 2011 (20) October 2011 (31) September 2011 (2) August 2011 (6) July 2011 (18) June 2011 (1) May 2011 (7) April 2011 (3) March 2011 (5) February 2011 (4) January 2011 (55) December 2010 (51) November 2010 (32) October 2010 (13) September 2010 (10) August 2010 (7) July 2010 (24) June 2010 (45) May 2010 (13) April 2010 (3) March 2010 (11) February 2010 (31)

redpajama_set_name: RedPajamaCommonCrawl


text:
Danmarksmesterskabet i ishockey 1954-55 var det første DM i ishockey. Mesterskabet blev arrangeret af Danmarks Ishockey Union og havde deltagelse af tre klubber: de jyske mestre fra Silkeborg Skøjteløberforening samt de to sjællandske hold Rungsted Ishockey Klub og Kjøbenhavns Skøjteløberforening (KSF).

Silkeborg SF havde kvalificeret sig til finalestævnet ved at vinde det jyske mesterskab i ishockey efter sejre over Horsens SF på 2-1 (efter forlænget spilletid) i semifinalen og 6-2 over Esbjerg SK i finalen, der blev afviklet i Silkeborg lørdag den 19. februar 1955, altså dagen inden DM-finalestævnet.

DM-turneringen blev afviklet på én dag, søndag den 20. februar 1955, hvor første kamp, Silkeborg – Rungsted, blev afviklet om formiddagen på Bolbroengen i Rungsted. Efter frokost fortsatte stævnet i København, hvor de to sidste opgør blev spillet på Peblingesøen.

Mesterskabet blev vundet af Rungsted IK, som i den afgørende kamp vandt 5-2 over KSF. Bronzemedaljerne gik til Silkeborg SF, som tabte begge sine kampe mod de sjællandske modstandere.

Resultater

Finalestævne

Spillere

Rungsted Ishockey Klubs mesterhold bestod af følgende spillere:
 Leif Johnsen (målmand)
 Svend Bagge
 Otto Holten Møller
 Einar Nielsen
 Ole Nielsen
 Poul Nielsen
 Aage Nielsen
 Ole Rasmussen
 Frede Sørensen
 Peter Toksvig

Kilder
 Michael Søvsø: Fra pionerånd til verdensklasse – Danmarks Ishockey Union i 60 år (2009)
 Tre kampe om DM i ishockey på søndag, Politiken, 18. februar 1955, s. 8.
 Rungsted første danmarksmester, Politiken, 21. februar 1955, s. 4.
  Metal Ligaen - RETRO: Ole scorede i den første DM-finale for 66 år siden (22. april 2021)

Noter

1954-55
Ishockey i 1955

redpajama_set_name: RedPajamaWikipedia


text: Register Views to be routed globally.

redpajama_set_name: RedPajamaGithub


Convert binary 1101111 to decimal.
QID : 52 - A can finish a work in 18 days and B in 36 days. If they work on it together for 9 days, then what percent of work is left?
QID : 53 - The diagonal of a square is 12 cm what is the length (in cm) of its side?
QID : 54 - If on a Sale there is 30% discount on the marked price of Rs 2500, but the sale is done at Rs 1400 only. What additional discount (in %) did the customer get?
QID : 55 - What is the third proportional to 10 and 25?
QID : 56 - In a class of 50 students there are 27 boys. The average weight of these boys is 72 Kg and average weight of the full class is 55.44 kgs. What is the average weight (in kgs) of the girls of the class?
QID : 57 - If a saree is sold for Rs 1900 the seller will face 5% loss, at what price (in Rs) should he sell the saree to gain 15% profit?
QID : 58 - Pranita got 30 marks more in Math than what she got in Science. Her Math marks are 60% of the sum of her Math and Science marks. What are her Science marks?
QID : 59 - To travel 432 km, an Express train takes 1 hour more than Duronto. If however, the speed of the Express train is increased by 50%, it takes 2 hours less than Duronto. What is the speed (in km/hr) of Duronto train?
QID : 60 - What is the difference (in Rs) between the compound interests on Rs. 4000 for 1 year at 12% per annum compounded yearly and half-yearly?
QID : 61 - If 7x - [3(2x - 3)]/2 = 1/2, then what is the value of x?
QID : 62 - If a + b = 4 and ab = 3, then what is the value of a3 + b3?
QID : 63 - The sum of a fraction and 7 times its reciprocal is 11/2. What is the fraction?
QID : 64 - The 3rd and 9th term of an arithmetic progression are -8 and 10 respectively. What is the 16th term?
QID : 65 - What is the reflection of the point (1 , 2) in the line y = 3?
QID : 66 - Point A (2, 1) divides segment BC in the ratio 2:3. Co-ordinates of B are (1, -3) and C are (4, y). What is the value of y?
QID : 67 - At what point does the line 2x + 5y = -6 cuts the X-axis?
QID : 68 - ΔABC is right angled at B. BD is an altitude. AD = 9 cm and DC = 16 cm. What is the value of BD (in cm)?
QID : 69 - What is the value of Tan 45° + 4/√3 Sec 60°?
QID : 70 - Δ DEF is right angled at E. If m ∠D = 30°. What is the length (in cm) of DE, if EF = 2√3 cm?
QID : 71 - If Sin θ = 20/29, then what is the value of Cos θ?
The company reported a loss in which year?
What is the cumulative profits (in lakh Rs) earned by the company in the given six years?
By what value profit in 2012 was more (in %) than the profit of 2011?
If the profits are added to the company's reserves and the reserves stood at Rs 150 lakhs at the end of 2015, what were the reserves (in Rs. lakhs) in the beginning of 2012?


text:
package com.hazelcast.core;

import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.MultiMapConfig;
import com.hazelcast.config.NearCacheConfig;
import com.hazelcast.util.Clock;
import com.hazelcast.impl.GroupProperties;
import org.junit.*;
import org.junit.runner.RunWith;

import java.io.Serializable;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import static org.junit.Assert.*;

/**
 * HazelcastTest tests general behavior for one node.
 * Node is created in the beginning of the tests and the same for all test methods.
 * <p/>
 * Unit test is whiteboard'n'fast.
 */
@RunWith(com.hazelcast.util.RandomBlockJUnit4ClassRunner.class)
public class HazelcastTest {

    @BeforeClass
    @AfterClass
    public static void init() throws Exception {
        System.setProperty(GroupProperties.PROP_VERSION_CHECK_ENABLED, "false");
        Hazelcast.shutdownAll();
    }

    @Test(timeout = 120000)
    public void testIssue445() {
        for (int i = 0; i < 12000; i++) {
            IMap map = Hazelcast.getMap("testIssue445" + i);
            for (int a = 0; a < 10; a++) {
                map.put(a, a);
            }
            map.destroy();
        }
    }

    @Test
    public void testIssue321_1() throws Exception {
        final IMap<Integer, Integer> imap = Hazelcast.getMap("testIssue321_1");
        final BlockingQueue<EntryEvent<Integer, Integer>> events1 = new LinkedBlockingQueue<EntryEvent<Integer, Integer>>();
        final BlockingQueue<EntryEvent<Integer, Integer>> events2 = new LinkedBlockingQueue<EntryEvent<Integer, Integer>>();
        imap.addEntryListener(new EntryAdapter<Integer, Integer>() {
            @Override
            public void entryAdded(EntryEvent<Integer, Integer> event) {
                events2.add(event);
            }
        }, false);
        imap.addEntryListener(new EntryAdapter<Integer, Integer>() {
            @Override
            public void entryAdded(EntryEvent<Integer, Integer> event) {
                events1.add(event);
            }
        }, true);
        imap.put(1, 1);
        final EntryEvent<Integer, Integer> event1 = events1.poll(10, TimeUnit.MILLISECONDS);
        final EntryEvent<Integer, Integer> event2 = events2.poll(10, TimeUnit.MILLISECONDS);
        assertNotNull(event1);
        assertNotNull(event2);
        assertNotNull(event1.getValue());
        assertNull(event2.getValue());
    }

    @Test
    public void testIssue321_2() throws Exception {
        final IMap<Integer, Integer> imap = Hazelcast.getMap("testIssue321_2");
        final BlockingQueue<EntryEvent<Integer, Integer>> events1 = new LinkedBlockingQueue<EntryEvent<Integer, Integer>>();
        final BlockingQueue<EntryEvent<Integer, Integer>> events2 = new LinkedBlockingQueue<EntryEvent<Integer, Integer>>();
        imap.addEntryListener(new EntryAdapter<Integer, Integer>() {
            @Override
            public void entryAdded(EntryEvent<Integer, Integer> event) {
                events1.add(event);
            }
        }, true);
        Thread.sleep(50L);
        imap.addEntryListener(new EntryAdapter<Integer, Integer>() {
            @Override
            public void entryAdded(EntryEvent<Integer, Integer> event) {
                events2.add(event);
            }
        }, false);
        imap.put(1, 1);
        final EntryEvent<Integer, Integer> event1 = events1.poll(10, TimeUnit.MILLISECONDS);
        final EntryEvent<Integer, Integer> event2 = events2.poll(10, TimeUnit.MILLISECONDS);
        assertNotNull(event1);
        assertNotNull(event2);
        assertNotNull(event1.getValue());
        assertNull(event2.getValue());
    }

    @Test
    public void testIssue321_3() throws Exception {
        final IMap<Integer, Integer> imap = Hazelcast.getMap("testIssue321_3");
        final BlockingQueue<EntryEvent<Integer, Integer>> events = new LinkedBlockingQueue<EntryEvent<Integer, Integer>>();
        final EntryAdapter<Integer, Integer> listener = new EntryAdapter<Integer, Integer>() {
            @Override
            public void entryAdded(EntryEvent<Integer, Integer> event) {
                events.add(event);
            }
        };
        imap.addEntryListener(listener, true);
        Thread.sleep(50L);
        imap.addEntryListener(listener, false);
        imap.put(1, 1);
        final EntryEvent<Integer, Integer> event1 = events.poll(10, TimeUnit.MILLISECONDS);
        final EntryEvent<Integer, Integer> event2 = events.poll(10, TimeUnit.MILLISECONDS);
        assertNotNull(event1);
        assertNotNull(event2);
        assertNotNull(event1.getValue());
        assertNull(event2.getValue());
    }

    @Test
    @Ignore
    public void testGetInstances() {
        /**@todo need to rethink this test so that it runs in isolation*/
        Hazelcast.getList("A");
        Hazelcast.getMap("A");
        Hazelcast.getMultiMap("A");
        Hazelcast.getQueue("A");
        Hazelcast.getSet("A");
        Hazelcast.getTopic("A");
        Collection<Instance> caches = Hazelcast.getInstances();
        assertEquals(6, caches.size());
    }

    @Test
    public void testGetCluster() {
        Cluster cluster = Hazelcast.getCluster();
        Set<Member> members = cluster.getMembers();
        //Tests are run with only one member in the cluster, this may change later
        assertEquals(1, members.size());
    }

    @Test
    public void testProxySerialization() {
        IMap mapProxy = Hazelcast.getMap("proxySerialization");
        ILock mapLock = Hazelcast.getLock(mapProxy);
        assertNotNull(mapLock);
    }

    @Test
    public void testMapGetName() {
        IMap<String, String> map = Hazelcast.getMap("testMapGetName");
        assertEquals("testMapGetName", map.getName());
    }

    @Test
    public void testMapValuesSize() {
        Map<String, String> map = Hazelcast.getMap("testMapValuesSize");
        map.put("Hello", "World");
        assertEquals(1, map.values().size());
    }

    @Test
    public void testIssue304() {
        IMap<String, String> map = Hazelcast.getMap("testIssue304");
        map.lock("1");
        assertEquals(0, map.size());
        assertEquals(0, map.entrySet().size());
        map.put("1", "value");
        assertEquals(1, map.size());
        assertEquals(1, map.entrySet().size());
        map.unlock("1");
        assertEquals(1, map.size());
        assertEquals(1, map.entrySet().size());
        map.remove("1");
        assertEquals(0, map.size());
        assertEquals(0, map.entrySet().size());
    }

    @Test
    public void testMapPutAndGet() {
        IMap<String, String> map = Hazelcast.getMap("testMapPutAndGet");
        String value = map.put("Hello", "World");
        assertEquals("World", map.get("Hello"));
        assertEquals(1, map.size());
        assertNull(value);
        value = map.put("Hello", "World");
        assertEquals("World", map.get("Hello"));
        assertEquals(1, map.size());
        assertEquals("World", value);
        value = map.put("Hello", "New World");
        assertEquals("World", value);
        assertEquals("New World", map.get("Hello"));
        assertEquals(1, map.size());
        MapEntry entry = map.getMapEntry("Hello");
        assertEquals("Hello", entry.getKey());
        assertEquals("New World", entry.getValue());
        map.set("1", "value", 1, TimeUnit.SECONDS);
    }

    @Test
    public void testAtomicLong() {
        AtomicNumber an = Hazelcast.getAtomicNumber("testAtomicLong");
        assertEquals(0, an.get());
        assertEquals(-1, an.decrementAndGet());
        assertEquals(0, an.incrementAndGet());
        assertEquals(1, an.incrementAndGet());
        assertEquals(2, an.incrementAndGet());
        assertEquals(1, an.decrementAndGet());
        assertEquals(1, an.getAndSet(23));
        assertEquals(28, an.addAndGet(5));
        assertEquals(28, an.get());
        assertEquals(28, an.getAndAdd(-3));
        assertEquals(24, an.decrementAndGet());
        Assert.assertFalse(an.compareAndSet(23, 50));
        assertTrue(an.compareAndSet(24, 50));
        assertTrue(an.compareAndSet(50, 0));
    }

    @Test
    public void testMapIsEmpty() {
        IMap<String, String> map = Hazelcast.getMap("testMapIsEmpty");
        assertTrue(map.isEmpty());
        map.put("Hello", "World");
        assertFalse(map.isEmpty());
    }

    @Test
    public void testLockKey() {
        IMap<String, String> map = Hazelcast.getMap("testLockKey");
        map.lock("Hello");
        try {
            assertFalse(map.containsKey("Hello"));
        } finally {
            map.unlock("Hello");
        }
        map.put("Hello", "World");
        map.lock("Hello");
        try {
            assertTrue(map.containsKey("Hello"));
        } finally {
            map.unlock("Hello");
        }
        map.remove("Hello");
        map.lock("Hello");
        try {
            assertFalse(map.containsKey("Hello"));
        } finally {
            map.unlock("Hello");
        }
    }

    @Test
    public void testMapReplaceIfSame() {
        IMap<String, String> map = Hazelcast.getMap("testMapReplaceIfSame");
        assertFalse(map.replace("Hello", "Java", "World"));
        String value = map.put("Hello", "World");
        assertEquals("World", map.get("Hello"));
        assertEquals(1, map.size());
        assertNull(value);
        assertFalse(map.replace("Hello", "Java", "NewWorld"));
        assertTrue(map.replace("Hello", "World", "NewWorld"));
        assertEquals("NewWorld", map.get("Hello"));
        assertEquals(1, map.size());
    }

    @Test
    public void testMapContainsKey() {
        IMap<String, String> map = Hazelcast.getMap("testMapContainsKey");
        map.put("Hello", "World");
        assertTrue(map.containsKey("Hello"));
    }

    @Test
    public void testMapContainsValue() {
        IMap<String, String> map = Hazelcast.getMap("testMapContainsValue");
        map.put("Hello", "World");
        assertTrue(map.containsValue("World"));
    }

    @Test
    public void testMapClear() {
        IMap<String, String> map = Hazelcast.getMap("testMapClear");
        String value = map.put("Hello", "World");
        assertEquals(null, value);
        map.clear();
        assertEquals(0, map.size());
        value = map.put("Hello", "World");
        assertEquals(null, value);
        assertEquals("World", map.get("Hello"));
        assertEquals(1, map.size());
        map.remove("Hello");
        assertEquals(0, map.size());
    }

    @Test
    public void testMapClearQuick() {
        Config config = Hazelcast.getDefaultInstance().getConfig();
        config.getMapConfig("testMapClear").setClearQuick(true);
        IMap<String, String> map = Hazelcast.getMap("testMapClearQuick");
        String value = map.put("Hello", "World");
        assertEquals(null, value);
        map.clear();
        assertEquals(0, map.size());
        value = map.put("Hello", "World");
        assertEquals(null, value);
        assertEquals("World", map.get("Hello"));
        assertEquals(1, map.size());
        map.remove("Hello");
        assertEquals(0, map.size());
    }

    @Test
    public void testMapRemove() {
        IMap<String, String> map = Hazelcast.getMap("testMapRemove");
        map.put("Hello", "World");
        assertEquals(1, map.size());
        assertEquals(1, map.keySet().size());
        map.remove("Hello");
        assertEquals(0, map.size());
        assertEquals(0, map.keySet().size());
        map.put("Hello", "World");
        assertEquals(1, map.size());
        assertEquals(1, map.keySet().size());
    }

    @Test
    public void testMapPutAll() {
        IMap<String, String> map = Hazelcast.getMap("testMapPutAll");
        Map<String, String> m = new HashMap<String, String>();
        m.put("Hello", "World");
        m.put("hazel", "cast");
        map.putAll(m);
        assertEquals(2, map.size());
        assertTrue(map.containsKey("Hello"));
        assertTrue(map.containsKey("hazel"));
    }

    @Test
    public void valuesToArray() {
        IMap<String, String> map = Hazelcast.getMap("valuesToArray");
        assertEquals(0, map.size());
        map.put("a", "1");
        map.put("b", "2");
        map.put("c", "3");
        assertEquals(3, map.size());
        {
            final Object[] values = map.values().toArray();
            Arrays.sort(values);
            assertArrayEquals(new Object[]{"1", "2", "3"}, values);
        }
        {
            final String[] values = map.values().toArray(new String[3]);
            Arrays.sort(values);
            assertArrayEquals(new String[]{"1", "2", "3"}, values);
        }
        {
            final String[] values = map.values().toArray(new String[2]);
            Arrays.sort(values);
            assertArrayEquals(new String[]{"1", "2", "3"}, values);
        }
        {
            final String[] values = map.values().toArray(new String[5]);
            Arrays.sort(values, 0, 3);
            assertArrayEquals(new String[]{"1", "2", "3", null, null}, values);
        }
    }

    @Test
    public void testMapEntrySet() {
        IMap<String, String> map = Hazelcast.getMap("testMapEntrySet");
        map.put("Hello", "World");
        Set<IMap.Entry<String, String>> set = map.entrySet();
        for (IMap.Entry<String, String> e : set) {
            assertEquals("Hello", e.getKey());
            assertEquals("World", e.getValue());
        }
    }

    @Test
    public void testMapEntrySetWhenRemoved() {
        IMap<String, String> map = Hazelcast.getMap("testMapEntrySetWhenRemoved");
        map.put("Hello", "World");
        map.remove("Hello");
        Set<IMap.Entry<String, String>> set = map.entrySet();
        for (IMap.Entry<String, String> e : set) {
            fail("Iterator should not contain removed entry, found " + e.getKey());
        }
    }

    @Test
    public void testMapEntryListener() {
        IMap<String, String> map = Hazelcast.getMap("testMapEntryListener");
        final CountDownLatch latchAdded = new CountDownLatch(1);
        final CountDownLatch latchRemoved = new CountDownLatch(1);
        final CountDownLatch latchUpdated = new CountDownLatch(1);
        map.addEntryListener(new EntryListener<String, String>() {
            public void entryAdded(EntryEvent event) {
                assertEquals("world", event.getValue());
                assertEquals("hello", event.getKey());
                latchAdded.countDown();
            }

            public void entryRemoved(EntryEvent event) {
                assertEquals("hello", event.getKey());
                assertEquals("new world", event.getValue());
                latchRemoved.countDown();
            }

            public void entryUpdated(EntryEvent event) {
                assertEquals("world", event.getOldValue());
                assertEquals("new world", event.getValue());
                assertEquals("hello", event.getKey());
                latchUpdated.countDown();
            }

            public void entryEvicted(EntryEvent event) {
                entryRemoved(event);
            }
        }, true);
        map.put("hello", "world");
        map.put("hello", "new world");
        map.remove("hello");
        try {
            assertTrue(latchAdded.await(5, TimeUnit.SECONDS));
            assertTrue(latchUpdated.await(5, TimeUnit.SECONDS));
            assertTrue(latchRemoved.await(5, TimeUnit.SECONDS));
        } catch (InterruptedException e) {
            e.printStackTrace();
            assertFalse(e.getMessage(), true);
        }
    }

    @Test
    public void testMultiMapEntryListener() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapEntryListener");
        final CountDownLatch latchAdded = new CountDownLatch(3);
        final CountDownLatch latchRemoved = new CountDownLatch(1);
        final Set<String> expectedValues = new CopyOnWriteArraySet<String>();
        expectedValues.add("hello");
        expectedValues.add("world");
        expectedValues.add("again");
        map.addEntryListener(new EntryListener<String, String>() {

            public void entryAdded(EntryEvent event) {
                String key = (String) event.getKey();
                String value = (String) event.getValue();
                if ("2".equals(key)) {
                    assertEquals("again", value);
                } else {
                    assertEquals("1", key);
                }
                assertTrue(expectedValues.contains(value));
                expectedValues.remove(value);
                latchAdded.countDown();
            }

            public void entryRemoved(EntryEvent event) {
                assertEquals("1", event.getKey());
                assertEquals(2, ((Collection) event.getValue()).size());
                latchRemoved.countDown();
            }

            public void entryUpdated(EntryEvent event) {
                throw new AssertionError("MultiMap cannot get update event!");
            }

            public void entryEvicted(EntryEvent event) {
                entryRemoved(event);
            }
        }, true);
        map.put("1", "hello");
        map.put("1", "world");
        map.put("2", "again");
        Collection<String> values = map.get("1");
        assertEquals(2, values.size());
        assertTrue(values.contains("hello"));
        assertTrue(values.contains("world"));
        assertEquals(1, map.get("2").size());
        assertEquals(3, map.size());
        map.remove("1");
        assertEquals(1, map.size());
        try {
            assertTrue(latchAdded.await(5, TimeUnit.SECONDS));
            assertTrue(latchRemoved.await(5, TimeUnit.SECONDS));
        } catch (InterruptedException e) {
            e.printStackTrace();
            assertFalse(e.getMessage(), true);
        }
    }

    @Test
    public void testMapEvict() {
        IMap<String, String> map = Hazelcast.getMap("testMapEvict");
        map.put("key", "value");
        assertEquals(true, map.containsKey("key"));
        assertTrue(map.evict("key"));
        assertEquals(false, map.containsKey("key"));
    }

    @Test
    public void testMapEvictAndListener() throws InterruptedException {
        IMap<String, String> map = Hazelcast.getMap("testMapEvictAndListener");
        String a = "/home/data/file1.dat";
        String b = "/home/data/file2.dat";
        List<String> list = new CopyOnWriteArrayList<String>();
        list.add(a);
        list.add(b);
        final List<String> newList = new CopyOnWriteArrayList<String>();
        final CountDownLatch latch = new CountDownLatch(list.size());
        map.addEntryListener(new EntryListener<String, String>() {
            public void entryAdded(EntryEvent<String, String> event) {
                System.out.println(event);
            }

            public void entryRemoved(EntryEvent<String, String> event) {
                System.out.println(event);
            }

            public void entryUpdated(EntryEvent<String, String> event) {
                System.out.println(event);
            }

            public void entryEvicted(EntryEvent<String, String> event) {
                System.out.println(event);
                newList.add(event.getValue());
                latch.countDown();
            }
        }, true);
        map.put("a", list.get(0), 1, TimeUnit.SECONDS);
        Thread.sleep(1100);
        map.put("a", list.get(1), 1, TimeUnit.SECONDS);
        assertTrue(latch.await(20, TimeUnit.SECONDS));
        assertEquals(list.get(0), newList.get(0));
        assertEquals(list.get(1), newList.get(1));
    }

    /**
     * Test for issue #181
     */
    @Test
    public void testMapKeyListenerWithRemoveAndUnlock() throws InterruptedException {
        IMap<String, String> map = Hazelcast.getMap("testMapKeyListenerWithRemoveAndUnlock");
        final String key = "key";
        final int count = 20;
        final CountDownLatch latch = new CountDownLatch(count * 2);
        map.addEntryListener(new EntryAdapter<String, String>() {
            public void entryAdded(final EntryEvent<String, String> e) {
                testEvent(e);
            }

            public void entryRemoved(final EntryEvent<String, String> e) {
                testEvent(e);
            }

            private void testEvent(final EntryEvent<String, String> e) {
                if (key.equals(e.getKey())) {
                    latch.countDown();
                } else {
                    fail("Invalid event: " + e);
                }
            }
        }, key, true);

        for (int i = 0; i < count; i++) {
            map.lock(key);
            map.put(key, "value");
            map.remove(key);
            map.unlock(key);
        }
        assertTrue("Listener events are missing! Remaining: " + latch.getCount(),
                latch.await(5, TimeUnit.SECONDS));
    }

    /**
     * Test for the issue 477.
     * Updates should also update the TTL
     *
     * @throws Exception
     */
    @Test
    public void testMapPutWithTTL() throws Exception {
        IMap<Integer, String> map = Hazelcast.getMap("testMapPutWithTTL");
        map.put(1, "value0", 100, TimeUnit.MILLISECONDS);
        assertEquals(true, map.containsKey(1));
        Thread.sleep(500);
        assertEquals(false, map.containsKey(1));
        map.put(1, "value1", 10, TimeUnit.SECONDS);
        assertEquals(true, map.containsKey(1));
        long ttl = map.getMapEntry(1).getExpirationTime() - Clock.currentTimeMillis();
        assertTrue("TTL is now " + ttl, ttl > 6000 && ttl < 11000);
        Thread.sleep(5000);
        assertEquals(true, map.containsKey(1));
        map.put(1, "value2", 10, TimeUnit.SECONDS);
        ttl = map.getMapEntry(1).getExpirationTime() - Clock.currentTimeMillis();
        assertTrue("TTL is now " + ttl, ttl > 6000 && ttl < 11000);
        Thread.sleep(5000);
        assertEquals(true, map.containsKey(1));
        map.put(1, "value3", 10, TimeUnit.SECONDS);
        ttl = map.getMapEntry(1).getExpirationTime() - Clock.currentTimeMillis();
        assertTrue("TTL is now " + ttl, ttl > 6000 && ttl < 11000);
        assertEquals(true, map.containsKey(1));
    }

    @Test
    public void testListAdd() {
        IList<String> list = Hazelcast.getList("testListAdd");
        list.add("Hello World");
        assertEquals(1, list.size());
        assertEquals("Hello World", list.iterator().next());
    }

    @Test
    public void testListContains() {
        IList<String> list = Hazelcast.getList("testListContains");
        list.add("Hello World");
        assertTrue(list.contains("Hello World"));
    }

    @Test
    public void testListIterator() {
        IList<String> list = Hazelcast.getList("testListIterator");
        list.add("Hello World");
        assertEquals("Hello World", list.iterator().next());
    }

    @Test
    public void testListIsEmpty() {
        IList<String> list = Hazelcast.getList("testListIsEmpty");
        assertTrue(list.isEmpty());
        list.add("Hello World");
        assertFalse(list.isEmpty());
    }

    @Test
    public void testListItemListener() {
        final CountDownLatch latch = new CountDownLatch(2);
        IList<String> list = Hazelcast.getList("testListListener");
        list.addItemListener(new ItemListener<String>() {
            public void itemAdded(ItemEvent<String> itemEvent) {
                assertEquals("hello", itemEvent.getItem());
                latch.countDown();
            }

            public void itemRemoved(ItemEvent<String> itemEvent) {
                assertEquals("hello", itemEvent.getItem());
                latch.countDown();
            }
        }, true);
        list.add("hello");
        list.remove("hello");
        try {
            assertTrue(latch.await(5, TimeUnit.SECONDS));
        } catch (InterruptedException ignored) {
        }
    }

    @Test
    public void testSetItemListener() {
        final CountDownLatch latch = new CountDownLatch(2);
        ISet<String> set = Hazelcast.getSet("testSetListener");
        set.addItemListener(new ItemListener<String>() {
            public void itemAdded(ItemEvent<String> itemEvent) {
                assertEquals("hello", itemEvent.getItem());
                latch.countDown();
            }

            public void itemRemoved(ItemEvent<String> itemEvent) {
                assertEquals("hello", itemEvent.getItem());
                latch.countDown();
            }
        }, true);
        set.add("hello");
        set.remove("hello");
        try {
            assertTrue(latch.await(5, TimeUnit.SECONDS));
        } catch (InterruptedException ignored) {
        }
    }

    @Test
    public void testQueueItemListener() throws InterruptedException {
        final CountDownLatch latch = new CountDownLatch(8);
        final String value = "hello";
        IQueue<String> queue = Hazelcast.getQueue("testQueueItemListener");
        queue.addItemListener(new ItemListener<String>() {
            public void itemAdded(ItemEvent<String> itemEvent) {
                assertEquals(value, itemEvent.getItem());
                latch.countDown();
            }

            public void itemRemoved(ItemEvent<String> itemEvent) {
                assertEquals(value, itemEvent.getItem());
                latch.countDown();
            }
        }, true);

        queue.offer(value);
        assertEquals(value, queue.poll());
        queue.offer(value);
        assertTrue(queue.remove(value));
        queue.add(value);
        assertEquals(value, queue.remove());
        queue.put(value);
        assertEquals(value, queue.take());

        assertTrue(latch.await(5, TimeUnit.SECONDS));
        assertTrue(queue.isEmpty());
    }

    @Test
    public void testSetAdd() {
        ISet<String> set = Hazelcast.getSet("testSetAdd");
        boolean added = set.add("HelloWorld");
        assertEquals(true, added);
        added = set.add("HelloWorld");
        assertFalse(added);
        assertEquals(1, set.size());
    }

    @Test
    public void testSetIterator() {
        ISet<String> set = Hazelcast.getSet("testSetIterator");
        boolean added = set.add("HelloWorld");
        assertTrue(added);
        assertEquals("HelloWorld", set.iterator().next());
    }

    @Test
    public void testSetContains() {
        ISet<String> set = Hazelcast.getSet("testSetContains");
        boolean added = set.add("HelloWorld");
        assertTrue(added);
        boolean contains = set.contains("HelloWorld");
        assertTrue(contains);
    }

    @Test
    public void testSetClear() {
        ISet<String> set = Hazelcast.getSet("testSetClear");
        boolean added = set.add("HelloWorld");
        assertTrue(added);
        set.clear();
        assertEquals(0, set.size());
    }

    @Test
    public void testSetRemove() {
        ISet<String> set = Hazelcast.getSet("testSetRemove");
        assertTrue(set.add("HelloWorld"));
        assertTrue(set.remove("HelloWorld"));
        assertEquals(0, set.size());
        assertTrue(set.add("HelloWorld"));
        assertFalse(set.add("HelloWorld"));
        assertEquals(1, set.size());
    }

    @Test
    public void testSetGetName() {
        ISet<String> set = Hazelcast.getSet("testSetGetName");
        assertEquals("testSetGetName", set.getName());
    }

    @Test
    public void testSetAddAll() {
        ISet<String> set = Hazelcast.getSet("testSetAddAll");
        String[] items = new String[]{"one", "two", "three", "four"};
        set.addAll(Arrays.asList(items));
        assertEquals(4, set.size());
        items = new String[]{"four", "five"};
        set.addAll(Arrays.asList(items));
        assertEquals(5, set.size());
    }

    @Test
    public void testTopicGetName() {
        ITopic<String> topic = Hazelcast.getTopic("testTopicGetName");
        assertEquals("testTopicGetName", topic.getName());
    }

    @Test
    public void testTopicPublish() {
        ITopic<String> topic = Hazelcast.getTopic("testTopicPublish");
        final CountDownLatch latch = new CountDownLatch(1);
        topic.addMessageListener(new MessageListener<String>() {
            public void onMessage(Message msg) {
                assertEquals("Hello World", msg.getMessageObject());
                latch.countDown();
            }
        });
        topic.publish("Hello World");
        try {
            assertTrue(latch.await(5, TimeUnit.SECONDS));
        } catch (InterruptedException ignored) {
        }
    }

    @Test
    public void testQueueAdd() {
        IQueue<String> queue = Hazelcast.getQueue("testQueueAdd");
        queue.add("Hello World");
        assertEquals(1, queue.size());
    }

    @Test
    public void testQueueTake() {
        IQueue<String> queue = Hazelcast.getQueue("testQueueTake");
        final Thread takeThread = Thread.currentThread();
        new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(3000);
                    takeThread.interrupt();
                } catch (InterruptedException e) {
                    fail();
                }
            }
        }).start();
        CountDownLatch latchException = new CountDownLatch(1);
        try {
            queue.take();
            fail();
        } catch (InterruptedException e) {
            latchException.countDown();
        } catch (RuntimeException e) {
            fail();
        }
        try {
            assertTrue(latchException.await(20, TimeUnit.SECONDS));
        } catch (InterruptedException e) {
            fail();
        }
    }

    @Test
    public void testQueueAddAll() {
        IQueue<String> queue = Hazelcast.getQueue("testQueueAddAll");
        String[] items = new String[]{"one", "two", "three", "four"};
        queue.addAll(Arrays.asList(items));
        assertEquals(4, queue.size());
        queue.addAll(Arrays.asList(items));
        assertEquals(8, queue.size());
    }

    @Test
    public void testQueueContains() {
        IQueue<String> queue = Hazelcast.getQueue("testQueueContains");
        String[] items = new String[]{"one", "two", "three", "four"};
        queue.addAll(Arrays.asList(items));
        assertTrue(queue.contains("one"));
        assertTrue(queue.contains("two"));
        assertTrue(queue.contains("three"));
        assertTrue(queue.contains("four"));
    }

    @Test
    public void testQueueContainsAll() {
        IQueue<String> queue = Hazelcast.getQueue("testQueueContainsAll");
        String[] items = new String[]{"one", "two", "three", "four"};
        List<String> list = Arrays.asList(items);
        queue.addAll(list);
        assertTrue(queue.containsAll(list));
    }

    @Test
    public void testQueueRemove() throws Exception {
        IQueue<String> q = Hazelcast.getQueue("testQueueRemove");
        for (int i = 0; i < 10; i++) {
            q.offer("item" + i);
        }
        for (int i = 0; i < 5; i++) {
            assertNotNull(q.poll());
        }
        assertEquals("item5", q.peek());
        boolean removed = q.remove("item5");
        assertTrue(removed);
        Iterator<String> it = q.iterator();
        it.next();
        it.remove();
        it = q.iterator();
        int i = 7;
        while (it.hasNext()) {
            String o = it.next();
            String expectedValue = "item" + (i++);
            assertEquals(o, expectedValue);
        }
        assertEquals(3, q.size());
    }

    @Test
    public void testMultiMapPutAndGet() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapPutAndGet");
        map.put("Hello", "World");
        Collection<String> values = map.get("Hello");
        assertEquals("World", values.iterator().next());
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        values = map.get("Hello");
        assertEquals(7, values.size());
        assertFalse(map.remove("Hello", "Unknown"));
        assertEquals(7, map.get("Hello").size());
        assertTrue(map.remove("Hello", "Antartica"));
        assertEquals(6, map.get("Hello").size());
    }

    @Test
    public void testMultiMapPutGetRemove() {
        MultiMap mm = Hazelcast.getMultiMap("testMultiMapPutGetRemove");
        mm.put("1", "C");
        mm.put("2", "x");
        mm.put("2", "y");
        mm.put("1", "A");
        mm.put("1", "B");
        Collection g1 = mm.get("1");
        assertTrue(g1.contains("A"));
        assertTrue(g1.contains("B"));
        assertTrue(g1.contains("C"));
        assertEquals(5, mm.size());
        assertTrue(mm.remove("1", "C"));
        assertEquals(4, mm.size());
        Collection g2 = mm.get("1");
        assertTrue(g2.contains("A"));
        assertTrue(g2.contains("B"));
        assertFalse(g2.contains("C"));
        Collection r1 = mm.remove("2");
        assertTrue(r1.contains("x"));
        assertTrue(r1.contains("y"));
        assertNotNull(mm.get("2"));
        assertTrue(mm.get("2").isEmpty());
        assertEquals(2, mm.size());
        Collection r2 = mm.remove("1");
        assertTrue(r2.contains("A"));
        assertTrue(r2.contains("B"));
        assertNotNull(mm.get("1"));
        assertTrue(mm.get("1").isEmpty());
        assertEquals(0, mm.size());
    }

    @Test
    public void testMultiMapGetNameAndType() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapGetNameAndType");
        assertEquals("testMultiMapGetNameAndType", map.getName());
        Instance.InstanceType type = map.getInstanceType();
        assertEquals(Instance.InstanceType.MULTIMAP, type);
    }

    @Test
    public void testMultiMapClear() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapClear");
        map.put("Hello", "World");
        assertEquals(1, map.size());
        map.clear();
        assertEquals(0, map.size());
    }

    @Test
    public void testMultiMapContainsKey() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapContainsKey");
        map.put("Hello", "World");
        assertTrue(map.containsKey("Hello"));
    }

    @Test
    public void testMultiMapContainsValue() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapContainsValue");
        map.put("Hello", "World");
        assertTrue(map.containsValue("World"));
    }

    @Test
    public void testMultiMapContainsEntry() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapContainsEntry");
        map.put("Hello", "World");
        assertTrue(map.containsEntry("Hello", "World"));
    }

    static class CustomSerializable implements Serializable {
        private long dummy1 = Clock.currentTimeMillis();
        private String dummy2 = String.valueOf(dummy1);
    }

    @Test
    /**
     * Issue 818
     */
    public void testMultiMapWithCustomSerializable() {
        MultiMap map = Hazelcast.getMultiMap("testMultiMapWithCustomSerializable");
        map.put("1", new CustomSerializable());
        assertEquals(1, map.size());
        map.remove("1");
        assertEquals(0, map.size());
    }

    @Test
    public void testContains() throws Exception {
        IMap<String, ComplexValue> map = Hazelcast.getMap("testContains");
        MultiMap<String, ComplexValue> multiMap = Hazelcast.getMultiMap("testContains");
        assertNull(map.put("1", new ComplexValue("text", 1)));
        assertTrue(map.containsValue(new ComplexValue("text", 2)));
        assertFalse(map.replace("1", new ComplexValue("text1", 1), new ComplexValue("text3", 5)));
        ComplexValue v = map.get("1");
        assertTrue(v.name.equals("text"));
        assertTrue(v.time == 1);
        assertTrue(map.replace("1", new ComplexValue("text", 2), new ComplexValue("text2", 5)));
        v = map.get("1");
        assertTrue(v.name.equals("text2"));
        assertTrue(v.time == 5);
        assertFalse(map.remove("1", new ComplexValue("text1", 5)));
        v = map.get("1");
        assertTrue(v.name.equals("text2"));
        assertTrue(v.time == 5);
        assertTrue(map.remove("1", new ComplexValue("text2", 6)));
        assertNull(map.get("1"));
        // Now MultiMap
        assertTrue(multiMap.put("1", new ComplexValue("text", 1)));
        assertFalse(multiMap.put("1", new ComplexValue("text", 1)));
        assertFalse(multiMap.put("1", new ComplexValue("text", 2)));
        assertTrue(multiMap.containsValue(new ComplexValue("text", 1)));
        assertTrue(multiMap.containsValue(new ComplexValue("text", 2)));
        assertTrue(multiMap.remove("1", new ComplexValue("text", 3)));
        assertFalse(multiMap.remove("1", new ComplexValue("text", 1)));
        assertTrue(multiMap.put("1", new ComplexValue("text", 1)));
        assertTrue(multiMap.containsEntry("1", new ComplexValue("text", 1)));
        assertTrue(multiMap.containsEntry("1", new ComplexValue("text", 2)));
        assertTrue(multiMap.remove("1", new ComplexValue("text", 1)));
        //Now MultiMap List
        MultiMapConfig multiMapConfigList = new MultiMapConfig();
        multiMapConfigList.setName("testContains.list");
        multiMapConfigList.setValueCollectionType("LIST");
        Hazelcast.getConfig().addMultiMapConfig(multiMapConfigList);
        MultiMap<String, ComplexValue> mmList = Hazelcast.getMultiMap("testContains.list");
        assertTrue(mmList.put("1", new ComplexValue("text", 1)));
        assertTrue(mmList.put("1", new ComplexValue("text", 1)));
        assertTrue(mmList.put("1", new ComplexValue("text", 2)));
        assertEquals(3, mmList.size());
        assertTrue(mmList.remove("1", new ComplexValue("text", 4)));
        assertEquals(2, mmList.size());
    }

    @Test
    public void testMultiMapKeySet() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapKeySet");
        map.put("Hello", "World");
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        Set<String> keys = map.keySet();
        assertEquals(1, keys.size());
    }

    @Test
    public void testMultiMapValues() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapValues");
        map.put("Hello", "World");
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        Collection<String> values = map.values();
        assertEquals(7, values.size());
    }

    @Test
    public void testMultiMapRemove() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapRemove");
        map.put("Hello", "World");
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        assertEquals(7, map.size());
        assertEquals(1, map.keySet().size());
        Collection<String> values = map.remove("Hello");
        assertEquals(7, values.size());
        assertEquals(0, map.size());
        assertEquals(0, map.keySet().size());
        map.put("Hello", "World");
        assertEquals(1, map.size());
        assertEquals(1, map.keySet().size());
    }

    @Test
    public void testMultiMapRemoveEntries() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapRemoveEntries");
        map.put("Hello", "World");
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        boolean removed = map.remove("Hello", "World");
        assertTrue(removed);
        assertEquals(6, map.size());
    }

    @Test
    public void testMultiMapEntrySet() {
        MultiMap<String, String> map = Hazelcast.getMultiMap("testMultiMapEntrySet");
        map.put("Hello", "World");
        map.put("Hello", "Europe");
        map.put("Hello", "America");
        map.put("Hello", "Asia");
        map.put("Hello", "Africa");
        map.put("Hello", "Antartica");
        map.put("Hello", "Australia");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        assertEquals(7, entries.size());
        int itCount = 0;
        for (Map.Entry<String, String> entry : entries) {
            assertEquals("Hello", entry.getKey());
            itCount++;
        }
        assertEquals(7, itCount);
    }

    @Test
    public void testMultiMapValueCount() {
        MultiMap<Integer, String> map = Hazelcast.getMultiMap("testMultiMapValueCount");
        map.put(1, "World");
        map.put(2, "Africa");
        map.put(1, "America");
        map.put(2, "Antartica");
        map.put(1, "Asia");
        map.put(1, "Europe");
        map.put(2, "Australia");
        assertEquals(4, map.valueCount(1));
        assertEquals(3, map.valueCount(2));
    }

    @Test
    public void testIdGenerator() {
        IdGenerator id = Hazelcast.getIdGenerator("testIdGenerator");
        assertEquals(1, id.newId());
        assertEquals(2, id.newId());
        assertEquals("testIdGenerator", id.getName());
    }

    @Test
    public void testLock() {
        ILock lock = Hazelcast.getLock("testLock");
        assertTrue(lock.tryLock());
        lock.unlock();
    }

    @Test
    public void testGetMapEntryHits() {
        IMap<String, String> map = Hazelcast.getMap("testGetMapEntryHits");
        map.put("Hello", "World");
        MapEntry me = map.getMapEntry("Hello");
        assertEquals(0, me.getHits());
        map.get("Hello");
        map.get("Hello");
        map.get("Hello");
        me = map.getMapEntry("Hello");
        assertEquals(3, me.getHits());
    }

    @Test
    public void testGetMapEntryVersion() {
        IMap<String, String> map = Hazelcast.getMap("testGetMapEntryVersion");
        map.put("Hello", "World");
        MapEntry me = map.getMapEntry("Hello");
        assertEquals(0, me.getVersion());
        map.put("Hello", "1");
        map.put("Hello", "2");
        map.put("Hello", "3");
        me = map.getMapEntry("Hello");
        assertEquals(3, me.getVersion());
    }

    @Test
    public void testMapInstanceDestroy() throws Exception {
        IMap<String, String> map = Hazelcast.getMap("testMapDestroy");
        Thread.sleep(1000);
        Collection<Instance> instances = Hazelcast.getInstances();
        boolean found = false;
        for (Instance instance : instances) {
            if (instance.getInstanceType().isMap()) {
                IMap imap = (IMap) instance;
                if (imap.getName().equals("testMapDestroy")) {
                    found = true;
                }
            }
        }
        assertTrue(found);
        map.destroy();
        Thread.sleep(1000);
        found = false;
        instances = Hazelcast.getInstances();
        for (Instance instance : instances) {
            if (instance.getInstanceType().isMap()) {
                IMap imap = (IMap) instance;
                if (imap.getName().equals("testMapDestroy")) {
                    found = true;
                }
            }
        }
        assertFalse(found);
    }

    @Test
    public void testInterruption() throws InterruptedException {
        final IQueue<String> q = Hazelcast.getQueue("testInterruption");
        final CountDownLatch latch = new CountDownLatch(1);
        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    q.take();
                    fail();
                } catch (InterruptedException e) {
                    latch.countDown();
                }
            }
        });
        t.start();
        Thread.sleep(2000);
        t.interrupt();
        assertTrue(latch.await(10, TimeUnit.SECONDS));
        q.offer("message");
        assertEquals(1, q.size());
    }

    @Test
    public void testMapPutOverCapacity() throws InterruptedException {
        final int capacity = 100;
        Config config = Hazelcast.getDefaultInstance().getConfig();
        config.getMapConfig("testMapPutOverCapacity").getMaxSizeConfig().setSize(capacity);
        final IMap map = Hazelcast.getMap("testMapPutOverCapacity");
        for (int i = 0; i < capacity; i++) {
            map.put(i, i);
        }

        final int blockingOpCount = 4; // put, set, putAndUnlock, putIfAbsent
        // putTransient is excluded because it is used during initial map loading.
        final CountDownLatch latch = new CountDownLatch(2 * blockingOpCount);
        ExecutorService ex = Executors.newCachedThreadPool();
        ex.execute(new Runnable() {
            public void run() {
                latch.countDown();
                map.put("a", "a");
                latch.countDown();
            }
        });
        ex.execute(new Runnable() {
            public void run() {
                latch.countDown();
                map.set("b", "b", 1000, TimeUnit.SECONDS);
                latch.countDown();
            }
        });
        ex.execute(new Runnable() {
            public void run() {
                latch.countDown();
                map.lock("c");
                map.putAndUnlock("c", "c");
                latch.countDown();
            }
        });
        ex.execute(new Runnable() {
            public void run() {
                latch.countDown();
                map.putIfAbsent("d", "d");
                latch.countDown();
            }
        });

        Thread.sleep(5000);
        assertEquals(blockingOpCount, latch.getCount());
        for (int i = 0; i < blockingOpCount; i++) {
            map.remove(i);
        }
        assertTrue(latch.await(1, TimeUnit.SECONDS));
        ex.shutdown();

        assertEquals(capacity, map.size());
        assertFalse(map.tryPut("e", "e", 0, TimeUnit.SECONDS));
        assertEquals(capacity, map.size());

        assertEquals("a", map.replace("a", "x"));
        assertTrue(map.replace("b", "b", "z"));
        assertEquals(capacity, map.size());
    }

    @Test
    public void testMapGetAfterPutWhenCacheValueEnabled() throws InterruptedException {
        Config config = Hazelcast.getDefaultInstance().getConfig();
        config.getMapConfig("testMapGetAfterPutWhenCacheValueEnabled").setCacheValue(true);
        final IMap map = Hazelcast.getMap("testMapGetAfterPutWhenCacheValueEnabled");
        final AtomicBoolean running = new AtomicBoolean(true);
        final String key = "key";
        ExecutorService ex = Executors.newSingleThreadExecutor();
        ex.execute(new Runnable() {
            public void run() {
                while (running.get()) {
                    // continuously get to trigger value caching
                    map.get(key);
                }
            }
        });

        try {
            for (int i = 0; i < 50000; i++) {
                map.put(key, Integer.valueOf(i));
                final Integer value = (Integer) map.get(key);
                assertEquals(i, value.intValue());
            }
        } finally {
            running.set(false);
            ex.shutdown();
            ex.awaitTermination(2, TimeUnit.SECONDS);
        }
    }

    @Test(expected = IllegalStateException.class)
    public void testPutAndUnlockWhenOwnerOfLockIsDifferent() throws InterruptedException {
        final IMap map = Hazelcast.getMap("testPutAndUnlockWhenOwnerOfLockIsDifferent");
        Thread t1 = new Thread() {
            public void run() {
                map.lock(1L);
                try {
                    sleep(2000);
                } catch (InterruptedException e) {
                }
                map.unlock(1L);
            }
        };
        t1.start();
        Thread.sleep(500);
        map.putAndUnlock(1L, 1);
        fail("Should not succeed putAndUnlock!");
    }

    /*
        github issue 174
     */
    @Test
    public void testIssue174NearCacheContainsKeySingleNode() {
        Config config = new Config();
        config.getGroupConfig().setName("testIssue174NearCacheContainsKeySingleNode");
        NearCacheConfig nearCacheConfig = new NearCacheConfig();
        config.getMapConfig("default").setNearCacheConfig(nearCacheConfig);
        HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
        IMap<String, String> map = h.getMap("testIssue174NearCacheContainsKeySingleNode");
        map.put("key", "value");
        assertTrue(map.containsKey("key"));
        h.getLifecycleService().shutdown();
    }

    /*
        github issue 304
     */
    @Test
    public void testIssue304EvictionDespitePut() throws InterruptedException {
        Config c = new Config();
        c.getGroupConfig().setName("testIssue304EvictionDespitePut");
        final HashMap<String, MapConfig> mapConfigs = new HashMap<String, MapConfig>();
        final MapConfig value = new MapConfig();
        value.setMaxIdleSeconds(3);
        mapConfigs.put("default", value);
        c.setMapConfigs(mapConfigs);
        final Properties properties = new Properties();
        properties.setProperty("hazelcast.map.cleanup.delay.seconds", "1"); // we need faster cleanups
        c.setProperties(properties);
        final HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(c);

        IMap<String, Long> map = hazelcastInstance.getMap("testIssue304EvictionDespitePutMap");
        final AtomicInteger evictCount = new AtomicInteger(0);
        map.addEntryListener(new EntryListener<String, Long>() {
            public void entryAdded(EntryEvent<String, Long> event) {
            }

            public void entryRemoved(EntryEvent<String, Long> event) {
            }

            public void entryUpdated(EntryEvent<String, Long> event) {
            }

            public void entryEvicted(EntryEvent<String, Long> event) {
                evictCount.incrementAndGet();
            }
        }, true);

        String key = "key";
        for (int i = 0; i < 5; i++) {
            map.put(key, System.currentTimeMillis());
            Thread.sleep(1000);
        }
        assertEquals(evictCount.get(), 0);
        assertNotNull(map.get(key));
        hazelcastInstance.getLifecycleService().shutdown();
    }
}


I just got a 3 day suspension on Facebook group page.
The only sensible thing Hess has ever done.
As opposed to a looney narcissist that drives around under the influence of God knows what singing along to Jefferson Airplane.
Mr. Hess announced about a year or so here that he was seriously ill and didn't expect beat his illness. I think he started a crowd-source thing. I offered my sympathies at the time. I think he posted one or twice more, but I haven't seen him here since.
I see that it's up for resale, which could indicate that Mr. Hess may have passed away.
Brian, you need help. I hope you get it quickly.
I am still waiting for the evidence that convinced you that no conspiracy took place in the JFK assassination.
It's Hess' site. That says it all.


Saudi Aramco's deal for a stake in Sabic came just one day after Uber Technologies Inc agreed to buy Dubai-based rival Careem Networks for $3.1 billion in the region's largest technology transaction.
In a matter of days, the Middle East has turned the tables on global M&A.
Acquisitions involving targets in the Middle East and Africa are up more than six-fold this year to $103.4 billion, according to data compiled by Bloomberg.
That's inching closer to acquisitions of European companies, which are down 50 percent to $114.7 billion, the data shows.
Saudi Aramco, the world's biggest oil producer, on Wednesday agreed to buy a majority stake in chemical giant Saudi Basic Industries Corp for $69.1 billion, marking the Middle East's biggest deal.
It came just one day after Uber Technologies Inc agreed to buy Dubai-based rival Careem Networks for $3.1 billion in the region's largest technology transaction.
The Middle East - not traditionally known for its M&A track record - is outshining other regions as weak commodity prices force oil-rich Gulf states to take radical steps to stay competitive and spur growth. Banks are leading the consolidation drive.
Three of Abu Dhabi's biggest banks are in the process of merging after the emirate combined two banks to create the Middle East's second-largest lender in 2017.
In Saudi Arabia, HSBC Holdings' local unit is acquiring Royal Bank of Scotland Group's local venture, while National Commercial Bank, the kingdom's biggest lender, started merger talks with Riyad Bank late last year. Combinations are also underway between banks in Kuwait and Oman.
Foreign investors are also joining the merger wave. Eni and OMV are paying about $5.8 billion for a combined 35 percent stake in Abu Dhabi National Oil Co's refining unit, while KKR & Co and BlackRock Inc are investing $4 billion in the emirate's oil pipelines.
With subdued credit growth, deteriorating asset quality and higher funding costs showing no signs of abating, more deals are likely to follow.


Europe may be mired in a recession and austerity but the continent's biggest soccer clubs (football clubs to those in Europe) are continuing to look recession-proof. Combined income among the top 10 clubs in 2011-2012 rose 10 percent on last year to 4.8 billion euros ($6.5 billion), according to a new report from business advisory firm Deloitte.
Deloitte calculates the total revenue of each club through a combination of match day income, broadcasting and commercial deals. The top six clubs remained the same for the fifth consecutive year, while only one new side broke into the list. English clubs continue to dominate, with teams in the English Premier League comprising seven of the top twenty.
The rankings are based on revenue for the 2011-2012 season in euros. We've converted the figures into dollars based on the current exchange rate.
So which clubs made the top ten? Click ahead to find out.


I am surprised by how many people actually own guns but never understand the need for proper preservation and storage. Remember, one does not use something like a gun every day, so it can get jammed if you don't take care of it and store it in a dry location. Shared here are a few tips on efficient and effective gun storage and preservation.
Never ever keep a gun loaded when you have it at your home. Load it only when you are ready to or need to use it. This obviously applies to all firearms. A loaded gun can corrode from the inside, with the firing mechanism locking in place. This will eventually lead to a backfire, not something you would want.
Always keep your gun secure and safe in a gun safe. I don't advise on using lock and key, a cabinet and other such ornamental solutions. While they look nice, they aren't particularly secure. A gun safe ensures that your collection never falls in the wrong hands.
Keeping your gun in a safe or under lock and key is one aspect of gun storage; another thing is to ensure that it is burglar proof and linked to an alarm. This is especially important if you are an arm's collector and have more than one firearm or possess a few rare artifacts.
But storing a gun is only half the solution. Preservation is the other requirement. Here are a few preservation tips.
Make sure that the location you choose for your guns is dry and at a good temperature. If you are dealing with antique guns, this is of vital importance. Also, use gloves at all times when handling your guns.
To keep the gun in a good and running condition, clean it often with cotton swab and avoid any strong cleansing material. Moreover, take it to an authorised dealer for proper servicing periodically.
Always store large guns upright and fully supported. Never lean the barrels against the safe's wall as wood tends to curl over time.
You get desiccant bags to store guns in. These are great for long duration storage, especially if you don't plan on firing them for long. Alternatively, you can store guns in a sack with a few silica gels.
There are many ways to ensure that your gun is safely stored and preserved for long. However, it is important to pay attention to basics especially if you have kids around the house. Most pros tend to understand the need for constant cleaning, supervision and test firing. But if you are new to gun ownership then learn how to take care of your firearms before investing in such a responsibility. Make no mistake, a firearm is a huge responsibility and prevention, safety and awareness are the steps towards becoming a responsible and aware gun owner.
"Never keep your gun or firearm loaded" I think many of our nations top firearms training academies like Gunsite, Thunder Ranch, LFI, etc. would disagree with you on this, as do I. A personal defense firearm is useless unloaded, and the time it takes you to load that firearm under stress could mean the difference between living or dying.