Since 1955, in a picturesque setting on the Oregon Coast, on the south end of the "Worlds Smallest Harbor", Depoe Bay hosts an "Indian Style Salmon Bake". Enjoy a succulent salmon meal, great performances and live music.
Over 2,000 pounds of salmon is slow roasted to perfection on alder stakes, just as the Native Americans did 2,000 years ago.
Watch as Native Americans perform their traditional dance and song. There will also be entertainment for children and a variety of vendors.


text:
Q: How to catch errors in elua (namely NodeMCU) Let's say I'm importing something with:
t = require("ds18b20")
t.setup(1)
temperatura = t.read()

How do I catch an error like "Failed import"?
Doing stuff like pcall(t.setup(1)) just returns a syntax error.

A: If the error is raised by require not finding ds18b20, then you can do
ok, t = pcall(require, "ds18b20")
if not ok then
  -- handle error, t has error message
else
  -- can use t
end

redpajama_set_name: RedPajamaStackExchange


Fans swamp the victorious U's after having beaten Boreham Wood 4-3 on penalties.
Joff Vansittart and John Ugbah.
game of the season against Basingstoke.
Andy Riley holds aloft the Cup, partially obscured by Nassim Akrour, 15 is Francis Vines.
John Rains celebrates the completion of a league and cup 'double' with his victorious U's side.
United, 2-1 winners over Kingstonian, pose for a group photo with the Surrey Senior Cup.
The League Champions pose with the trophies. More photos here.
The League Champions raise the trophy. More photos here.


Are you looking for a summer job that you will remember the rest of your life? YMCA Camp Abe Lincoln has the job for you. We hire 30+ counselors each year to come work all summer long. You will receive a weekly stipened depending on your experience and with your food and lodging paid for through camp, all that money is yours to save. Counselors have been coming to camp to work for decades. Not only will you have an experience that you will remember forever, but you will also make friends that will be friends for the rest of your life. As a counselor, you become part of the Camp Abe Lincoln family. Some of our counselors return year after year.
You will get the rewarding experience of working with kids on a daily basis. Being a role model to a child is the most extrodinary experience you wil have. Not only that, but you will also get the chance to ride horses, climb our 50 foot Alpine Tower, ride in canoes and kayaks and much more. Come work with us and you will have a job that will feel more like playing than working.
To apply contact YMCA Camp Abe Lincoln either through email, call us at (563) 381-3053 or apply online. Hurry, their are only a limited spots available and we are already filling them. Counselor positions start May 30th and continue on through August 18th.
Why YOU should work at Camp Abe Lincoln!
YEAR ROUND! Camp Activity Assistant: Work with rental groups that come to Camp throughout the year, and be responsible for leading Camp activities and hosting the group.
Summer Camp Counselor: Work with kids who stay overnight or those that come for day camp. If you work with our overnight camp program, you will be required to live on site. Room and board provided!
Outreach Counselor: Lead Camp programs and work with kids who come in through our outside programs with other cities and organizations.
Wrangler Staff: Work with our horses on a daily basis and teach kids how to ride and train horses.
Camp Medic: Stay at camp all summer and give campers their daily meds, as well as provide any first aid that may be needed. This is a great opportunity for people looking to work in the medical/health profession.
Internships: If you are looking for a college internship to fill, talk to us as there may be something available in your field.
Assistant Cook: Stay at camp all summer and help prepare food for all of camp.
Or fill out a paper application and turn it in to Nick at Camp Abe Lincoln!


text:
Quality of service improves as airports collect substantially more money per passenger
The Australian Competition and Consumer Commission's annual Airport Monitoring Report has found that Sydney, Melbourne, Perth, and Brisbane airports all received an overall weighted rating of 'good' for their quality of service in 2015-16.
The report, Airport monitoring report 2015-16, found that both Brisbane and Perth airports were rated equal highest of the monitored airports within the 'good' category. These overall ratings are drawn from survey results (both airlines and passengers) and objective indicators.
"It is encouraging to see that all four airports made it into the "good" category for overall quality of service ratings this year, in addition to a second straight year of notable improvement by Perth Airport," ACCC Chairman Rod Sims said.
"However, there is still room for the airports to better satisfy both passengers and airlines."
The report also found that the airports are collecting substantially more aeronautical revenue per passenger than a decade ago. The higher average aeronautical charges have been used to both cover increasing costs per passenger and to grow profit margins.
"The ACCC estimates that over the past decade, these airports have collected $1.57 billion more in revenue from airlines than they would otherwise have collected if average prices were held constant in real terms," Mr Sims said.
"Despite these much higher revenues per passenger, ratings of service quality are not materially different from those seen a decade ago."
Car parking profit margins also continue to remain high with Sydney airport recording a car parking profit margin of 73.1 cents per dollar of revenue.
"The returns that the airports get on car parking show that they do not face significant competitive constraints when setting prices," Mr Sims said.
However, the ACCC found that more consumers are taking advantage of substantial discounts when booking online for car parking, particularly for long-term parking.
"Booking online can deliver the best value car parking deals. In comparison, those who do not pre-book must pay drive-up prices which can be double that of online prices," Mr Sims said.
The report also found that a combination of higher access charges and passenger growth had grown airport revenues from landside operators such as taxis, buses and off-airport carpark operators.
"Airports set the terms and prices to landside areas. This means that they are in a position to impede competition to on-airport car parking by increasing access costs for alternatives such as off-airport car park operators", Mr Sims said.
Strong international passenger numbers drove overall airport passenger growth by 3.4 per cent. More than a third of the growth in international visitors was due to passenger growth from China.
Proposed Western Sydney Airport
The report also noted developments associated with the proposed Western Sydney Airport. The Sydney Airport ownership group is currently considering whether it will take up the right to build and operate the proposed airport. Should the ownership group decline the government's terms and conditions, the government can offer the opportunity to other private companies.
"A second international airport competing with Sydney Airport will yield significant benefits to both consumers and airlines," Mr Sims said.
"On the other hand, a common owner of the two airports would have an incentive to restrict investment and delay the new airport in order to maximise returns from its existing assets."
"If Sydney Airport does not build and operate the new airport, the Government can build the airport and sell the assets once it is already established."
The 2015-16 report, data tables and an infographic illustrating the key statistical findings can be found on the ACCC website.
Revenue per passenger is a useful proxy measure of average prices. Since 2006-07:
Brisbane Airport has increased aeronautical revenue per passenger by 65.6 per cent in real terms.
Perth Airport has increased aeronautical revenue per passenger by 42.9 per cent in real terms
Melbourne Airport has increased aeronautical revenue per passenger by 30.9 per cent in real terms
Sydney Airport has increased aeronautical revenue per passenger by 16.0 per cent in real terms.
While revenue per passenger at Sydney Airport grew more slowly over this time, it has remained the highest of the airports at $17.27. These price increases over the past decade have resulted in significant additional payments by airlines.
Aeronautical activities remain very profitable for the airports in 2015-16. While aeronautical profit margins decreased at three of the monitored airports, the profit earned from a dollar of aeronautical revenue during 2015-16 ranged from a low of 33.5 cents at Perth Airport to a high of 46.7 at Sydney Airport. Profit is calculated using earnings before interest, tax and amortisation (EBITA).
Car parking profit margins also continue to remain high.
Sydney Airport car parking profit margin is 73.1 per cent
Brisbane Airport car parking profit margin is 66.1 per cent
Melbourne Airport car parking profit margin is 59.0 per cent
Perth Airport car parking profit margin is 55.6 per cent.
The report is available here: Airport monitoring report 2015-16
The Australian government has directed the ACCC to monitor the performance of the four largest airports until 2020. It is required to monitor both aeronautical and car parking activities. It is required to consider prices, profits and quality of service.
The ACCC derives its quality of service information from responses to surveys of passengers, airlines and landside operators (such as off‑airport car parking operators, buses and taxis), as well as from objective data from the monitored airports. The 'overall average quality of service' measure is calculated as an average of these ratings (excluding responses from landside operators).
Comparisons between airports should be treated with caution because results can be affected by factors such as different terminal configurations, passenger mix, and different approaches to valuing assets.
The ACCC's monitoring role does not involve the economic regulation of monitored airports or any power to intervene in the airports' setting of terms and conditions of access to infrastructure.
The ACCC's monitoring role for aeronautical services relates only to those terminals that are owned and operated by the airports. Some domestic terminals at the monitored airports are leased to and operated by domestic airlines and these terminals are not subject to the ACCC's monitoring. Such terminals include the Qantas domestic terminals at Melbourne and Perth, as well as the Qantas and Virgin Australia domestic terminals at Brisbane Airport.
Supporting Charts
Airport monitoring report 2015-16 – Infographic
Release number:
MR 21/17
ACCC Infocentre:
Use this form to make a general enquiry.
Receive email updates on:
Required fields indicated by: *

redpajama_set_name: RedPajamaCommonCrawl


text:
"A New Era of Observational Astronomy"
by Heather Hastie | Jun 4, 2016 | Housekeeping | 4 comments
Those of you who are on Facebook and 'Like' the Heather's Homilies Facebook page will know I post the regular updates or ESO Casts from the European Southern Observatory (ESO) there, usually after Amy Carparelli has reminded me they're available by posting them on Twitter.
Their latest episode is about a new reflecting telescope they've just contracted to be built near the current one. The new one will be known as the E-ELT, or European Extremely Large Telescope. It will be the biggest telescope ever in the world and enable even sharper images at a greater distance to be observed than ever before.
This telescope will enable more work to be done on studying planets surrounding distant stars and the conditions on them, the collapse of black holes, more about the origins and future of the universe, and much more.
Diane G. on 4th June 2016 at 5:13 pm
Far out! 😉
Very cool vid. It's so heartening to know that some humans are still compelled to take those next steps, seek further knowledge, conceive of and execute these fantastic feats of engineering, examine the universe! What a refreshing change from the political world.
That Atacama Desert is pretty striking as well! I'm going to have to look into what sorts of life manage to survive there…
Heather Hastie on 5th June 2016 at 10:59 am
That's what I like about it too Diane – despite all the awful things going on, here's an example of people cooperating for the future of mankind and purely for knowledge.
Ken on 6th June 2016 at 10:17 pm
Can't wait to see these images.
Heather Hastie on 7th June 2016 at 12:06 pm
Me too. The ones from them and Hubble are so amazing – to think we could be getting something even better is thrilling.


It's almost time to cut my hair short again. It's tricky to have short hair cut when you have a flat head and a round face like me. But I think I found the cut I want!
Ginnifer Goodwin has a roundish face and round eyes. I can probably pull this off, me think.
How pretty they are! I just wish I can do as good a job as these people. Well lucky my cousin is not going to read this so I can say it out loud.
I don't know what got to me this year. But it's like discovering art for the first time in my life, I picked up a paint brush and started experimenting with painting, drawing, collage, and needle felting. I was surprised by how easy it is to paint during my first painting lesson 15 years. With nobody judging or giving me marks, I created a couple of not too bad first pieces on canvases and papers. I also picked up the wool felt that I bought in China a few years ago and started making things with it. It was difficult at first. But soon one after another, little animals were created. Perhaps it's all the blogs I visited this year, perhaps it's a belief that I must got some of mom's genes in me, perhaps it's all the extra time I have for my mind to wander and my hands to linger. I see something in me that I did not see before. I also see something in this world that I never noticed before: patterns, colors, shapes, randomness, light and shadow, texture. I don't know if it's one of the flings that I have once in a while or if it will become something bigger. At this moment I'm just curious about all these and thirst for more.
I found out about a Canadian artist called Michelle Forsyth today. She uses paint, water color, fabrics, cut-paper and other media to create delicate painting and installations. "Her work examines traumatic cultural events and incidents of human suffering depicted in the media." You can find out more about her here: http://www.michelleforsyth.com/index.html.


Employee grief in the workplace costs employers up to $500 billion in lost productivity every year (Medina, 2012). Bereaved employees often describe how the toughest part of returning to work is the inability to focus, make profitable decisions, and ignore the elephant in the room. Coworkers frequently feel uncomfortable, unsure what to say or how to behave. IGI corporate services educates and trains employers how to support employees facing loss and create a sustainable culture of support that will help prevent lost revenue and lead to happier employees, increased productivity, and reduced turnover.
Managing employee grief is part of life, and successful organizations understand that grief doesn't stay in the cubicle. Scientific evidence proves that supporting valued employees will minimize disruption, enhance workplace happiness and preserve corporate culture. IGI assessment services analyze your current HR policies and procedures for managing employee grief, defines best practices that align with your mission statement and culture values, and produces an effective HR plan designed for long-term ROI through improved employee recruitment, retention and performance.
Debriefing assists employees who are coping with psychological and emotional trauma that occurred within the workplace or stems from loss of a manager, colleague or co-worker.
IGI's corporate consulting services offer functional expertise and solid strategies to help your organization improve existing HR bereavement policies and procedures. With a focus on identifying critical issues, our plan customized to your needs will help minimize risk, and maximize staff retention and wellness in times of employee crisis.


JVC DLA-RS4500 Projector - Like New and Professionally Calibrated - Original List Price $29,999, selling this demo unit for $16500 with full three year manufacturer's warranty.
The projector is in perfect shape and has less than 1200 hours on it. Native 4K resolution, HDR and WCG capable, 3000 lumen laser light engine. I have the box, remote and all packing materials. This will be sold as if it were new, with a full three year A stock warranty from JVC.
This projector has been professionally calibrated TWICE - once by Gregg Loewen of THX at the time of the shootout, the second time by Kris Deering of Sound and Vision magazine this past August. (The second calibration was made in conjunction with a Lumagen Radiance Pro using Kris's highly tweaked settings - I may be willing to sell the Lumagen along with the projector). Both times calibration was accomplished using a 144" diagonal 2.35:1 StudioTek130 screen, with presets created for Scope and 16:9 SDR and HDR content.
I am willing to throw in the proper heavy duty Chief Ceiling Mount we are using to hang it in our showroom (see pic).
Asking $16500 plus shipping (approximately $700 - this projector is a beast and needs to be shipped freight!). Local pickup is available in Colorado.
Please feel free to reach out to me with questions or concerns. And check out our company reviews - just Google The Screening Room Colorado Springs. We take all major credit cards.


It's the Saturday Open Thread... you really should be outside though.
So - are these Eurowallet 2010 soccer tourists going to push up house prices in CT, pricing the locals even more out of the market,or is that whole tournament going to be a lame fizzle ??.
I don't see much travel enthusiasm either, locally or abroad, what with job losses and portfolio losses all around the world.
But maybe I'm wrong - any wiews ??
Soccer is big in the States no??
Chief organiser Danny Jordaan says Americans have bought the highest number of World Cup tickets outside of South Africa so far, and it is therefore significant that the USA has now qualified for the World Cup.
Jordan says now that the team has qualified even more Americans can be expected to buy tickets for the World Cup.
Anybody who thinks that the world cup is going to push up property prices has got rocks in their head.
No fan is going to come here and watch soccer and then decide what a geat place this is and buy property.
This whole notion of property being boosted is bulldust. One onlyhas to look at other cities and countries which hosted the world cup like Germany, Korea and Italy where prices hardly moved during and after the world cup!!
Anyway. Purpose of entry: I see over on UK House Price Crash that Kirsty "Prices Always Go Up" Allsop, the most poisonous cheerleader of the English specuvestors, is being touted as a possible addition to the House of Lords once the Tories come in. This suggests that our worst fears are well founded: the governments of the West are going to everything - EVERYTHING - to keep their economies floating on inflated property prices.
Interested to know: what's the long-term outcome of this? Surely this is uncharted territory, where we are determined not to pay the piper until the tune is over and the concert hall has burned down? How do we hard-working, frugal people position ourselves for what must surely be a complete meltdown in the next 10 years? Buy farmland? Gold? Guns? Or just sedatives?
To me the death of the dollar as global reserve currency is the immediate issue....and its complex.
For instance: An attack on Iran over their supposed nuclear ambitions? During 2007, Iran asked its petroleum customers to pay in non-dollar currencies.
Didnt Saddam do the same thing?
Weapons of mass destruction anyone?
What will Gordhan and Ramos do?
What will Mr "you sheeple be frugal while I will have this 1,2mil beemer over here" Manuel do?
The 2010 WC will have *maybe* a temporary positive impact on property because sentiment drives a market. I think the problems will only surface in 2011 and onward.
There aren't enough willing foreign buyers to prop up Cape property prices. The bulk of the market has and always will be driven by local demand. Only the Atlantic seaboard is an exception.
Fact is that locals haven't seen their income increase in line with prices. There are more R1 million homes than qualified buyers.
And to think foreigners are going to shell out 2 or 3 hundred thousand dollars for a vacation home in CT. you forget that there are BETTER buys for those people in the USA, e.g. Florida.


text:
Equal Rights, Pop-Culture, Pregnancy, Rape, Review
The Parallels between The Handmaid's Tale and the United States Today
January 17, 2019 hoochie	Leave a comment
By: Rachel Harmon
*Spoilers below*
While I may be late in the game to finally watch The Handmaid's Tale, I am certainly glad I did. The Handmaid's Tale is a Hulu original series based on Margaret Atwood's 1985 novel by the same name. This dystopian, fictional story centers around Offred, a handmaid, who is forced to bear children, as she is one of the very few women who is still fertile in her society. Offred defies her commander and stands up for herself to escape the horrible life in which she lives. The series presents many ideas that are strikingly similar to current issues surrounding women's reproductive rights, such as: women fulfilling their "biological purpose" as bearers of children, and women degrading themselves to avoid the tortuous consequences of rebelling against patriarchy. These ideas are not farfetched, for there many governments around the world that subjugate women's bodies and reproductive rights.
It does not shock me anymore in our current social climate that some people would fall into the notion of following strict Conservative Christian values. The women in The Handmaid's Tale were reduced to serving men and the home by being servants, gaining permission from their husbands to do anything, and being stripped of their jobs. This was only achieved by a huge following (mostly men) that would enforce this because the women had passions and jobs that were outside of strict Conservative Christian values. Thus, it was degrading and disgusting the way the men of the society treated the women since they were forced to completely change their way of life.
In addition to changing their way of life, the women were treated in the most horrifying ways I have ever seen on television. This treatment seemed counterintuitive, because the men were treating the handmaids as the lowest of all women, despite their being the only fertile women of their society, and in my opinion, the most valuable. You would think they would receive the best treatment, considering the circumstances, but no. The handmaids were raped, beaten, cattle pronged, isolated, and tortured. You would think the most valuable people in that society would be treated like royalty, but they were hardly treated like human beings. In Atwood's society, the commanders trade the handmaids as commodities with other countries that do not have fertile women. The handmaids were only seen as concubines; once they give birth, they were sent to another family to start the process all over again.
The Handmaid's Tale made me think about how women are treated today. We are still demeaned in our workspaces, cat-called in the street, and seen as sexual objects. It is ridiculous that we have to try more to be seen more, believed more, and heard more. Even though we are human beings, it is still like we are fighting to prove this to everyone.
In an article about the similarities between the TV show and today's political climate, Jennifer Armstrong corroborates the notion that Margaret Atwood's novel cannot be categorized as science fiction because it "mirror[s] the United States' embrace of conservatism…as well as the increasing power of the Christian right and its powerful lobbying organizations" (Armstrong, 2018). Atwood's novel confronts the United States' concerns of "the rising political power of Christian fundamentalists, environmental concerns, and attacks on women's reproductive rights" (Armstrong, 2018). These are no different than the concerns in 2019.
While The Handmaid's Tale presents a scary alternate reality that seems removed from our current American society, it is not as strange as we might believe.
This is what truly scares me. Women have come so far in terms of living outside of the home and being their own individual person that it would be heartbreaking to see this progress all be for nothing. We cannot dismiss Atwood's story as pure fiction because women are being oppressed by society now. We cannot be naïve as we watch this show, and more importantly, we cannot believe that this could never happen to the United States. It could, and we should be active in supporting organizations that will uphold abortion rights, access to equitable pay, contraceptives, and education. We cannot become complacent in believing that we are done fighting for our rights and we must continue to fight every day.
Armstrong, Jennifer Keishin. "Culture – Why The Handmaid's Tale Is so Relevant Today." BBC News, BBC, 25 Apr. 2018, www.bbc.com/culture/story/20180425-why-the-handmaids-tale-is-so-relevant-today.
"Watch The Handmaid's Tale: Season 1 | Prime Video." Amazon, Amazon, www.amazon.com/dp/B073X7TYY2?tag=moviefone-20.
PatriarchyrapeWomen's rights
Previous PostWMN EMPWRMNT: ASTRID DIANET ARROYONext Post"You:" The Flip Side of the Rom-Com


text:
Latest PR
iBLOCKCHAIN NEWS
Category: Hayes
Hayes, MSNBC's
MSNBC's Hayes: 'Urgent Matter' of Health and Safety for Trump 'to Resign'
On Friday's broadcast of MSNBC's "All In," host Chris Hayes said that it's "an urgent matter of public health, of public safety, at this moment, for the president, Donald Trump, to resign." Hayes began by saying, "This moment, we are in the midst of one of the worst governing failures in American history. When all…
MSNBC's Hayes: Trump Reopen Plan Is to Let Americans Die from Coronavirus 'Like Warriors on Battlefield'
Tuesday on MSNBC, anchor Chris Hayes said President Donald Trump's plan to reopen the country was to let people die of coronavirus like "warriors on the battlefield." Hayes said, "The Trump administration is about to hang the 'Mission Accomplished' banner in the fight against coronavirus. Today, President Trump confirmed the White House is winding down the…
MSNBC's Hayes: 'Crazy to Me' Everyone's Still Carrying Coronavirus Briefings Live
On Monday's broadcast of MSNBC's "All In," host Chris Hayes stated that it's "crazy" to him that media outlets are still taking the White House's coronavirus briefings live, "when you've got the MyPillow guy getting up there talking about reading the Bible." Hayes began by saying that Trump uses the briefings as "propaganda sessions, regularly…
© 2021 Geopay.me Inc, 2013 - 2019 Visit Us


More information can be found at rocknfirerestaurants.com.
Ciao Roseville, 1410 E. Roseville Parkway, Roseville: The Italian/American cuisine restaurant opened its doors on Dec. 8.
Backbone Cafe, 729 J St., Sacramento: The eatery touting "the highest quality human fuel possible by using organic, local and sustainably-sourced ingredients" announced its opening in a Dec. 12 Facebook post.
El Pollo Loco, 8244 Delta Shores Circle, Sacramento: The Costa Mesa-based chain opened its eighth Sacramento eatery Dec. 14 in the Delta Shores shopping complex along Interstate 5 in south Sacramento.
Punch Bowl Social, 500 J St., Sacramento: The sprawling restaurant that also features bowling and other on-site entertainment amenities opened its doors on Dec. 15 in the Downtown Commons development adjacent to Golden 1 Center.
Goodwill, 1900 Alhambra Blvd., Sacramento: Goodwill Sacramento Valley & Northern Nevada opened its newest store on Wednesday in the old Sacramento Natural Foods Co-op building in midtown.
Baguettes Deli, 8351 Elk Grove Blvd., Elk Grove: A Dec. 9 Facebook post announced its closure but held out the possibility of a return at some future date.
The Wienery, 715 56th St., Sacramento: A favorite hot dog stop for decades, the eatery announced in a Dec. 11 Facebook post that it had closed permanently.
Coffee Hangar Cafe, 5411 Luce Ave., North Highlands: The local coffee shop announced its closing in a Dec. 15 Facebook post.


text:
Parlotones – Band
Home/Entertainment Comedy/Parlotones – Band
Parlotones – Band	Duncan Hesketh	2019-08-27T16:26:03+02:00
The Parlotones have grown from strength to strength during 2007. With two albums, the SAMA winning 'Radicontrolledrobot and their latest release 'A World Next Door To Yours, going Gold simultaneously, sold out performances across South Africa and numerous award nominations and wins there seems to be no letting up when it comes to what this band can accomplish. Interest from various territories outside of South Africa is inevitable with a band as unique and talented as The Parlotones and the band have obliged by regularly touring the UK over the past year and will continue to do so in 2008.
In between UK stints The Parlotones will be continuing to tour in South Africa as the demand for the band is currently at an all time high. Book Parlotones through Conference Speakers
With the backing of a talented team of publicists and agents in London including LanderPR who represent the band for their national TV and radio and Zest PR who represent them on a regional level, The Parlotones have slowly been selling their wares to the British music lover.
The result of the bands hard work as well as their UK 'campaign managers enthusiasm has been regular airplay and interviews across the UK on a variety of radio stations including in Englands favourite retail store 'Top Shop as well as some pretty interesting media interest which includes a rave review of one of their London shows in the London metro Newspaper, read by thousands of underground commuters.
Locally though it seems that when one mile stone is reached the band finds another one to overcome. 'Successful year does not quite describe the year they had in 2007. That would be an understatement. There are always new markets to reach and the band will continue to tour and get their music played in all corners of South Africa in a bid to reach as many people as they can. Selling lots of units while they are at it!
Their single 'Ill Be There is a poignant love song that is destined to receive one or two requests at wedding receptions. Accompanied by a million rand music video done by some of South Africa's most talented animators it is a very memorable song that is going to raise the bar for South African music for some time to come. Follow CSI on Twitter


text:
package server

import (
	"fmt"
	"strings"
	"time"

	// dockerstdcopy "github.com/docker/docker/pkg/stdcopy"
	// dockerapi "github.com/docker/engine-api/client"
	"github.com/docker/engine-api/types"
	"github.com/docker/engine-api/types/blkiodev"
	"github.com/docker/engine-api/types/container"
	"github.com/docker/engine-api/types/filters"
	// "github.com/docker/engine-api/types/mount"
	"github.com/docker/engine-api/types/network"
	"github.com/docker/engine-api/types/strslice"
	"github.com/docker/go-connections/nat"
	"github.com/docker/go-units"

	"github.com/tangfeixiong/go-to-docker/pb"
	"github.com/tangfeixiong/go-to-docker/pb/moby"
	"github.com/tangfeixiong/go-to-docker/pkg/dockerctl"
)

const (
	// Taken from lmctfy https://github.com/google/lmctfy/blob/master/lmctfy/controllers/cpu_controller.cc
	minShares     = 2
	sharesPerCPU  = 1024
	milliCPUToCPU = 1000

	// 100000 is equivalent to 100ms
	quotaPeriod    = 100000
	minQuotaPeriod = 1000
)

func (m *myService) runContainer(req *pb.DockerRunData) (*pb.DockerRunData, error) {
	resp := new(pb.DockerRunData)
	if nil == req {
		return resp, fmt.Errorf("Request required")
	}

	if nil == req.Config || 0 == len(req.Config.Image) {
		return resp, fmt.Errorf("Image required")
	}
	if nil == req.HostConfig {
		return resp, fmt.Errorf("Host config required")
	}
	if nil == req.NetworkConfig {
		return resp, fmt.Errorf("Network config required")
	}

	cc := &container.Config{
		Hostname:     req.Config.Hostname,
		Domainname:   req.Config.Domainname,
		User:         req.Config.User,
		AttachStdin:  req.Config.AttachStdin,
		AttachStdout: req.Config.AttachStdout,
		AttachStderr: req.Config.AttachStderr,
		ExposedPorts: nat.PortSet{},
		Tty:          req.Config.Tty,       // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		OpenStdin:    req.Config.OpenStdin, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		StdinOnce:    req.Config.StdinOnce, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Env:          make([]string, 0),    // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Cmd:          make(strslice.StrSlice, 0),
		// HealthCheck:     new(container.HealthCheck),
		ArgsEscaped:     req.Config.ArgsEscaped,
		Image:           req.Config.Image, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Volumes:         make(map[string]struct{}),
		WorkingDir:      req.Config.WorkingDir, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Entrypoint:      req.Config.Entrypoint,
		NetworkDisabled: req.Config.NetworkDisabled,
		MacAddress:      req.Config.MacAddress,
		OnBuild:         make([]string, 0),
		Labels:          make(map[string]string), // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		StopSignal:      req.Config.StopSignal,
		// StopTimeout:     new(int),
		// Shell:           make(strslice.StrSlice, 0),
	}
	for k, _ := range req.Config.ExposedPorts.Value {
		cc.ExposedPorts[nat.Port(k)] = struct{}{}
	}
	cc.Env = append(cc.Env, req.Config.Env...)
	cc.Cmd = append(cc.Cmd, req.Config.Cmd...)
	for k, _ := range req.Config.Volumes {
		cc.Volumes[k] = struct{}{}
	}
	cc.OnBuild = append(cc.OnBuild, req.Config.OnBuild...)
	for k, v := range req.Config.Labels {
		cc.Labels[k] = v
	}
	// *(cc.StopTimeout) = int(req.Config.StopTimeout)
	// cc.Shell = append(cc.Shell, req.Config.Shell...)

	chc := &container.HostConfig{
		Binds:           req.HostConfig.Binds, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func makeMountBindings)
		ContainerIDFile: req.HostConfig.ContainerIdFile,
		LogConfig:       container.LogConfig{},
		NetworkMode:     "",            // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		PortBindings:    nat.PortMap{}, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func makePortsAndBindings)
		RestartPolicy: container.RestartPolicy{
			Name:              "none",
			MaximumRetryCount: 3,
		},
		AutoRemove:   req.HostConfig.AutoRemove,
		VolumeDriver: req.HostConfig.VolumeDriver,
		VolumesFrom:  make([]string, 0),
		// Applicable to UNIX platforms
		CapAdd:          make(strslice.StrSlice, 0),
		CapDrop:         make(strslice.StrSlice, 0),
		DNS:             make([]string, 0),
		DNSOptions:      make([]string, 0),
		DNSSearch:       make([]string, 0),
		ExtraHosts:      make([]string, 0),
		GroupAdd:        make([]string, 0),
		IpcMode:         "", // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Cgroup:          "",
		Links:           make([]string, 0),
		OomScoreAdj:     0,  // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		PidMode:         "", // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		Privileged:      req.HostConfig.Privileged,
		PublishAllPorts: req.HostConfig.PublishAllPorts,
		ReadonlyRootfs:  req.HostConfig.ReadonlyRootfs, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func readOnlyRootFilesystem)
		SecurityOpt:     make([]string, 0),             // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method fmtDockerOpts)
		StorageOpt:      make(map[string]string),
		Tmpfs:           make(map[string]string),
		UTSMode:         "", // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		UsernsMode:      "",
		ShmSize:         0,
		Sysctls:         make(map[string]string), // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
		// Runtime:         req.HostConfig.Runtime,

		// Applicable to Windows
		ConsoleSize: [2]int{}, // ConsoleSize:     [2]uint{},
		Isolation:   "",

		Resources: container.Resources{
			// https://docs.docker.com/engine/reference/run/#cpu-share-constraint
			//     To modify the proportion from the default of 1024, use the -c or --cpu-shares flag to set the weighting to 2 or higher. If 0 is set, the system will ignore the value and use the default of 1024.
			// https://docs.docker.com/engine/reference/run/#user-memory-constraints
			//     4 ways to set user memory usage
			// https://docs.docker.com/engine/reference/run/#cpu-period-constraint
			//     The default CPU CFS (Completely Fair Scheduler) period is 100ms. We can use --cpu-period to set the period of CPUs to limit the container's CPU usage. And usually --cpu-period should work with --cpu-quota.
			// https://docs.docker.com/engine/reference/run/#cpu-quota-constraint
			//     The --cpu-quota flag limits the container's CPU usage. The default 0 value allows the container to take 100% of a CPU resource (1 CPU).
			CPUShares: 0, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			Memory:    0, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			// NanoCPUs:             req.HostConfig.Resources.NanoCpus,
			CgroupParent: "", // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			// BlkioWeight:          uint16(req.HostConfig.Resources.BlkioWeight),
			BlkioWeightDevice:    make([]*blkiodev.WeightDevice, 0),
			BlkioDeviceReadBps:   make([]*blkiodev.ThrottleDevice, 0),
			BlkioDeviceWriteBps:  make([]*blkiodev.ThrottleDevice, 0),
			BlkioDeviceReadIOps:  make([]*blkiodev.ThrottleDevice, 0),
			BlkioDeviceWriteIOps: make([]*blkiodev.ThrottleDevice, 0),
			CPUPeriod:            0, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			CPUQuota:             0, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			// CPURealtimePeriod:    req.HostConfig.Resources.CpuRealtimePeriod,
			// CPURealtimeRuntime:   req.HostConfig.Resources.CpuRealtimeRuntime,
			CpusetCpus: "",
			CpusetMems: "",
			Devices:    make([]container.DeviceMapping, 0), // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			// DeviceCgroupRules:  make([]string, 0),
			DiskQuota:          0,
			KernelMemory:       0,
			MemoryReservation:  0,
			MemorySwap:         -1, // refer: k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go (func-method runContainer)
			MemorySwappiness:   new(int64),
			OomKillDisable:     new(bool),
			PidsLimit:          0,
			Ulimits:            make([]*units.Ulimit, 0),
			CPUCount:           0,
			CPUPercent:         0,
			IOMaximumIOps:      0,
			IOMaximumBandwidth: 0,
		},
		// Mounts: make([]mount.Mount, 0),
		// Init:   new(bool),
	}
	if 0 != len(req.HostConfig.NetworkMode) {
		chc.NetworkMode = container.NetworkMode(req.HostConfig.NetworkMode)
	}
	for k, v := range req.HostConfig.PortBindings.Value {
		chc.PortBindings[nat.Port(k)] = make([]nat.PortBinding, 0)
		chc.PortBindings[nat.Port(k)] = append(chc.PortBindings[nat.Port(k)], nat.PortBinding{
			HostIP:   v.HostIp,
			HostPort: v.HostPort,
		})
	}
	for k, v := range req.HostConfig.PortBindings.MappingInfo {
		chc.PortBindings[nat.Port(k)] = make([]nat.PortBinding, 0)
		for _, item := range v.PortBindings {
			chc.PortBindings[nat.Port(k)] = append(chc.PortBindings[nat.Port(k)], nat.PortBinding{
				HostIP:   item.HostIp,
				HostPort: item.HostPort,
			})
		}
	}
	if 0 != len(req.HostConfig.IpcMode) {
		chc.IpcMode = container.IpcMode(req.HostConfig.IpcMode)
	}
	if 0 < req.HostConfig.OomScoreAdj {
		chc.OomScoreAdj = int(req.HostConfig.OomScoreAdj)
	}
	if 0 != len(req.HostConfig.PidMode) {
		chc.PidMode = container.PidMode(req.HostConfig.PidMode)
	}
	if 0 != len(req.HostConfig.UtsMode) {
		chc.UTSMode = container.UTSMode(req.HostConfig.UtsMode)
	}
	for k, v := range req.HostConfig.Sysctls {
		chc.Sysctls[k] = v
	}
	if minShares < req.HostConfig.Resources.CpuShares {
		chc.Resources.CPUShares = req.HostConfig.Resources.CpuShares
	}
	if 0 < req.HostConfig.Resources.Memory {
		chc.Resources.Memory = req.HostConfig.Resources.Memory
	}
	if 0 < req.HostConfig.Resources.MemorySwap && req.HostConfig.Resources.Memory <= req.HostConfig.Resources.MemorySwap {
		chc.Resources.MemorySwap = req.HostConfig.Resources.MemorySwap
	}
	if 0 != len(req.HostConfig.Resources.CgroupParent) {
		chc.Resources.CgroupParent = req.HostConfig.Resources.CgroupParent
	}
	if 0 < req.HostConfig.Resources.CpuPeriod && 0 < req.HostConfig.Resources.CpuQuota {
		chc.Resources.CPUPeriod = req.HostConfig.Resources.CpuPeriod
		chc.Resources.CPUQuota = req.HostConfig.Resources.CpuQuota
	}

	cnc := &network.NetworkingConfig{
		EndpointsConfig: make(map[string]*network.EndpointSettings),
	}
	for k, v := range req.NetworkConfig.EndpointsConfig {
		cnc.EndpointsConfig[k] = &network.EndpointSettings{
			IPAMConfig: &network.EndpointIPAMConfig{
			// LinkLocalIPs: make([]string, 0),
			},
			Links:               make([]string, 0),
			Aliases:             make([]string, 0),
			NetworkID:           v.NetworkId,
			EndpointID:          v.EndpointId,
			Gateway:             v.Gateway,
			IPAddress:           v.IpAddress,
			IPPrefixLen:         int(v.IpPrefixLen),
			IPv6Gateway:         v.Ipv6Gateway,
			GlobalIPv6Address:   v.GlobalIpv6Address,
			GlobalIPv6PrefixLen: int(v.GlobalIpv6PrefixLen),
			MacAddress:          v.MacAddress,
			// DriverOpts:          make(map[string]string),
		}
		if v.IpamConfig != nil {
			cnc.EndpointsConfig[k].IPAMConfig.IPv4Address = v.IpamConfig.Ipv4Address
			cnc.EndpointsConfig[k].IPAMConfig.IPv6Address = v.IpamConfig.Ipv6Address
		}
	}

	ctl := dockerctl.NewEngine1_12Client()
	if result, err := ctl.CreateContainer(cc, chc, cnc, req.ContainerName); nil != err {
		resp.StateCode = 100
		resp.StateMessage = err.Error()
		return resp, err
	} else if err := ctl.StartContainer(result.ID); nil != err {
		resp.StateCode = 101
		resp.StateMessage = err.Error()
		return resp, err
	} else {
		resp.ContainerId = result.ID
	}
	resp.Config = req.Config
	resp.HostConfig = req.HostConfig
	resp.NetworkConfig = req.NetworkConfig
	return resp, nil
}

func (m *myService) inspectContainer(req *pb.DockerContainerInspection) (*pb.DockerContainerInspection, error) {
	resp := new(pb.DockerContainerInspection)
	if nil == req || nil == req.ContainerInfo || nil == req.ContainerInfo.ContainerJsonBase || "" == req.ContainerInfo.ContainerJsonBase.Id {
		return resp, fmt.Errorf("Request required")
	}

	ctl := dockerctl.NewEngine1_12Client()
	result, err := ctl.InspectContainer(req.ContainerInfo.ContainerJsonBase.Id)
	if nil != err {
		return resp, err
	}

	resp.ContainerInfo = &moby.ContainerJSON{
		ContainerJsonBase: &moby.ContainerJSONBase{
			Id:      result.ContainerJSONBase.ID,
			Created: result.ContainerJSONBase.Created,
			Path:    result.ContainerJSONBase.Path,
			Args:    result.ContainerJSONBase.Args,
			State: &moby.ContainerState{
				Status:     result.ContainerJSONBase.State.Status,
				Running:    result.ContainerJSONBase.State.Running,
				Paused:     result.ContainerJSONBase.State.Paused,
				Restarting: result.ContainerJSONBase.State.Restarting,
				OomKilled:  result.ContainerJSONBase.State.OOMKilled,
				Dead:       result.ContainerJSONBase.State.Dead,
				Pid:        int32(result.ContainerJSONBase.State.Pid),
				ExitCode:   int32(result.ContainerJSONBase.State.ExitCode),
				Error:      result.ContainerJSONBase.State.Error,
				StartedAt:  result.ContainerJSONBase.State.StartedAt,
				FinishedAt: result.ContainerJSONBase.State.FinishedAt,
			},
			Image:           result.ContainerJSONBase.Image,
			ResolvConfPath:  result.ContainerJSONBase.ResolvConfPath,
			HostnamePath:    result.ContainerJSONBase.HostnamePath,
			HostsPath:       result.ContainerJSONBase.HostsPath,
			LogPath:         result.ContainerJSONBase.LogPath,
			Node:            &moby.ContainerNode{},
			Name:            result.ContainerJSONBase.Name,
			RestartCount:    int32(result.ContainerJSONBase.RestartCount),
			Driver:          result.ContainerJSONBase.Driver,
			MountLabel:      result.ContainerJSONBase.MountLabel,
			ProcessLabel:    result.ContainerJSONBase.ProcessLabel,
			AppArmorProfile: result.ContainerJSONBase.AppArmorProfile,
			ExecIds:         result.ContainerJSONBase.ExecIDs,
			HostConfig: &moby.HostConfig{
				Binds:           result.ContainerJSONBase.HostConfig.Binds,
				ContainerIdFile: result.ContainerJSONBase.HostConfig.ContainerIDFile,
				LogConfig: &moby.LogConfig{
					Type:   result.ContainerJSONBase.HostConfig.LogConfig.Type,
					Config: result.ContainerJSONBase.HostConfig.LogConfig.Config,
				},
				NetworkMode: string(result.ContainerJSONBase.HostConfig.NetworkMode),
				PortBindings: &moby.PortMap{
					Value:       make(map[string]*moby.PortBinding),
					MappingInfo: make(map[string]*moby.PortMap_PortBindings, len(result.ContainerJSONBase.HostConfig.PortBindings)),
				},
				RestartPolicy: &moby.RestartPolicy{
					Name:              result.ContainerJSONBase.HostConfig.RestartPolicy.Name,
					MaximumRetryCount: int32(result.ContainerJSONBase.HostConfig.RestartPolicy.MaximumRetryCount),
				},
				AutoRemove:   result.ContainerJSONBase.HostConfig.AutoRemove,
				VolumeDriver: result.ContainerJSONBase.HostConfig.VolumeDriver,
				VolumesFrom:  result.ContainerJSONBase.HostConfig.VolumesFrom,

				CapAdd:          result.ContainerJSONBase.HostConfig.CapAdd[:],
				CapDrop:         result.ContainerJSONBase.HostConfig.CapDrop[:],
				Dns:             result.ContainerJSONBase.HostConfig.DNS,
				DnsOptions:      result.ContainerJSONBase.HostConfig.DNSOptions,
				DnsSearch:       result.ContainerJSONBase.HostConfig.DNSSearch,
				ExtraHosts:      result.ContainerJSONBase.HostConfig.ExtraHosts,
				GroupAdd:        result.ContainerJSONBase.HostConfig.GroupAdd,
				IpcMode:         string(result.ContainerJSONBase.HostConfig.IpcMode),
				Cgroup:          string(result.ContainerJSONBase.HostConfig.Cgroup),
				Links:           result.ContainerJSONBase.HostConfig.Links,
				OomScoreAdj:     int32(result.ContainerJSONBase.HostConfig.OomScoreAdj),
				PidMode:         string(result.ContainerJSONBase.HostConfig.PidMode),
				Privileged:      result.ContainerJSONBase.HostConfig.Privileged,
				PublishAllPorts: result.ContainerJSONBase.HostConfig.PublishAllPorts,
				ReadonlyRootfs:  result.ContainerJSONBase.HostConfig.ReadonlyRootfs,
				SecurityOpt:     result.ContainerJSONBase.HostConfig.SecurityOpt,
				StorageOpt:      result.ContainerJSONBase.HostConfig.StorageOpt,
				Tmpfs:           result.ContainerJSONBase.HostConfig.Tmpfs,
				UtsMode:         string(result.ContainerJSONBase.HostConfig.UTSMode),
				UsernsMode:      string(result.ContainerJSONBase.HostConfig.UsernsMode),
				ShmSize:         result.ContainerJSONBase.HostConfig.ShmSize,
				Sysctls:         result.ContainerJSONBase.HostConfig.Sysctls,
				// Runtime:         result.ContainerJSONBase.HostConfig.Runtime,
				// ConsoleSize:     [2]uint32{},
				ConsoleSizeHeight: uint32(result.ContainerJSONBase.HostConfig.ConsoleSize[0]),
				ConsoleSizeWidth:  uint32(result.ContainerJSONBase.HostConfig.ConsoleSize[1]),
				Isolation:         string(result.ContainerJSONBase.HostConfig.Isolation),
				Resources: &moby.Resources{
					// CPUShares:            result.ContainerJSONBase.HostConfig.Resources.CpuShares,
					// Memory:               result.ContainerJSONBase.HostConfig.Resources.Memory,
					// NanoCPUs:             result.ContainerJSONBase.HostConfig.Resources.NanoCpus,
					CgroupParent: result.ContainerJSONBase.HostConfig.Resources.CgroupParent,
					// BlkioWeight:          uint16(result.ContainerJSONBase.HostConfig.Resources.BlkioWeight),
					BlkioWeightDevice:    make([]*moby.WeightDevice, len(result.ContainerJSONBase.HostConfig.Resources.BlkioWeightDevice)),
					BlkioDeviceReadBps:   make([]*moby.ThrottleDevice, len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadBps)),
					BlkioDeviceWriteBps:  make([]*moby.ThrottleDevice, len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteBps)),
					BlkioDeviceReadIops:  make([]*moby.ThrottleDevice, len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadIOps)),
					BlkioDeviceWriteIops: make([]*moby.ThrottleDevice, len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteIOps)),
					// CPUPeriod:            result.ContainerJSONBase.HostConfig.Resources.CpuPeriod,
					// CPUQuota:             result.ContainerJSONBase.HostConfig.Resources.CpuQuota,
					// CPURealtimePeriod:    result.ContainerJSONBase.HostConfig.Resources.CpuRealtimePeriod,
					// CPURealtimeRuntime:   result.ContainerJSONBase.HostConfig.Resources.CpuRealtimeRuntime,
					CpusetCpus: result.ContainerJSONBase.HostConfig.Resources.CpusetCpus,
					CpusetMems: result.ContainerJSONBase.HostConfig.Resources.CpusetMems,
					Devices:    make([]*moby.DeviceMapping, len(result.ContainerJSONBase.HostConfig.Resources.Devices)),
					// DeviceCgroupRules:  result.ContainerJSONBase.HostConfig.Resources.DeviceCgroupRules,
					DiskQuota:          result.ContainerJSONBase.HostConfig.Resources.DiskQuota,
					KernelMemory:       result.ContainerJSONBase.HostConfig.Resources.KernelMemory,
					MemoryReservation:  result.ContainerJSONBase.HostConfig.Resources.MemoryReservation,
					MemorySwap:         result.ContainerJSONBase.HostConfig.Resources.MemorySwap,
					MemorySwappiness:   *result.ContainerJSONBase.HostConfig.Resources.MemorySwappiness,
					OomKillDisable:     *result.ContainerJSONBase.HostConfig.Resources.OomKillDisable,
					PidsLimit:          result.ContainerJSONBase.HostConfig.Resources.PidsLimit,
					Ulimits:            make([]*moby.Ulimit, len(result.ContainerJSONBase.HostConfig.Resources.Ulimits)),
					CpuCount:           result.ContainerJSONBase.HostConfig.Resources.CPUCount,
					CpuPercent:         result.ContainerJSONBase.HostConfig.Resources.CPUPercent,
					IoMaximumIops:      result.ContainerJSONBase.HostConfig.Resources.IOMaximumIOps,
					IoMaximumBandwidth: result.ContainerJSONBase.HostConfig.Resources.IOMaximumBandwidth,
				},
				// Mounts: make([]*moby.Mount, len(result.ContainerJSONBase.HostConfig.Mounts)),
				// Init:   &result.ContainerJSONBase.HostConfig.Init,

			},
			GraphDriver: &moby.GraphDriverData{
				Name: result.ContainerJSONBase.GraphDriver.Name,
				Data: result.ContainerJSONBase.GraphDriver.Data,
			},
			SizeRw:     0,
			SizeRootFs: 0,
		},
		Mounts: make([]*moby.MountPoint, len(result.Mounts)),
		Config: &moby.Config{
			Hostname:     result.Config.Hostname,
			Domainname:   result.Config.Domainname,
			User:         result.Config.User,
			AttachStdin:  result.Config.AttachStdin,
			AttachStdout: result.Config.AttachStdout,
			AttachStderr: result.Config.AttachStderr,
			ExposedPorts: &moby.PortSet{
				Value: make(map[string]string, len(result.Config.ExposedPorts)),
			},
			Tty:             result.Config.Tty,
			OpenStdin:       result.Config.OpenStdin,
			StdinOnce:       result.Config.StdinOnce,
			Env:             result.Config.Env,
			Cmd:             result.Config.Cmd[:],
			ArgsEscaped:     result.Config.ArgsEscaped,
			Image:           result.Config.Image,
			Volumes:         make(map[string]string, len(result.Config.Volumes)),
			WorkingDir:      result.Config.WorkingDir,
			Entrypoint:      result.Config.Entrypoint[:],
			NetworkDisabled: result.Config.NetworkDisabled,
			MacAddress:      result.Config.MacAddress,
			OnBuild:         result.Config.OnBuild,
			Labels:          result.Config.Labels,
			StopSignal:      result.Config.StopSignal,
		},
		NetworkSettings: &moby.NetworkSettings{
			NetworkSettingsBase: &moby.NetworkSettingsBase{
				Bridge:                 result.NetworkSettings.NetworkSettingsBase.Bridge,
				SandboxId:              result.NetworkSettings.NetworkSettingsBase.SandboxID,
				HairpinMode:            result.NetworkSettings.NetworkSettingsBase.HairpinMode,
				LinkLocalIpv6Address:   result.NetworkSettings.NetworkSettingsBase.LinkLocalIPv6Address,
				LinkLocalIpv6PrefixLen: int32(result.NetworkSettings.NetworkSettingsBase.LinkLocalIPv6PrefixLen),
				Ports: &moby.PortMap{
					Value:       make(map[string]*moby.PortBinding),
					MappingInfo: make(map[string]*moby.PortMap_PortBindings, len(result.NetworkSettings.NetworkSettingsBase.Ports)),
				},
				SandboxKey:             result.NetworkSettings.NetworkSettingsBase.SandboxKey,
				SecondaryIpAddresses:   make([]*moby.Address, len(result.NetworkSettings.NetworkSettingsBase.SecondaryIPAddresses)),
				SecondaryIpv6Addresses: make([]*moby.Address, len(result.NetworkSettings.NetworkSettingsBase.SecondaryIPv6Addresses)),
			},
			DefaultNetworkSettings: &moby.DefaultNetworkSettings{
				EndpointId:          result.NetworkSettings.DefaultNetworkSettings.EndpointID,
				Gateway:             result.NetworkSettings.DefaultNetworkSettings.Gateway,
				GlobalIpv6Address:   result.NetworkSettings.DefaultNetworkSettings.GlobalIPv6Address,
				GlobalIpv6PrefixLen: int32(result.NetworkSettings.DefaultNetworkSettings.GlobalIPv6PrefixLen),
				IpAddress:           result.NetworkSettings.DefaultNetworkSettings.IPAddress,
				IpPrefixLen:         int32(result.NetworkSettings.DefaultNetworkSettings.IPPrefixLen),
				Ipv6Gateway:         result.NetworkSettings.DefaultNetworkSettings.IPv6Gateway,
				MacAddress:          result.NetworkSettings.DefaultNetworkSettings.MacAddress,
			},
			Networks: make(map[string]*moby.EndpointSettings, len(result.NetworkSettings.Networks)),
		},
	}

	if result.ContainerJSONBase.Node != nil {
		resp.ContainerInfo.ContainerJsonBase.Node = &moby.ContainerNode{
			Id:        result.ContainerJSONBase.Node.ID,
			IpAddress: result.ContainerJSONBase.Node.IPAddress,
			Addr:      result.ContainerJSONBase.Node.Addr,
			Name:      result.ContainerJSONBase.Node.Name,
			Cpus:      int32(result.ContainerJSONBase.Node.Cpus),
			Memory:    int32(result.ContainerJSONBase.Node.Memory),
			Labels:    result.ContainerJSONBase.Node.Labels,
		}
	}
	if result.ContainerJSONBase.SizeRw != nil {
		resp.ContainerInfo.ContainerJsonBase.SizeRw = *result.ContainerJSONBase.SizeRw
	}
	if result.ContainerJSONBase.SizeRootFs != nil {
		resp.ContainerInfo.ContainerJsonBase.SizeRootFs = *result.ContainerJSONBase.SizeRootFs
	}

	for k, v := range result.ContainerJSONBase.HostConfig.PortBindings {
		bs := make([]*moby.PortBinding, len(v))
		for i := 0; i < len(v); i++ {
			bs[i] = &moby.PortBinding{
				HostIp:   v[i].HostIP,
				HostPort: v[i].HostPort,
			}
		}
		resp.ContainerInfo.ContainerJsonBase.HostConfig.PortBindings.MappingInfo[string(k)] = &moby.PortMap_PortBindings{
			PortBindings: bs,
		}
		resp.ContainerInfo.ContainerJsonBase.HostConfig.PortBindings.Value[string(k)] = bs[0]
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.BlkioWeightDevice); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.BlkioWeightDevice[i] = &moby.WeightDevice{
			Path:   result.ContainerJSONBase.HostConfig.Resources.BlkioWeightDevice[i].Path,
			Weight: int32(result.ContainerJSONBase.HostConfig.Resources.BlkioWeightDevice[i].Weight),
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadBps); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.BlkioDeviceReadBps[i] = &moby.ThrottleDevice{
			Path: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadBps[i].Path,
			Rate: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadBps[i].Rate,
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteBps); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.BlkioDeviceWriteBps[i] = &moby.ThrottleDevice{
			Path: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteBps[i].Path,
			Rate: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteBps[i].Rate,
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadIOps); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.BlkioDeviceReadIops[i] = &moby.ThrottleDevice{
			Path: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadIOps[i].Path,
			Rate: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceReadIOps[i].Rate,
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteIOps); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.BlkioDeviceWriteIops[i] = &moby.ThrottleDevice{
			Path: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteIOps[i].Path,
			Rate: result.ContainerJSONBase.HostConfig.Resources.BlkioDeviceWriteIOps[i].Rate,
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.Devices); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.Devices[i] = &moby.DeviceMapping{
			PathOnHost:        result.ContainerJSONBase.HostConfig.Resources.Devices[i].PathOnHost,
			PathInContainer:   result.ContainerJSONBase.HostConfig.Resources.Devices[i].PathInContainer,
			CgroupPermissions: result.ContainerJSONBase.HostConfig.Resources.Devices[i].CgroupPermissions,
		}
	}
	for i := 0; i < len(result.ContainerJSONBase.HostConfig.Resources.Ulimits); i++ {
		resp.ContainerInfo.ContainerJsonBase.HostConfig.Resources.Ulimits[i] = &moby.Ulimit{
			Name: result.ContainerJSONBase.HostConfig.Resources.Ulimits[i].Name,
			Hard: result.ContainerJSONBase.HostConfig.Resources.Ulimits[i].Hard,
			Soft: result.ContainerJSONBase.HostConfig.Resources.Ulimits[i].Soft,
		}
	}
	for i := 0; i < len(result.Mounts); i++ {
		resp.ContainerInfo.Mounts[i] = &moby.MountPoint{
			Name:        result.Mounts[i].Name,
			Source:      result.Mounts[i].Source,
			Destination: result.Mounts[i].Destination,
			Driver:      result.Mounts[i].Driver,
			Mode:        result.Mounts[i].Mode,
			Rw:          result.Mounts[i].RW,
			Propagation: result.Mounts[i].Propagation,
		}
	}
	for k, _ := range result.Config.ExposedPorts {
		resp.ContainerInfo.Config.ExposedPorts.Value[string(k)] = string(k)
	}
	for k, _ := range result.Config.Volumes {
		resp.ContainerInfo.Config.Volumes[string(k)] = string(k)
	}

	for k, v := range result.NetworkSettings.NetworkSettingsBase.Ports {
		bs := make([]*moby.PortBinding, len(v))
		for i := 0; i < len(v); i++ {
			bs[i] = &moby.PortBinding{
				HostIp:   v[i].HostIP,
				HostPort: v[i].HostPort,
			}
		}
		resp.ContainerInfo.NetworkSettings.NetworkSettingsBase.Ports.MappingInfo[string(k)] = &moby.PortMap_PortBindings{
			PortBindings: bs,
		}
		resp.ContainerInfo.NetworkSettings.NetworkSettingsBase.Ports.Value[string(k)] = bs[0]
	}
	for i := 0; i < len(result.NetworkSettings.NetworkSettingsBase.SecondaryIPAddresses); i++ {
		resp.ContainerInfo.NetworkSettings.NetworkSettingsBase.SecondaryIpAddresses[i] = &moby.Address{
			Addr:      result.NetworkSettings.NetworkSettingsBase.SecondaryIPAddresses[i].Addr,
			PrefixLen: int32(result.NetworkSettings.NetworkSettingsBase.SecondaryIPAddresses[i].PrefixLen),
		}
	}
	for i := 0; i < len(result.NetworkSettings.NetworkSettingsBase.SecondaryIPv6Addresses); i++ {
		resp.ContainerInfo.NetworkSettings.NetworkSettingsBase.SecondaryIpv6Addresses[i] = &moby.Address{
			Addr:      result.NetworkSettings.NetworkSettingsBase.SecondaryIPv6Addresses[i].Addr,
			PrefixLen: int32(result.NetworkSettings.NetworkSettingsBase.SecondaryIPv6Addresses[i].PrefixLen),
		}
	}
	for k, v := range result.NetworkSettings.Networks {
		resp.ContainerInfo.NetworkSettings.Networks[k] = &moby.EndpointSettings{
			IpamConfig: &moby.EndpointIPAMConfig{
				Ipv4Address: v.IPAMConfig.IPv4Address,
				Ipv6Address: v.IPAMConfig.IPv6Address,
			},
			Links:               v.Links,
			Aliases:             v.Aliases,
			NetworkId:           v.NetworkID,
			EndpointId:          v.EndpointID,
			Gateway:             v.Gateway,
			IpAddress:           v.IPAddress,
			IpPrefixLen:         int32(v.IPPrefixLen),
			Ipv6Gateway:         v.IPv6Gateway,
			GlobalIpv6Address:   v.GlobalIPv6Address,
			GlobalIpv6PrefixLen: int32(v.GlobalIPv6PrefixLen),
			MacAddress:          v.MacAddress,
		}
	}

	return resp, nil
}

func (m *myService) containersProvisioning(req *pb.ProvisioningsData) (*pb.ProvisioningsData, error) {
	resp := new(pb.ProvisioningsData)
	if nil == req || 0 == len(req.Provisionings) || 0 == len(req.Name) {
		return resp, fmt.Errorf("Request required")
	}

	if 0 == len(req.Metadata.CategoryName) {
		req.Metadata.CategoryName = "default"
	}
	if 0 == len(req.Metadata.ClassName) {
		req.Metadata.ClassName = "default"
	}
	if 0 == len(req.Metadata.FieldName) {
		req.Metadata.FieldName = "default"
	}
	if 0 == len(req.Namespace) {
		req.Namespace = "default"
	}

	resp.Name = req.Name
	resp.Namespace = req.Namespace
	resp.Metadata = req.Metadata
	resp.Provisionings = make([]*pb.DockerRunData, 0)
	for _, item := range req.Provisionings {
		if nil == item.Config.Labels {
			item.Config.Labels = make(map[string]string)
		}
		item.Config.Labels["created-by"] = fmt.Sprintf(`{
  "category_name": "%s",
  "class_name": "%s",
  "field_name": "%s"
}`, req.Metadata.CategoryName, req.Metadata.ClassName, req.Metadata.FieldName)
		item.Config.Labels["stackdocker.io"] = fmt.Sprintf("%s/%s", req.Namespace, req.Name)

		result, err := m.runContainer(item)
		if nil != err {
			return resp, err
		}
		resp.Provisionings = append(resp.Provisionings, result)
	}
	return resp, nil
}

func (m *myService) containersTerminating(req *pb.ProvisioningsData) (*pb.ProvisioningsData, error) {
	resp := new(pb.ProvisioningsData)
	if nil == req || 0 == len(req.Name) {
		return resp, fmt.Errorf("Request required")
	}
	if 0 == len(req.Namespace) {
		req.Namespace = "default"
	}

	ctl := dockerctl.NewEngine1_12Client()
	filter := filters.NewArgs()
	filter.Add("label", fmt.Sprintf("stackdocker.io=%s/%s", req.Namespace, req.Name))
	resultcontainers, err := ctl.ProcessStatusContainers(types.ContainerListOptions{
		Filter: filter,
	})
	if nil != err {
		return resp, err
	}

	resp.Name = req.Name
	resp.Namespace = req.Namespace
	resp.Metadata = req.Metadata
	resp.Provisionings = make([]*pb.DockerRunData, 0)
	for _, item := range resultcontainers {
		if strings.Title(item.Status) != "Exited" {
			if err := ctl.StopContainer(item.ID, time.Second*5); nil != err {
				return resp, fmt.Errorf("Could not stop container: %s; %s", item.ID, err.Error())
			}
		}
		if err := ctl.RemoveContainer(item.ID); nil != err {
			resp.Provisionings = append(resp.Provisionings, &pb.DockerRunData{
				StateCode:    102,
				StateMessage: err.Error(),
			})
			return resp, err
		}
		resp.Provisionings = append(resp.Provisionings, &pb.DockerRunData{
			ContainerId: item.ID,
		})
	}
	return resp, nil
}

func (m *myService) psContainers(req *pb.DockerProcessStatusReqResp) (*pb.DockerProcessStatusReqResp, error) {
	resp := new(pb.DockerProcessStatusReqResp)

	opt := types.ContainerListOptions{
		All:    true,
		Filter: filters.NewArgs(),
	}
	if nil != req && nil != req.Options {
		opt.Quiet = req.Options.Quiet
		opt.Size = req.Options.Size_
		opt.All = req.Options.All
		opt.Latest = req.Options.Latest
		opt.Since = req.Options.Since
		opt.Before = req.Options.Before
		opt.Limit = int(req.Options.Limit)
		if nil != req.Options.Filter {
			for k, v := range req.Options.Filter.Fields {
				for kvp, _ := range v.Value {
					opt.Filter.Add(k, kvp)
				}
			}
		}
		resp.Options = req.Options
	}

	ctl := dockerctl.NewEngine1_12Client()
	resultcontainers, err := ctl.ProcessStatusContainers(opt)
	if nil != err {
		resp.StateCode = 100
		resp.StateMessage = err.Error()
		return resp, fmt.Errorf("Failed to get containers status: %s", err.Error())
	}

	resp.Containers = make([]*moby.Container, len(resultcontainers))
	for i := 0; i < len(resultcontainers); i++ {
		resp.Containers[i] = &moby.Container{
			Id:         resultcontainers[i].ID,
			Names:      resultcontainers[i].Names,
			Image:      resultcontainers[i].Image,
			ImageId:    resultcontainers[i].ImageID,
			Command:    resultcontainers[i].Command,
			Created:    resultcontainers[i].Created,
			Ports:      make([]*moby.Port, len(resultcontainers[i].Ports)),
			SizeRw:     resultcontainers[i].SizeRw,
			SizeRootFs: resultcontainers[i].SizeRootFs,
			Labels:     resultcontainers[i].Labels,
			State:      resultcontainers[i].State,
			Status:     resultcontainers[i].Status,
			HostConfig: &moby.Container_HostConfig{},
			NetworkSettings: &moby.SummaryNetworkSettings{
				Networks: make(map[string]*moby.EndpointSettings),
			},
			Mounts: make([]*moby.MountPoint, len(resultcontainers[i].Mounts)),
		}
		for j := 0; j < len(resultcontainers[i].Ports); j++ {
			resp.Containers[i].Ports[j] = &moby.Port{
				Ip:          resultcontainers[i].Ports[j].IP,
				PrivatePort: int32(resultcontainers[i].Ports[j].PrivatePort),
				PublicPort:  int32(resultcontainers[i].Ports[j].PublicPort),
				Type:        resultcontainers[i].Ports[j].Type,
			}
		}
		if len(resultcontainers[i].HostConfig.NetworkMode) > 0 {
			resp.Containers[i].HostConfig.NetworkMode = resultcontainers[i].HostConfig.NetworkMode
		}
		if len(resultcontainers[i].NetworkSettings.Networks) > 0 {
			for k, v := range resultcontainers[i].NetworkSettings.Networks {
				resp.Containers[i].NetworkSettings.Networks[k] = &moby.EndpointSettings{
					IpamConfig: &moby.EndpointIPAMConfig{
					// LinkLocalIps: v.IPAMConfig.LinkLoclIPs,
					},
					Links:               v.Links,
					Aliases:             v.Aliases,
					NetworkId:           v.NetworkID,
					EndpointId:          v.EndpointID,
					Gateway:             v.Gateway,
					IpAddress:           v.IPAddress,
					IpPrefixLen:         int32(v.IPPrefixLen),
					Ipv6Gateway:         v.IPv6Gateway,
					GlobalIpv6Address:   v.GlobalIPv6Address,
					GlobalIpv6PrefixLen: int32(v.GlobalIPv6PrefixLen),
					MacAddress:          v.MacAddress,
					// DriverOpts:          v.DriverOpts,
				}
				if v.IPAMConfig != nil {
					resp.Containers[i].NetworkSettings.Networks[k].IpamConfig.Ipv4Address = v.IPAMConfig.IPv4Address
					resp.Containers[i].NetworkSettings.Networks[k].IpamConfig.Ipv6Address = v.IPAMConfig.IPv6Address
				}
			}
		}
		if len(resultcontainers[i].Mounts) > 0 {
			for j := 0; j < len(resultcontainers[i].Mounts); j++ {
				resp.Containers[i].Mounts[j] = &moby.MountPoint{
					Name:        resultcontainers[i].Mounts[j].Name,
					Source:      resultcontainers[i].Mounts[j].Source,
					Destination: resultcontainers[i].Mounts[j].Destination,
					Driver:      resultcontainers[i].Mounts[j].Driver,
					Mode:        resultcontainers[i].Mounts[j].Mode,
					Rw:          resultcontainers[i].Mounts[j].RW,
					Propagation: resultcontainers[i].Mounts[j].Propagation,
				}
			}
		}
	}
	return resp, nil
}

func (m *myService) reapInstantiation(req *pb.InstantiationData) (*pb.InstantiationData, error) {
	resp := new(pb.InstantiationData)
	if nil == req || 0 == len(req.Name) {
		resp.StateCode = 10
		resp.StateMessage = "Request required"
		return resp, fmt.Errorf("Request required")
	}
	if 0 == len(req.Namespace) {
		req.Namespace = "default"
	}

	ctl := dockerctl.NewEngine1_12Client()
	filter := filters.NewArgs()
	filter.Add("label", fmt.Sprintf("stackdocker.io=%s/%s", req.Namespace, req.Name))
	resultcontainers, err := ctl.ProcessStatusContainers(types.ContainerListOptions{
		Filter: filter,
	})
	if nil != err {
		resp.StateCode = 100
		resp.StateMessage = err.Error()
		return resp, fmt.Errorf("Failed to get containers status: %s", err.Error())
	}

	resp.Name = req.Name
	resp.Namespace = req.Namespace
	resp.Metadata = req.Metadata
	resp.Instantiation = make([]*moby.Container, 0)
	for _, item := range resultcontainers {
		resp.Instantiation = append(resp.Instantiation, &moby.Container{
			Id:         item.ID,
			Names:      item.Names,
			Image:      item.Image,
			ImageId:    item.ImageID,
			Command:    item.Command,
			Created:    item.Created,
			Ports:      make([]*moby.Port, len(item.Ports)),
			SizeRw:     item.SizeRw,
			SizeRootFs: item.SizeRootFs,
			Labels:     item.Labels,
			State:      item.State,
			Status:     item.Status,
			HostConfig: &moby.Container_HostConfig{},
			NetworkSettings: &moby.SummaryNetworkSettings{
				Networks: make(map[string]*moby.EndpointSettings),
			},
			Mounts: make([]*moby.MountPoint, len(item.Mounts)),
		})
		l := len(resp.Instantiation)
		// for _, v := range item.Ports {
		for i := 0; i < len(item.Ports); i++ {
			// resp.Instantiation[l-1].Ports = append(resp.Instantiation[l-1].Ports, &moby.Port{
			resp.Instantiation[l-1].Ports[i] = &moby.Port{
				Ip:          item.Ports[i].IP,
				PrivatePort: int32(item.Ports[i].PrivatePort),
				PublicPort:  int32(item.Ports[i].PublicPort),
				Type:        item.Ports[i].Type,
			}
		}
		if len(item.HostConfig.NetworkMode) > 0 {
			resp.Instantiation[l-1].HostConfig.NetworkMode = item.HostConfig.NetworkMode
		}
		if len(item.NetworkSettings.Networks) > 0 {
			for k, v := range item.NetworkSettings.Networks {
				resp.Instantiation[l-1].NetworkSettings.Networks[k] = &moby.EndpointSettings{
					IpamConfig: &moby.EndpointIPAMConfig{
					// LinkLocalIps: v.IPAMConfig.LinkLoclIPs,
					},
					Links:               v.Links,
					Aliases:             v.Aliases,
					NetworkId:           v.NetworkID,
					EndpointId:          v.EndpointID,
					Gateway:             v.Gateway,
					IpAddress:           v.IPAddress,
					IpPrefixLen:         int32(v.IPPrefixLen),
					Ipv6Gateway:         v.IPv6Gateway,
					GlobalIpv6Address:   v.GlobalIPv6Address,
					GlobalIpv6PrefixLen: int32(v.GlobalIPv6PrefixLen),
					MacAddress:          v.MacAddress,
					// DriverOpts:          v.DriverOpts,
				}
				if v.IPAMConfig != nil {
					resp.Instantiation[l-1].NetworkSettings.Networks[k].IpamConfig.Ipv4Address = v.IPAMConfig.IPv4Address
					resp.Instantiation[l-1].NetworkSettings.Networks[k].IpamConfig.Ipv6Address = v.IPAMConfig.IPv6Address
				}
			}
		}
		if len(item.Mounts) > 0 {
			// for _, v := range item.Mounts {
			for i := 0; i < len(item.Mounts); i++ {
				// resp.Instantiation[l-1].Mounts = append(resp.Instantiation[l-1].Mounts, &moby.MountPoint{
				resp.Instantiation[l-1].Mounts[i] = &moby.MountPoint{
					Name:        item.Mounts[i].Name,
					Source:      item.Mounts[i].Source,
					Destination: item.Mounts[i].Destination,
					Driver:      item.Mounts[i].Driver,
					Mode:        item.Mounts[i].Mode,
					Rw:          item.Mounts[i].RW,
					Propagation: item.Mounts[i].Propagation,
				}
			}
		}
	}
	return resp, nil
}

redpajama_set_name: RedPajamaGithub


Whenever the construction of a home is concerned, the planning is entirely important. If a house is build up without proper planning, the chances of it physical affluent and staying going on for a longer get older of time are agreed slim. However, if a house is made following a properly thought of concept and an idea in a person's head, then it is surely going to be a good place to rouse in for the residents as well as meet all their needs.
Now, most people who opt for house building think of designing it themselves. They attain not question for any practiced advice, and if they have an blank plot, they just hire builders and construction agents and manage to pay for them an outlay of their plans as to how they desire their home to look like.
For those who have no idea very nearly construction and how houses should be planned, this is an categorically poor idea. Your home is something that cannot be torn all along and rebuilt based upon the fact that it was 'poorly planned' and therefore the planning of your house needs to be accurate and certainly good.
There are several ways by which you can get home planning ideas. One of the most prominent ways to have houses planned is by pretend as a result online. There are various alternative methods that can be used in this regard. The simplest mannerism is to gain access to occurring a website of a fixed idea that offers planning in the country where you sentient in, and subsequently you can easily uphold get into following that company and order your plans from them.
However, it is agreed important that the company you choose should be trustworthy and standard for that reason that you are not fooled, because you would be paying allowance though acquiring the services of the company.
Secondly, you must create distinct that the company already has a very prominent publish in the auditorium of house planning, and you should check out the pictures in the builder calendar of that website to get a distinct describe as to how the houses are intended by those firms. This would come up with the money for a sure describe in the user's head correspondingly that he or she would acquire an idea very nearly the type of plot that might be returned. Secondly, you after that get customer retain options, correspondingly if you setting the house plan is not stirring to the mark and requires changes, that can be over and done with as well.
Home Floor Plans with 4 Bedrooms has a variety pictures that united to locate out the most recent pictures of Home Floor Plans with 4 Bedrooms here, and also you can get the pictures through our best Home Floor Plans with 4 Bedrooms collection. Home Floor Plans with 4 Bedrooms pictures in here are posted and uploaded by binladenseahunt.com for your Home Floor Plans with 4 Bedrooms images collection. The images that existed in Home Floor Plans with 4 Bedrooms are consisting of best images and high quality pictures.
These many pictures of Home Floor Plans with 4 Bedrooms list may become your inspiration and informational purpose. We wish you enjoy and satisfied following our best picture of Home Floor Plans with 4 Bedrooms from our hoard that posted here and in addition to you can use it for usual needs for personal use only. The binladenseahunt team in addition to provides the further pictures of Home Floor Plans with 4 Bedrooms in high Definition and Best vibes that can be downloaded by click upon the gallery under the Home Floor Plans with 4 Bedrooms picture.
binladenseahunt.com can assist you to get the latest information very nearly Home Floor Plans with 4 Bedrooms. revolutionize Ideas. We provide a summit character high photo gone trusted allow and all if youre discussing the house layout as its formally called. This web is made to slant your unfinished room into a helpfully usable room in comprehensibly a brief amount of time. for that reason lets admit a improved judge exactly what the Home Floor Plans with 4 Bedrooms. is all virtually and exactly what it can possibly pull off for you. in the manner of making an frill to an existing house it is difficult to fabricate a well-resolved progress if the existing type and design have not been taken into consideration.
Related Posts of "Home Floor Plans with 4 Bedrooms"


text:
Media Centre » Press Releases » PRESS STATEMENT
PRESS STATEMENT FROM CIVIL SOCIETY ORGANISATIONS IN ELECTION PROGRAMMING - 7TH JANUARY 2021
Today, 7th January 2021, Ghanaians are waking up to video recordings and media reportage of the appalling scenes in the Parliament of Ghana that characterized the sacred and solemn process of electing a Speaker of Parliament and swearing of Members of
Parliament.
The scenes witnessed by Ghanaians, and played out before the international community, betrayed our political leaders' proclamations, and expressed commitments, to democratic principles, the rule of law and the pursuit of the public interest. At the height of the disorder that ensued, first the Police were called in, and then Military officers were invited in to restore order. The presence of Military in the Chamber of Parliament was an extremely low point in the proceedings of Parliament. It reflects a recent pattern of excessive use of the Armed forces to deal with civilian matters. As a nation, we must quickly move away from this developing pattern as we move forward. Also, for a temporary period, the unruly antics of Members of Parliament Elect threatened to prolong a dangerous constitutional and governance situation, where there was no Parliament and no President to govern the country. We condemn in no uncertain terms, the snatching of the ballot box and expect the perpetrators of this act to be disciplined by the House.
Fortunately, the political leadership of the New Patriotic Party (NPP) and the National Democratic Congress (NDC) have managed to find a compromise, leading to the election of Alban Bagbin as the Speaker of the 8th Parliament of the 4th Republic; Joseph Osei Owusu as 1st Deputy Speaker, and Andrew Asiamah Amoako as 2nd Deputy Speaker. The resolution achieved by the two political parties confirms that the only way the 8th Parliament can succeed is by the two sides working together in a spirit of compromise, consensus-building, and accommodation, in the service of all Ghanaians, and in pursuit of development for the country.
Download Full Statement Below.
CSO-Statement-on-Transition-Issues-Final
EC and Political Parties must sustain level of mutual trust and dialogue towards election 2012
2019-CIVIL-SOCIETY-ORGANIZATION-SUSTAINABILITY-INDEX-GHANA
Ghanas-Political-Parties-From-Election-Machines-to-Drivers-of-Development
Volume-1-Issue-3-June-30-2016-IDEG-PUBLICATION-THIS-WEEK-NEWSLETTER-3-Edition


text:
Q: fatal error: bmpfile.h: No such file or directory I have installed the libbmp library from this link https://code.google.com/p/libbmp/ and I have made all the required steps to complete with the installation.
When I try to use it, by including the bmpfile.h like the example on the download page:
#include <bmpfile.h>

I get this error:
fatal error: bmpfile.h: No such file or directory

Does anyone know what I am doing wrong?

A: Presumably it was installed to /usr/local/include and your compiler doesn't look in that location. To fix this, you should set your CPATH variable to point there:
CPATH=/usr/local/include
export CPATH

This is typically done in your .bashrc or similar, or in your IDE if you're using one.
For more info check your compiler manual.


Jenson Button has played a brilliant game of poker in response to pressure from Ron Dennis in trying to bring his salary down.
Button has used the threat of retirement - a threat only he can know if he'd be prepared to deliver on - to effectively dare Dennis to initiate the contract break this Wednesday that would be necessary to not pay Button the contracted terms of the second year of his current agreement. Button has skilfully used the media by refusing to refute the retirement rumours, with the purpose of instilling greater doubt in Dennis' mind about whether he'd be prepared to deliver on his threat.
Button last year negotiated a two-year McLaren deal, believed to be worth £18million (£6million for 2015, £12million for 2016). As is quite common, the payment was 'backloaded' - i.e. the lion's share comes in the second year - with a contract break on McLaren's side that would allow it to nullify the contract at the end of the first year. In this way, the team is protected if it feels the driver has under-delivered because the team isn't actually committed to anything in year two.
However, if it intends to initiate the contract break, there will be a cut-off date by which it has to inform the driver. In this case it's believed to be September 30th - i.e. this Wednesday.
Because McLaren is facing a difficult financial time, it would ideally like to retain Jenson but at a significantly reduced fee. Its initial 2016 budget was based around finishing fifth in this year's Constructors Championship whereas the reality looks like ninth place. The difference in team income between those two positions is around £15million. Suddenly, a £6million increase in Button's salary begins to look very expensive - even if it is only around half the salary of team-mate Fernando Alonso, who is contracted for three years and largely paid for by Honda.
It was with this backdrop that Dennis tried to lower Button's salary. The implication was that he would initiate the contract break, nullifying the current agreement. This would then leave him free to negotiate with Button a new - and cheaper - contract. Button's reaction to that has been to play hardball - to say in effect, 'If you initiate the contract break I will refuse to negotiate a new contract and will retire'.
Dennis could, of course, initiate the break regardless - and either accept Button's retirement or gamble that he doesn't really mean it. In this scenario Button cannot afford for Dennis to believe that he is not prepared to deliver on his threat. Hence it plays very well for Button for the media to believe he is genuinely considering retirement. They have inadvertently become part of his negotiation strategy.
Why would Dennis not simply initiate the break and accept that Button will retire? Partly because of what Button brings to the team as a driver, but also because of his very high marketing value. The commercial value of his name and image is vastly higher than either of the junior drivers he'd be replaced by. Normally, a talented junior driver can be made marketable very quickly - by success. But with the McLaren-Honda partnership in an uncompetitive early stage, success cannot be guaranteed for quite some time. In order to give the commercial team a good opportunity of raising backing for the team, Button's presence is hugely valuable.
Complicating the matter further for Dennis - and playing perfectly into Button's hands - is the matter of Fernando Alonso's future with the team, brought into doubt by comments from his manager Flavio Briatore, and also by Alonso's frustrated comments during the Japanese Grand Prix about the Honda's lack of power at the Honda-owned Suzuka circuit on Sunday. If Alonso did decide to leave short of his allocated contract time, and Button had retired, the commercial team would be left with a team line-up of unknowns.
For all McLaren's current struggles, its driver line up of two world champions is one of its last links to its great days. For the sake of McLaren's standing in the commercial world, it badly needs not to call Button's bluff.
How are the French drivers faring?
Can McLaren beat Red Bull in 2018?
Can Merc beat Ferrari's concept?
Could Indy 500 save McLaren-Alonso?


text:
Kleinzierling (auch Sternhaus genannt) ist eine Wüstung auf dem Gebiet der Gemeinde Rattenberg und war ein Ortsteil der ehemaligen Gemeinde Siegersdorf im Bezirksamt Bogen.

Der Ort liegt 500 Meter südlich von Zierling neben dem Prädikatswanderweg Goldsteig.

Geschichte

Die Einöde Kleinzierling gehörte zum Landgericht Mitterfels und gemäß den Matrikeln zur Pfarrei Konzell, nach den Daten der Volkszählungen aber zur Pfarrei Rattenberg. Der Ort, der immer nur ein Wohngebäude hatte, wurde in der Zeit zwischen 1900 und 1916 als Wohnplatz aufgegeben. Historisch wurde auch die Bezeichnung Sternhaus verwendet. Das etwa 20 Tagwerk große inzwischen unbewohnte Anwesen wurde 1920 an die Eigentümer des Rinkl-Simandlhofes in Zierling verkauft.

Einwohnerentwicklung
 1835:  3 Einwohner
 1860:  5 Einwohner
 1871:  7 Einwohner
 1875:  5 Einwohner
 1885:  7 Einwohner
 1900:  5 Einwohner
 1913:  0 Einwohner
 1925:  0 Einwohner

Weblinks

Einzelnachweise

Ort im Landkreis Straubing-Bogen
Rattenberg (Niederbayern)
Wüstung im Landkreis Straubing-Bogen
Einzelsiedlung

redpajama_set_name: RedPajamaWikipedia


text:
Swim veterans turn back the clock
Sun, 12 February 2012 12:33PM
Veterans Geoff Huegill and Michael Klim turned back the clock as the comeback swimmers qualified for the 100m butterfly finals at the NSW championships in Sydney on Sunday.
Competing together for the first time in almost six years, Huegill clock 53.17 seconds and Klim 53.72 to reach Sunday night's final along with the likes of Jayden Hadler (52.71) and Nick D'Arcy (53.28).
"It brought back a lot of memories for me which was quite exciting," Huegill said of racing his former arch rival Klim, who beat him to gold at Pan Pacs in the same pool at Sydney Olympic Park 13 years ago.
"This is a guy who has experience, he's a former world record holder, he knows what needs to be done."
Huegill, 32, revealed he had considered pulling out of the Sydney meet after a disrupted preparation due to a virus picked up in January.
His build-up for next month's Olympic trials has also coincided with the birth of his first child Mila last month but Huegill said fatherhood had not hindered his preparations.
"The baby stuff has been a breeze," Huegill said.
"I've been banished to the other end of the house so I've been able to get my eight-nine hours of sleep at night and sleep during the day.
"My family has just been amazing and so supportive, I couldn't have asked for anything better."
Klim, 34, was encouraged by another solid swim after improving upon the best 100m freestyle time of his comeback in Friday night's final.
"I seem to be backing up at a consistent level, now I've just got to jump to the next one," Klim said.
Stephanie Rice continued her comeback from shoulder surgery with a decent swim to qualify for the final of the 200m individual medley.
Rice (2:17.35) was fourth fastest behind Emily Seebohm (2:15.52) and said she would swim in the final with her troublesome shoulder feeling OK.
"It felt pretty good on the day off (on Saturday) and it was nice to have a day off and just get some good physio and massage in," Rice said.
Matt Abood (22.26) led the way into the men's 50m freestyle final, ahead of a strong field including 100m world champion James Magnussen (22.92) and Eamon Sullivan (23.04).
Magnussen said he mainly used the 50m event to practice for his pet event but would not knock back the chance to swim in the shorter event if he can qualify for it at trials.
"If I'm quick enough, I'd certainly be happy to represent Australia in as many events as I can," Magnussen said.
Leiston Pickett (30.95) topped the women's 50m breaststroke heats, with Leisel Jones opting not to swim.


Test applications received and dated between January 2nd 2017 and May 31st, 2017 (some listings represent applications prior to Hombu approval, applications not received by posting date will not be listed in the post).
Aikido Is Frustrating. It's Supposed To Be.
You're sitting there. Your legs hurt after a bunch of suwari-waza. The instructor demonstrates a technique, and you can tell there's some subtlety to it. He shows it 3 times, pronounces its name, and says "Ok, partners"… and there you are, left mainly to your own devices.
Except, not in aikido. NOT during practice.
In our culture, we are brought up to ask questions. We are encouraged to ask, and in most aspects of life, we are rewarded for them with explanations leading to a more acute understanding. "Ask and ye shall receive." Even our government was once revolutionary in its dependence upon questioning policy and authority; dissent and discussion.
Aikido is different. It HAS to be experienced. You HAVE to fail. It will resist every attempt to convey it orally. That's not to say you can't talk about it or read about it – that absolutely enriches your practice. But don't expect giving voice to your concerns to improve your technique where "the rubber meets the road" (or where "the face meets the mat", for that matter). Ridiculous though it may sound, "he who questions training only trains himself at asking questions".
On a certain level, this can seem a challenge at best and infuriating at worst. But when you realize that you are subscribing to a centuries-old philosophy of learning and preserving an art which has been evolving for generations, you find that it's not a liability at all. It's exactly what you signed up for. By feeling your way through this art with the guidance of your teacher, you will develop your own connections, conscious and otherwise. You will come to appreciate the fluidity of the movements, the symmetry of the positions, and the adaptability of the techniques. You will internalize those elusive, conceptual points which you initially took for granted. In short, you will find the way to make aikido your OWN… which dissolves a question too colossal to voice, let alone answer.
So yeah. Aikido is frustrating. It's supposed to be.