|
TSGL
A thread-safe graphics library
|
Draw a Mandelbrot set. More...
#include <Mandelbrot.h>
Public Member Functions | |
| Mandelbrot (unsigned threads, unsigned depth) | |
| Explicitly construct a Mandelbrot object. More... | |
| virtual | ~Mandelbrot () |
| Destroys a Mandelbrot object and any children of the Mandelbrot class. More... | |
| void | bindings (Cart &can) |
| Binds buttons and/or mouse clicks. More... | |
| virtual void | draw (Cart &can) |
| Draw the Mandelbrot object. More... | |
Protected Member Functions | |
| void | manhattanShading (CartesianCanvas &can) |
| Shades the fractal using Manhattan distances. More... | |
Protected Attributes | |
| int | myThreads |
| unsigned int | myDepth |
| bool | myRedraw |
Draw a Mandelbrot set.
Contains the information necessary in order to draw a Mandelbrot set onto a CartesianCanvas.
Can zoom in and out of the screen by scrolling up and down on the mouse wheel (respectively).
Same is true if you click on the left mouse button (zoom in) and right mouse button (zoom out).
| Mandelbrot::Mandelbrot | ( | unsigned | threads, |
| unsigned | depth | ||
| ) |
Explicitly construct a Mandelbrot object.
Explicit constructor for the Mandelbrot class.
| threads | The number of threads to use in drawing the Mandelbrot object onto the CartesianCanvas. |
| depth | The number of iterations to go to in order to draw the Mandelbrot object. |
|
inlinevirtual |
Destroys a Mandelbrot object and any children of the Mandelbrot class.
Destructor for the Mandelbrot class and its children.
| void Mandelbrot::bindings | ( | Cart & | can | ) |
Binds buttons and/or mouse clicks.
Binds buttons and/or mouse clicks needed for I/O capabilities.
In this case: the mouse wheel, left and right mouse buttons.
| can | Reference to the CartesianCanvas to have the buttons bound to. |
|
virtual |
Draw the Mandelbrot object.
Actually draws the Mandelbrot object onto the CartesianCanvas.
| can | Reference to the CartesianCanvas to draw on. |
Reimplemented in Buddhabrot, GradientMandelbrot, Julia, and Nova.
|
protected |
Shades the fractal using Manhattan distances.
This function may be called after the Mandelbrot has finished rendering to do some post-procecssing using the distances from non-escaped pixels to their nearest escaped pixels, using the average of their Manhattan distances.
Referenced by Nova::draw().


Printed
Sunday, June 01, 2008
I woke and got up at 6:45AM and read my scriptures meditating about Faith, Hope and Charity along with the Blessing of Rachael Lynn today. How I pray that I can be lead in the prayer that I give. My Fasting today will sure be along those desires. David’s family will not be there as they are out of town. I gathered from Tyler that this is a fishing trip that they will be to. I fear that it is an excuse so that David will not be present when his other two brothers join the circle for the Blessing. Oh how wish, hope and pray that some how David and Jeff can somehow be touched.
The weather was so nice that we walked to our church house. We attended our meetings and enjoyed them. After getting home I went outside and fed the rabbits. The white and brown rabbit is pulling fur and making a nest. She should have kits before long. I don’t think the black rabbit took. When I came back I noticed that the dog had dug in the flower bed and made quite a mess. It really upset me and I do not like the feelings I have about the dog and the attitude that Carroll seems to have about it. After cleaning up the mess I came inside and tried to take a nap. I rested but was so upset over the dog that I didn’t sleep.
We went over to Jeff and Gail’s about 2PM and had time to set up the table and chairs before we went to the church. There were two babies to be blessed today. I had been asked by Gail to give the blessing of Rachael Lynn and that really pleased me. I felt impressed that I should keep the Blessing simple and so did. After Gail told me that Jeff was concerned that I would give a detailed long Blessing, but was very pleased with the prayer. Those that stood in the circle were - member of the bishopric, two Brother-in-laws, Mike, Scott, friend, Ben, Trent and myself. After the meeting we all went to Jeff and Gail’s and had a nice lunch in the back yard. After everyone else left Mae and I stayed and played games with Jeff and Gail. We did so poorly in Rook that we called it a tie and changed games.
Mike showed me his GPS and showed me how it works. He let me try it for a few days to decide if I should buy one to help me drive the bus routs. We used it as we came home this evening. I think it will work ok.
Monday, June 02, 2008
We slept in and then while I got dressed Mae fixed breakfast.  Mark and I took it up to the dumps and unloaded it. I then took Mae into the Oral Surgeon to have a tooth extracted. We visited with him with our concerns about the work still recommended on Mae’s teeth or whether she should have them removed and replaced with dentures. After examining her teeth, he strongly recommended that she not go with dentures but save her teeth as long as possible. He was able to remove the one tooth with out much difficulty and all of the tooth came out intact. After bringing Mae back home I went to the pharmacy and filled a prescription for pain medication and one for infection. I also filled my prescription for another month is starting. I replaced the sprinkler that I cut off when mowing the lawn on Saturday. Bob came out and asked me to look at his kitchen floor as it is swelling but I cannot find water getting into it. I went over to Georgia and Rick’s and checked out the form for pouring concrete tomorrow. They look pretty good but will take a little more concrete than I expected. I got all my tools loaded up for tomorrow. I bought Mae a milk shake for supper and then I got some turkey and some potato salad for my supper. We watched a show on Comcast and I made this entry before we went to bed. Mae seems to be filling fairly good as we retire tonight.
Tuesday, June 03, 2008
I got away about 7AM and stopped at The Home Depot and bought me some concrete boots as I have been unable to find mine. I went to Save More Concrete where I purchased 1 ½ yards of concrete in a mixing barrel trailer. I got to Rick and Georgia’s about 9AM. Mae had found my boots and so took them over to Rick and Georgia’s. I had her return the pair I had bought this morning. Rick had a young man from his Singles Ward come and help us wheel the concrete. I showed Georgia how to operate the concrete barrel so she could unload the concrete. After getting the concrete laid I had Rick return the trailer. I tried to get a Fresno trial but when I returned with it the concrete was to far set and I had to trial it by hand. I finished up the concrete about noon and then Rick and I measured for the next pour. I came home and ate and then lay down and took a nap. Mae tended Benji today. Mae is feeling very good after the tooth extraction yesterday. We are sure thankful for that. I washed the tent trailer this evening. While eating dinner we watched a movie on TV. Mae got on the inter-net. I took a shower and prepared for bed and then entered this entry.
Wednesday, June 04, 2008
I didn’t sleep very well last night and spent sometime in the recliner. It was a rainy morning which lasted all day so that put a damper on things. Scott and Jeff came over for lunch. I worked with Mike’s GPS trying to decide if it will work for my bus routes. I had to go into the bus terminal to get some information that I hadn’t recorded for the two field trips I took last week. Mike, David, Mattie and Jesse came up this evening. Becky and Page will be going up to Jackson, Wyoming with Becky’s Mother and sisters. Mattie and Jessie will stay with us until Becky come home on Saturday. Mae had dinner ready when they got here. Bob and I went home Teaching to Patriarch and Sister Johnston this evening. Mike and David stayed until I got home from Home Teaching. They then moved the rabbit pen over to the West Side where I have the buck’s pen. Mae took a picture of the three of us and it is quite a stepping stone picture with age being the short end. Mae read the girls a story before putting them to bed.
Thursday, June 05, 2008
I woke about 6 and read more in my study manual but then crawled back in bed and cuddled with Mae. The girls were quiet when they got up. Mae was busy with them most of the day, but she seemed to have had fun being with them. I repaired another sprinkler head that I mowed off the other day. I went to Dallen Green’s and bought some clover seed, a spreader and some rabbit pellets. I then went down the street from our house and cut some alfalfa for the rabbits. I tilled the old garden spot again, had Bob rack it down with the lawnmower pulling our harrow and then I planted it with a mixture of clover and alfalfa seed. I used some corrugated metal and covered the roofs of the rabbit pens. Bob cooked dinner for us and after eating I put my tools away. I had came in and set down to relax when Sister Fallis called to see if we were coming Home Teaching this evening. I had forgotten and so had Bob, but we quickly changed and went. We did enjoy visiting with Brother and Sister Fallis and gave them a lesson. They then asked us to give Brother Fallis a blessing as he is going into the Doctors to consult about cancer problems. We also saw the Casey’s for our normal doorstep visit. I don’t know if we are doing any good but we are at least saying hi to the each month. When we got home I filled in my journal entry for the day. Mae read a story to the girls before she put them to bed. I have got to go to work early in the morning so we need to get to bed early also.
Friday, June 06, 2008
I got up early to go to Rick and Georgia’s to make another concrete pour. It went well and I finished about noon. They paid me $300 for the work I did which was more than I ask for. Mae took Mattie and Jessie and also Kylan and Ashley to Dinosaur Park in Ogden. When I got home Bruce was about to leave. He had came to visit his parents but they were gone to Dr. appointments. I invited him in and I warmed some stew and had salad. We visited for quite a while before Bob and Carroll returned and he went upstairs to visit with them. I laid down for a nap, then Bob came down for some reason and woke me. I felt like I had just gone back to sleep when Mae and the children came bursting in and woke me with a start. Mae and the children didn’t get back until almost 5PM. Bob brought home made spagitti down for our dinner. I think that is what he woke me to inform me that he was making it. Shellie called Mae today and said that Garrett had received his Mission Call and they would call us this evening at 8PM when Garrett opened the letter and we could hear where he is called to serve. They did call at 8PM and Garrett read the call. He is called to serve in the Washington Kennewick Mission and will report to the Provo Missionary Training Center on August 20th, the day after his 19th Birthday. He sounded very excited about the call. We asked them to let us know when he will be speaking as well as when he will be set apart. We will try to be there for these special events.
Saturday, June 07, 2008
I woke about 7 AM but Mae was already up. I was afraid that she hadn’t slept but found out that she had just got up before I did. I was busy most of the day with just odd jobs. I did get my trailer hitch repaired, some things ready to go camping and I went over to Fallis’s and rotivated their garden again. Mike came and got the little girls about 3PM. They have been fun to have here but it has kept Mae going. We went shopping for groceries with most of it being for next week. Time sure went fast today. I had got the recorder working and recorded a John Wayne movie. We went to bed and watched the movie but the recording had gone to long and we missed the last of the show.
Sunday, June 08, 2008
I woke at 6:30AM so I could do some more studying on the Priesthood lesson. I changed my approach to the lesson and was not quite sure if I was ready to give it or not. I went over to the chapel at 8:15AM to set up chairs but most of it was completed when I got there. The lesson went well and I felt good about it. Scott and his family came over and had lunch with us. he brought the children’s bikes over with them. We removed the training wheels from Ashley’s bike and Scott helped her learn how to ride with out their aid. Mishelle was quite tired so we let her take a nap while we spent time with the children. This evening Bob, Mae and I stopped and got Irven and Sandy and we went to S.L. where we attended the Baptismal of Robert Bottom. Cheryl was sure excited for this to happen. It was great to see Bob’s determination to change his life when he started taking the missionary lessons. I think they will set goals now to have their marriage sealed in the Temple as soon as they can. After getting home we ate some dinner. I got a call from Patriarch Johnston asking if I could help him give his wife a Priesthood Blessing. I quickly put on my tie and jacket and went over. Sister Johnston is having high blood pressure so they are concerned about that. I filled in this entry and we went to bed. We decided to watch a DVD before going to sleep. It was almost mid-night when it got over and we went to sleep.
Monday, June 09, 2008
We slept in and hadn’t been up very long when Bob came down to tell us that the weather report doesn’t look good for the rest of the week. I had Bob make some waffles for breakfast. It took us all morning to get packed up and ready to go. When I hooked the trailers together I found that the plug had been bent. I couldn’t get the right signal light to work but we left anyway. We went into Ogden to buy a pressure cooker but they didn’t have the one we wanted. It was 3PM when we got to East Cannon and then we had trouble finding a camp space as they were reserved for the weekend. We got camp set up and I cooked Dutch oven chicken for dinner. David, Shauna and the children came and ate with us and visited for a while before David and Shauna went home. The children stayed over night with us.
Tuesday, June 10, 2008
I woke about 6:15AM having a dream that there was a wind and our folding camp trash can blow away. I got ready to go fishing. Tyler and Emily woke and wanted to go also. Mae fixed us a quick breakfast and we went down to the lake. Emily caught the first fish and the second. Tyler and I each caught one but mine was a smaller one so we let it lose and kept another that Tyler caught. I called Mae and had she and Conner come down. We took the fish that we had caught back to the camp trailer and then went out again. It was quite windy so we went to the west side of the lake. Emily again caught the first fish. I drove the boat while the others fished. After loosing two or three Mae had me help Conner fish and we caught a couple while Tyler and Emily caught the rest of our eight fish. I had Mae go get the truck and trailer and she did a perfect job of backing the trailer into the lake. We came back to camp and cleaned the fish and put eight of them in the freezer. We flayed and cooked up the four and had them with fried potatoes for lunch. After eating we washed up the dishes and put things away. I took a nap and then we drove to David and Shauna’s to take the children home. In order to get all of us in the pickup, Mae rode in the back. as we drove down I told the kids of how when I was about Tyler’s age my mother was driving our pickup over Jackson pass and we had picked up a hitchhiker on the Wyoming side of the pass and took him to Victor. After telling them that story they asked for another story so I told them the experience of going to the auctions with Dad and the time we took started to take the bull to the auction. That lasted until we got to David’s. Mae stayed and went to the ball game that Tyler played in. I went back down the valley and got some natural gas for the truck, several items at home that we forgot and I stopped at The Home Depot and bought some nuts and bolts. When I got to David’s they were eating dinner. After eating we visited and Mae had been talked into staying there tonight. As I thought about it I was concerned about our equipment that was up there and we decided to go back to camp. We were concerned as to whether we would get there by 10PM when the gates are closed but we got there just in time. We stayed up until 2AM playing rook, knock and taking showers. I had forgot to take my stomach pill this morning and so had to set up in the recliner to sleep.
Wednesday, June 11, 2008
It was cold and was snowing this morning so we just stayed in bed until almost noon. We finally got up and got some breakfast even though it should have been lunch. Mae is such a wonderful wife and sweetheart and so good to me. I did some repairs to the boat trailer. Mae had decided that she would stay at the camp and let me go fishing. She then reconsidered and went with me and was going to read in the boat. I caught a fish right after we started on the lake and Mae reconsidered and decided that maybe she should also fish. We had a good time and it ended up Mae kept 5 fish and I only kept 3 fish. We wiped the boat down after bring it off the lake. When we got to camp I cleaned the fish and sealed them for the freezer. Mae made a shrimp and macaroni salad for tomorrow. Randy and Judy will be coming up sometime in the morning and then in the evening Jeff, Gail, Benji and Rachel will come up and stay over night and fish with us Friday morning. We played a game of Rack-o of which Mae started out way ahead but then it turned around and I won. We went to bed about 10:30 this evening.
Thursday, June 12, 2008
The furnace ran out of gas early this morning but it was warm enough that we just turned the furnace off and cuddled up and slept until after 6:30AM. This morning is a beautiful clear sun shinning day. We had a nice breakfast and got things ready for when Randy and Judy comes. I sure have a beautiful wife that is so neat to be with. I called Randy about 8AM to see what time they would get to the lake. Randy had slept in and they were just about ready to leave. We gave them a little longer and then we took the boat down and got it launched. We went out for a while before they got there. I mainly kept lines baited, netted fish and drove the boat. Judy caught the most fish but both Mae and Randy caught limits. Randy was hurting from the operation but it was good for him to get out and have some fun. Shortly after they left I drove down to Morgan and bought a tank of propane. As I was driving down the canon, Jeff and Gail passed me going up to camp. When I returned to camp, we ate dinner. We put the children down to sleep and we played some games. It was mid-night when we went to bed.
Friday, June 13, 2008
I woke at 6AM but Jeff slept until almost 7AM. I walked up to the restrooms and then hooked up the boat. Jeff got up and he and I went out fishing for a little while. Mae called me when she had breakfast about ready and we came back in. After breakfast, we all went for a boat ride. Benji was not quite sure if he liked the boat ride or not. We came back about 11AM and packed up camp. Jeff and Gail took our trailer down the canon with them to save us from having to pull both the trailer and the boat. Mae and I went back out fishing this afternoon and in three hours we caught both limits. We cleaned the boat after taking it off the lake. We were very tired when we got home but had to unpack some things. When I let the tail gate down of the pickup it wouldn’t go all the way down. When I checked for the reason why I found that our camera was laying on the bumper. How it got there we did not remember. We mainly did the basics and let the rest go until tomorrow. It was sure nice to come home to a clean house.
Saturday, June 14, 2008
We slept in until 8:30AM and then got up in time for fish breakfast with Bob, Carroll and Mark. I took up a pan of fish last night to Bob if he would cook them up this morning. We finished cleaning up and putting things away. I took care of the rabbits. We had to return the sprinkler that we bought last week and get another. We bought me some sandals and Mae some shoes. We went in to Ogden to find Mae a dress but couldn’t find anything that we even considered. We picked up the trailer from Jeff’s on the way. After walking through the New Gate Mall I was sure disgusted with the immodesty and tattoos that was so prevalent among the customers in the mall and the immodest styles and sloppy clothing that is displayed by the mechanics in the stores. We left with out finding anything that we even considered purchasing. We came home and got ready to leave again. We picked up Scott and then drove up to a chapel in Fruit Heights where we left our car.  This was we car pooled to the Sizzler in Sager House where we met Mike and Sandi for dinner. The kids took Mae and I out for a Fathers Day gift. It was a lot of fun to be with our children. All of our children were there except for Shellie. After eating we went for a walk in a near by park. We then set on the lawn and visited about Mae and my 50th Wedding Anniversary next year. It was late when we got home but it was a very special evening.
Sunday, June 15, 2008
We slept in later than normal this morning. I got a call from Brother Higley letting me know that I did not have to come over to set up chairs. Mae wasn’t feeling very well but got up and we went to our block meetings. Bob and Carroll invited us up for dinner after Church. I visited with Mark while Mae cleaned up from dinner. I tried to write in my journal but was too sleepy. Mae and I finally took a nap. When we got up I wrote on my journal and some more history. Mae worked on the inter-net. Bob called and invited us to play Canasta this evening. We went up and played until after 11PM when Bob and I finally won them. It was a close game. Mae and I then came back downstairs and worked on our computers. I did catch up my journal entries. I also got some history add to. Bob called and asked if we would like to play a game of Canasta so we went upstairs. To nights game was close but in the end Bob and I won. It was late when we got to bed.
Monday, June 16, 2008
We slept in and were late eating breakfast. I worked on the computer for a while getting files on our rabbits set up and records updated. I adjusted some of the sprinkler stations so that we got a more even coverage. I still have one head that I think we need to move. I got more things put away from last week’s trip. We did some planning for a trip to Idaho. Bob and I went down 1300 North to where the main power lines cross and there we cut down some hay that is growing on city property out side the fence line of a field. The owner came down and talked to us but was ok with us cutting the hay. We laid it out in a wind row to dry. I talked to Bob’s home owner insurance co. about the floor problem upstairs to get an appraiser to check it our. I took Brother Farr’s Family History Records back to his house. Mae and I went to Lagoon this evening to be with Scott, Mishelle, Kylan and Ashley for Kylan’s Birthday. We just enjoyed being with them and didn’t ride any of the rides. We did go into the musical show that is put on nightly. It was after 10:30PM when we got home. I filled in my journal while Mae showered. We were tired tonight.
Tuesday, June 17, 2008
I woke early but went back to bed and slept until almost 9AM. Mae had got up and was ready when David brought the children at 8AM. She took the children into Ogden and they went to the Dinosaur Park. The stayed there until 2PM and then Mae met Shauna at the mouth of Weber Canon and she took them home. I went to Home Depot and bought material to build a fence around the flower garden to keep the dog out of it. I took the rain gutter down that is over the walkway and reinstalled it so that it wouldn’t drip water on the walk way. Mae had got home before I finished with the rain gutter. I talked with the insurance co. and the adjuster and the company that will come to give a bid on the repairs for upstairs. This evening we watched a couple of shows on TV. As we did Mae balanced the bank statement and I capsulated my Mannatech product as we were out of capsules product. It was 11:30PM when we finished up and I made this entry and we went to bed.
Wednesday, June 18, 2008
I seem to keep busy today but am not sure where the time went. I looked on the internet trying to find New Zealand White rabbits but didn’t have much luck. I started on the fences for the flower beds but we decided to change the design. I hope this works. I did quite until almost 9PM. Mae prepared lunch for the boys but Scott couldn’t come.  This evening Mae went to a Relief Society Program.
Thursday, June 19, 2008
I woke about 4:30AM so laid in the recliner and dosed for a couple of hours more. We went into the Ogden Temple this morning and when we went into the Chapel we set next to Tom and Sherolyn Egelund. We have been trying to find time to meet them at the Temple for some time but this wasn’t planned. After the session we went out to lunch at the Chuck-A-Rama and sure enjoyed visiting and being with them. This is the first time that we have met Sherolyn. We came home and were so tired that we laid down for a hour nap. I got some things taken care of out side and then it was time to go over to Benji’s Birthday Party. It was just cake and ice cream with Gail’s mother, Gail’s sister Melody and her daughter, Brandi with Noland joining a little later, and Mae and I. It was a nice time. We came home and got a few things ready for in the morning and went to bed.
Friday, June 20, 2008
We got up at 6AM but by the time we had breakfast, fed the rabbits and packed it was 10AM before we left home. we stopped in Roy at the fruit stand and bought a few items, then we stopped in Brigham City and filled up with natural gas and checked the tires, so each stop adds to time. With fueling in Brigham City we were able to get past Blackfoot on natural gas. We stopped in Idaho Falls where I bought a fishing license. That was more expensive than I thought it would be! We also found a Sub-Way and bought a sandwich for lunch. We made another stop in Swan Valley to get Mae an ice cream cone. It was after 4PM when we got to Victor. We drove to Mike Harris camp ground and found that the only water is still a hand pump, so we drove back to Victor and bought some mosquito repellant for the mosquitoes are terrible up there. We also filled the water tank on the trailer. I realized that I had forgotten the keys to the camp trailer when we left home. I had to bend one of the locks when we got back to camp, in order set the trailer up. It was a beautiful evening and after eating dinner we went for a walk. We played some games before going to bed.
Saturday, June 21, 2008
We slept fairly well but both of us were concerned for the bear notices posted around the camping area. The furnace ran most of the night and emptied the one gas tank. After breakfast we called Shellie to wish her a Happy Birthday. I made yesterday’s journal entry because we have to run the generator for 120 V power and it si to noisy to run in the evening. We went to Victor and bought a new cane of propane. It is cheaper here than it is in Utah. We then went out to Craig and Carla’s. Most of Rich and Lois’s family were there, Nola came but she isn’t doing very well. Craig and Carla had made Dutch oven chicken and hash browns and everyone else brought the trimmings for a very nice dinner. This afternoon we visited, worked some on Family History and played Mormon Bridge. We came back to our tent trailer about 10PM and soon went to bed.
Sunday, June 22, 2008
We got up and fixed a light breakfast.  It is slow as the water pump just has a faucet that pours out if you hold up a valve. Therefore you hold the valve with one hand and pump with the other. At least ¼th of the water misses the hole in my water jug. Church started at 11AM and we got there about 20 to. We enjoyed the meetings and them after we went to Craig and Carla’s. They had a nice dinner for all the family. After dinner we just visited and watched pictures that Elise had put together of Rich and Lois’s life. I went into town and bought a couple of fishing items. I was not able to find anyone that sold worms. I went back and borrowed a shovel for Craig and tried digging some but couldn’t find any. When Mae and I came back to our camp we went down by the creek and dug a few but they are small.
Monday, June 23, 2008
I got up at 5 this morning and went fishing. I tried by the creek here at the camp but didn’t have any luck. I then went to the head of the Teton River but didn’t have any luck there either. Many parts of the river are closed to privet lands and due to the piped irrigation many of the streams have changed. I gave up and came back to our camp at 8:30AM.  It has swollen and turning color as the day goes on. We went over to Craig and Carla’s about 1PM and visited with Rich and Lois. Most of the others had gone on a hike and got home about 4PM. We went over to Swan Valley where I went fishing at the spillway of the dam. I caught one nice fish that was 16 to 17 inches long but it was slow. It was about 10PM when we got back to our camp. We soon went to bed.
Tuesday, June 24, 2008
We got up about 6AM and were busy packing and getting things ready to leave. We had fish and eggs for breakfast. After getting most things ready we took showers but I put back on everyday clothes for putting the tent trailer down. It was 10:30AM when we left the camp grounds and went to Rexburg. We found a service station and filled up with gas plus I had to add some coolant and a new windshield wiper. I also used the restrooms to change to my good clothes. We got to the Temple and went on the 12:45PM session with Rich and Lois. Almost all of their children were also on the session. Also Linda came and so did Nola. Nola has been with the family for most of the activities this weekend. After the Temple session we went to a restraint and ate lunch with all the family. We then left for home, stopping in Pocatello at the Maverick to get a frozen yogurt. It was almost 10PM when we got home. We unloaded what was necessary and then watched a movie before going to sleep.
Wednesday, June 25, 2008
We didn’t get out of bed until 9AM. Mae was busy all day getting clothes washed and putting things away. I had to put the camping gear away and take the trailer to the sewer dump. I closed my account that I used for handyman work. I had to repair the gas valve on the camp trailer. Before quitting for the day Bob and I finished building and then spray painted the trellis fencing. We got on the inter-net and did some searching for airline tickets so that we can fly to Arizona and back in August. That will be cheaper than driving with the present costs of fuel. I filled out my journal and took a shower before going to bed. Mae got on the inner-net and tried to purchase air-line tickets for us to fly to Arizona round trip. She couldn’t get it set up and it was already past 11:30PM so she held off until tomorrow. It was after mid-night when I got to bed.
Thursday, June 26, 2008
I got up at 4AM so I could get to Randy’s by 6AM. Mae had stayed up last night and made me a lunch and set every thing out for breakfast when I got up. Randy was ready, when I got there and we drove up to East Cannon, getting there at 7:30AM. Fishing was slow but by 1:30PM we had our limits and came in. We had to stop and buy ice to put on the fish to keep them as we came home. When I took Randy home I gave him 4 fish. Judy wasn’t sure she wanted them as she would have to clean them. I cleaned them for her. Normally we would clean then at the lake but the cleaning station is shut down for repairs. When I got home I then cleaned the four fish I kept. We decided to take them to Bob so he could cook them for us for breakfast tomorrow. I was sure tired tonight.
Friday, June 27, 2008
Neither Mae nor I slept the best last night but we got up early so we could eat breakfast with Bob and Carroll as Bob cooked the fish with biscuits and onion rings. Mae took Sister Vica Germer to the Family History Center. I stayed home and worked around the house and yard. I figured some materials to do some addition to the sprinkler system. I also got talking to Mike next door. Bob and I got the fencing put up. I then went with Bob and Carroll to pick out the flooring for their kitchen. When we came back Bob had me stop at China Knight and he bought lunch. Mae had returned and then went out Visiting Teaching. I adjusted the back gate before Mae got home. after she got home we washed the car and pickup. I took a 15 minute nap before we went up to the Stake Camp for a Ward Social. We invited Karren and Joanne Von Niederhauser to ride with us to the social. It was a good social. Some stayed the night but we came on home. We enjoyed being with the Von Niederhauser’s this evening. It was late when I finished my journal and we went to bed.
Saturday, June 28, 2008
I woke about 4:20AM and went into the front room and slept the rest of the night in the recliner. Mae made French toast and heated up left-over fish from yesterday. I took care of the rabbits and then chopped the hay I had wind rowed to dry last week. I started on digging a trench to add another sprinkler to the yard. Bob prepared liver and onions for lunch and of course cooked some chicken for Mae. After lunch I took a nap and then finished adding the sprinkler head. We hope that it will cover a area that is turning brown. I had Bob mow some of the back while I put the trailer away. I also started up the snowmobiles and warmed them up. I added a gas additive to both machines to help keep the gas. Mae and I took showers and went to a production at the Roy High School of The White Star. Rick and Georgia’s granddaughter, Morgan Tew, was one of the actors in the play. She did very well and we enjoyed the production. It was late when we got home. I filled in this entry before we went to bed. I was very tired and hurting when we went to bed.
Sunday, June 29, 2008
I got up at 7AM but was still very tired. I got dressed, went out and fed the rabbits and then went over to the church and helped set up chairs. My legs were hurting quite badly when I came back home so before going to Church I took some Tylenol. Being it is the fifth Sunday the Priesthood met with the Relief Society for a special lesson. About half was through I begin to really hurt. After the class closed I came home and went back to bed. Mae woke me at 12:30PM for dinner. I feel some better but my legs still hurt. After dinner Mae lay down and took a nap. I worked on my journal and history for quite a while today. Mae and I took time to go to the Johnston’s to see how they are feeling. Mae said we should keep it short but when we left over an hour later I told her that she can now see why Bob and I are so long when we visit them. They are wonderful people and I do enjoy visiting with them. I think Sister Johnston enjoyed having Mae there so they could visit while Patriarch Johnston and I reminisced. Time went by quickly and it was after 10PM before we went to bed.
Monday, June 30, 2008
The alarm went off at 6AM but we slept in a little longer. Shauna brought the children at 8AM for Mae to tend today. we were just eating breakfast. We took the children out and I showed them the baby rabbit and let them pet the others. Mae worked with the children and had then weed some of the garden. Mae took the children to the Hill Aerospace Museum. They really had a good time there. I changed front brake pads on Bob’s car for him. I got on the inter-net and on www.ksl.com found a lady in Ephraim that is selling New Zealand White rabbits. She will bring me a buck and two does on Saturday the 5th of July. I will have to go to Draper to get them from her. Now I will have to build more pens. I did some searching for Down Riggers for my boat. Bob and I went to Smith & Edward’s and looked at the Down Riggers they have. I would like to buy an electric operated one but they are about $500 for one and the manual would cost less than ½ of the electric. I decided that I would hold off and think about it. Sandi called me and said that Nick would pay for one downrigger. We are considering just installing one as I found that you can use two poles on one downrigger. We were late getting to bed this evening. we watched a Doris Day movie before going to sleep. The Comcast channel would not work so we had to call in and they will send a repairman out tomorrow.


Objectives
- Learn about Kubernetes Services.
- Learn about Kubernetes Labels.
- Expose an application outside Kubernetes.
Kubernetes Services
While Pods do have their own unique IP across the cluster, those IP’s are not exposed outside Kubernetes. Taking into account that over time Pods may be terminated, deleted or replaced by other Pods, we need a way to let other Pods and applications automatically discover each other. Kubernetes addresses this by grouping Pods in Services. A Kubernetes Service is an abstraction layer which defines a logical set of Pods and enables external traffic exposure, load balancing and service discovery for those Pods.
This abstraction will allow us to expose Pods to traffic originating from outside the cluster. Services have their own unique cluster-private IP address and expose a port to receive traffic. If you choose to expose the service outside the cluster, the options are:
- LoadBalancer - provides a public IP address (what you would typically use when you run Kubernetes on GKE or AWS)
- NodePort - exposes the Service on the same port on each Node of the cluster using NAT (available on all Kubernetes clusters, and in Minikube)
Summary:
- Exposing Pods to external traffic
- Load balancing traffic across multiple Pods
- Using labels
A Kubernetes Service is an abstraction layer which defines a logical set of Pods and enables external traffic exposure, load balancing and service discovery for those Pods.
Services overview
A Service provides load balancing of traffic across the contained set of Pods. This is useful when a service is created to group all Pods from a specific Deployment (our application will make use of this in the next module, when we’ll have multiple instances running).
Services are also responsible for service-discovery within the cluster (covered in Module 6). This will for example allow a frontend service (like a web server) to receive traffic from a backend service (like a database) without worrying about Pods.
Services match a set of Pods using Label Selectors, a grouping primitive that allows logical operation on Labels.
You can create a Service when you start a Deployment by adding --expose as a parameter for the kubectl run command
Labels are key/value pairs that are attached to objects, such as Pods and you can think of them as hashtags from social media. They are used to organize related objects in a way meaningful to the users like:
- Production environment (production, test, dev)
- Application version (beta, v1.3)
- Type of service/server (frontend, backend, database)
Labels are key/value pairs that are attached to objects
Labels
Labels can be attached to objects at the creation time or later and can be modified at any time. The kubectl run command sets some default Labels/Label Selectors on the new Pods/ Deployment. The link between Labels and Label Selectors defines the relationship between the Deployment and the Pods it creates.
Let’s expose now our application with the help of a Service, and apply some new Labels.


Bases: nova.network.ldapdns.DNSEntry
Create a new domain entry, and return an object that wraps it.
Delete the domain that this entry refers to.
Bases: nova.network.ldapdns.LdapDNS
For testing purposes, a DNS driver backed with a fake ldap driver.
Bases: nova.network.ldapdns.DNSEntry
Bases: object
Driver for PowerDNS using ldap as a back end.
This driver assumes ldap-method=strict, with all domains in the top-level, aRecords only.


The Property class is the implementation of a resource’s attributes of property kind. A Property is a specialized Resource Type Parameter that has both an ‘is’ (current) state, and a ‘should’ (wanted state). However, even if this is conceptually true, the current is value is obtained by asking the associated provider for the value, and hence it is not actually part of a property’s state, and only available when a provider has been selected and can obtain the value (i.e. when running on an agent).
A Property (also in contrast to a parameter) is intended to describe a managed attribute of some system entity, such as the name or mode of a file.
The current value _(is)_ is read and written with the methods {retrieve} and {set}, and the wanted value _(should)_ is read and written with the methods {value} and {value=} which delegate to {should} and {should=}, i.e. when a property is used like any other parameter, it is the should value that is operated on.
All resource type properties in the puppet system are derived from this class.
The intention is that new parameters are created by using the DSL method {Puppet::Type.newproperty}.
@abstract @note Properties of Types are expressed using subclasses of this class. Such a class describes one
named property of a particular Type (as opposed to describing a type of property in general). This limits the use of one (concrete) property class instance to occur only once for a given type's inheritance chain. An instance of a Property class is the value holder of one instance of the resource type (e.g. the mode of a file resource instance). A Property class may server as the superclass _(parent)_ of another; e.g. a Size property that describes handling of measurements such as kb, mb, gb. If a type requires two different size measurements it requires one concrete class per such measure; e.g. MinSize (:parent => Size), and MaxSize (:parent => Size).
@todo Describe meta-parameter shadowing. This concept can not be understood by just looking at the descriptions
of the methods involved.
@see Puppet::Type @see Puppet::Parameter
@api public
@!attribute [rw] array_matching @comment note that $#46; is a period - char code require to not terminate sentence. The `is` vs. `should` array matching mode; `:first`, or `:all`.
@comment there are two blank chars after the symbols to cause a break - do not remove these.
`:first` This is primarily used for single value properties. When matched against an array of values a match is true if the `is` value matches any of the values in the `should` array. When the `is` value is also an array, the matching is performed against the entire array as the `is` value.
`:all` : This is primarily used for multi-valued properties. When matched against an array of
`should` values, the size of `is` and `should` must be the same, and all values in `is` must match a value in `should`.
@note The semantics of these modes are implemented by the method {insync?}. That method is the default
implementation and it has a backwards compatible behavior that imposes additional constraints on what constitutes a positive match. A derived property may override that method.
@return [Symbol] (:first) the mode in which matching is performed @see insync? @dsl type @api public
# File lib/puppet/property.rb, line 93 def array_matching @array_matching ||= :first end
@comment This is documented as an attribute - see the {array_matching} method.
# File lib/puppet/property.rb, line 99 def array_matching=(value) value = value.intern if value.is_a?(String) raise ArgumentError, "Supported values for Property#array_matching are 'first' and 'all'" unless [:first, :all].include?(value) @array_matching = value end
Protects against override of the {safe_insync?} method. @raise [RuntimeError] if the added method is `:safe_insync?` @api private
# File lib/puppet/property.rb, line 312 def self.method_added(sym) raise "Puppet::Property#safe_insync? shouldn't be overridden; please override insync? instead" if sym == :safe_insync? end
Initializes a Property the same way as a Parameter and handles the special case when a property is shadowing a meta-parameter. @todo There is some special initialization when a property is not a metaparameter but
Puppet::Type.metaparamclass(for this class's name) is not nil - if that is the case a setup_shadow is performed for that class.
@param hash [Hash] options passed to the super initializer {Puppet::Parameter#initialize} @note New properties of a type should be created via the DSL method {Puppet::Type.newproperty}. @see Puppet::Parameter#initialize description of Parameter initialize options. @api private
# File lib/puppet/property.rb, line 284 def initialize(hash = {}) super if ! self.metaparam? and klass = Puppet::Type.metaparamclass(self.class.name) setup_shadow(klass) end end
Defines a new valid value for this property. A valid value is specified as a literal (typically a Symbol), but can also be specified with a Regexp.
@param name [Symbol, Regexp] a valid literal value, or a regexp that matches a value @param options [Hash] a hash with options @option options [Symbol] :event The event that should be emitted when this value is set. @todo Option :event original comment says “event should be returned…”, is “returned” the correct word
to use?
@option options [Symbol] :call When to call any associated block. The default value is `:instead` which
means that the block should be called instead of the provider. In earlier versions (before 20081031) it was possible to specify a value of `:before` or `:after` for the purpose of calling both the block and the provider. Use of these deprecated options will now raise an exception later in the process when the _is_ value is set (see #set).
@option options [Object] any Any other option is treated as a call to a setter having the given
option name (e.g. `:required_features` calls `required_features=` with the option's value as an argument).
@todo The original documentation states that the option `:method` will set the name of the generated
setter method, but this is not implemented. Is the documentatin or the implementation in error? (The implementation is in Puppet::Parameter::ValueCollection#new_value).
@todo verify that the use of :before and :after have been deprecated (or rather - never worked, and
was never in use. (This means, that the option :call could be removed since calls are always :instead).
@dsl type @api public
# File lib/puppet/property.rb, line 156 def self.newvalue(name, options = {}, &block) value = value_collection.newvalue(name, options, &block) define_method(value.method, &value.block) if value.method and value.block value end
Looks up a value’s name among valid values, to enable option lookup with result as a key. @param name [Object] the parameter value to match against valid values (names). @return {Symbol, Regexp} a value matching predicate @api private
# File lib/puppet/property.rb, line 111 def self.value_name(name) if value = value_collection.match?(name) value.name end end
Returns the value of the given option (set when a valid value with the given “name” was defined). @param name [Symbol, Regexp] the valid value predicate as returned by {value_name} @param option [Symbol] the name of the wanted option @return [Object] value of the option @raise [NoMethodError] if the option is not supported @todo Guessing on result of passing a non supported option (it performs send(option)). @api private
# File lib/puppet/property.rb, line 125 def self.value_option(name, option) if value = value_collection.value(name) value.send(option) end end
Calls the provider setter method for this property with the given value as argument. @return [Object] what the provider returns when calling a setter for this property’s name @raise [Puppet::Error] when the provider can not handle this property. @see set @api private
# File lib/puppet/property.rb, line 169 def call_provider(value) method = self.class.name.to_s + "=" unless provider.respond_to? method self.fail "The #{provider.class.name} provider can not handle attribute #{self.class.name}" end provider.send(method, value) end
Sets the value of this property to the given value by calling the dynamically created setter method associated with the “valid value” referenced by the given name. @param name [Symbol, Regexp] a valid value “name” as returned by {value_name} @param value [Object] the value to set as the value of the property @raise [Puppet::DevError] if there was no method to call @raise [Puppet::Error] if there were problems setting the value @raise [Puppet::ResourceError] if there was a problem setting the value and it was not raised
as a Puppet::Error. The original exception is wrapped and logged.
@todo The check for a valid value option called `:method` does not seem to be fully supported
as it seems that this option is never consulted when the method is dynamically created. Needs to be investigated. (Bug, or documentation needs to be changed).
@see set @api private
# File lib/puppet/property.rb, line 190 def call_valuemethod(name, value) if method = self.class.value_option(name, :method) and self.respond_to?(method) begin event = self.send(method) rescue Puppet::Error raise rescue => detail error = Puppet::ResourceError.new("Could not set '#{value}' on #{self.class.name}: #{detail}", @resource.line, @resource.file, detail) error.set_backtrace detail.backtrace Puppet.log_exception(detail, error.message) raise error end elsif block = self.class.value_option(name, :block) # FIXME It'd be better here to define a method, so that # the blocks could return values. self.instance_eval(&block) else devfail "Could not find method for value '#{name}'" end end
Formats a message for a property change from the given `current_value` to the given `newvalue`. @return [String] a message describing the property change. @note If called with equal values, this is reported as a change. @raise [Puppet::DevError] if there were issues formatting the message
# File lib/puppet/property.rb, line 216 def change_to_s(current_value, newvalue) begin if current_value == :absent return "defined '#{name}' as #{self.class.format_value_for_display should_to_s(newvalue)}" elsif newvalue == :absent or newvalue == [:absent] return "undefined '#{name}' from #{self.class.format_value_for_display is_to_s(current_value)}" else return "#{name} changed #{self.class.format_value_for_display is_to_s(current_value)} to #{self.class.format_value_for_display should_to_s(newvalue)}" end rescue Puppet::Error, Puppet::DevError raise rescue => detail message = "Could not convert change '#{name}' to string: #{detail}" Puppet.log_exception(detail, message) raise Puppet::DevError, message end end
Produces an event describing a change of this property. In addition to the event attributes set by the resource type, this method adds:
`:name` - the event_name
`:desired_value` - a.k.a should or _wanted value_
`:property` - reference to this property
`:source_description` - the path (?? See todo)
@todo What is the intent of this method? What is the meaning of the :source_description passed in the
options to the created event?
@return [Puppet::Transaction::Event] the created event @see Puppet::Type#event
# File lib/puppet/property.rb, line 267 def event resource.event :name => event_name, :desired_value => should, :property => self, :source_description => path end
Produces the name of the event to use to describe a change of this property’s value. The produced event name is either the event name configured for this property, or a generic event based on the name of the property with suffix `_changed`, or if the property is `:ensure`, the name of the resource type and one of the suffixes `_created`, `_removed`, or `_changed`. @return [String] the name of the event that describes the change
# File lib/puppet/property.rb, line 240 def event_name value = self.should event_name = self.class.value_option(value, :event) and return event_name name == :ensure or return (name.to_s + "_changed").to_sym return (resource.type.to_s + case value when :present; "_created" when :absent; "_removed" else "_changed" end).to_sym end
Checks if the current _(is)_ value is in sync with the wanted _(should)_ value. The check if the two values are in sync is controlled by the result of {match_all?} which specifies a match of `:first` or `:all`). The matching of the is value against the entire should value or each of the should values (as controlled by {match_all?} is performed by {property_matches?}.
A derived property typically only needs to override the {property_matches?} method, but may also override this method if there is a need to have more control over the array matching logic.
@note The array matching logic in this method contains backwards compatible logic that performs the
comparison in `:all` mode by checking equality and equality of _is_ against _should_ converted to array of String, and that the lengths are equal, and in `:first` mode by checking if one of the _should_ values is included in the _is_ values. This means that the _is_ value needs to be carefully arranged to match the _should_.
@todo The implementation should really do return is.zip(@should).all? {|a, b| property_matches?(a, b) }
instead of using equality check and then check against an array with converted strings.
@param is [Object] The current _(is)_ value to check if it is in sync with the wanted _(should)_ value(s) @return [Boolean] whether the values are in sync or not. @raise [Puppet::DevError] if wanted value _(should)_ is not an array. @api public
# File lib/puppet/property.rb, line 336 def insync?(is) self.devfail "#{self.class.name}'s should is not array" unless @should.is_a?(Array) # an empty array is analogous to no should values return true if @should.empty? # Look for a matching value, either for all the @should values, or any of # them, depending on the configuration of this property. if match_all? then # Emulate Array#== using our own comparison function. # A non-array was not equal to an array, which @should always is. return false unless is.is_a? Array # If they were different lengths, they are not equal. return false unless is.length == @should.length # Finally, are all the elements equal? In order to preserve the # behaviour of previous 2.7.x releases, we need to impose some fun rules # on "equality" here. # # Specifically, we need to implement *this* comparison: the two arrays # are identical if the is values are == the should values, or if the is # values are == the should values, stringified. # # This does mean that property equality is not commutative, and will not # work unless the `is` value is carefully arranged to match the should. return (is == @should or is == @should.map(&:to_s)) # When we stop being idiots about this, and actually have meaningful # semantics, this version is the thing we actually want to do. # # return is.zip(@should).all? {|a, b| property_matches?(a, b) } else return @should.any? {|want| property_matches?(is, want) } end end
Produces a pretty printing string for the given value. This default implementation simply returns the given argument. A derived implementation may perform property specific pretty printing when the is and should values are not already in suitable form. @return [String] a pretty printing string
# File lib/puppet/property.rb, line 395 def is_to_s(currentvalue) currentvalue end
Emits a log message at the log level specified for the associated resource. The log entry is associated with this property. @param msg [String] the message to log @return [void]
# File lib/puppet/property.rb, line 404 def log(msg) Puppet::Util::Log.create( :level => resource[:loglevel], :message => msg, :source => self ) end
@return [Boolean] whether the {array_matching} mode is set to `:all` or not
# File lib/puppet/property.rb, line 413 def match_all? self.class.array_matching == :all end
(see Puppet::Parameter#munge) If this property is a meta-parameter shadow, the shadow’s munge is also called. @todo Incomprehensible ! The concept of “meta-parameter-shadowing” needs to be explained.
# File lib/puppet/property.rb, line 421 def munge(value) self.shadow.munge(value) if self.shadow super end
@return [Symbol] the name of the property as stated when the property was created. @note A property class (just like a parameter class) describes one specific property and
can only be used once within one type's inheritance chain.
# File lib/puppet/property.rb, line 430 def name self.class.name end
@return [Boolean] whether this property is in noop mode or not. Returns whether this property is in noop mode or not; if a difference between the is and should values should be acted on or not. The noop mode is a transitive setting. The mode is checked in this property, then in the _associated resource_ and finally in Puppet. @todo This logic is different than Parameter#noop in that the resource noop mode overrides
the property's mode - in parameter it is the other way around. Bug or feature?
# File lib/puppet/property.rb, line 442 def noop # This is only here to make testing easier. if @resource.respond_to?(:noop?) @resource.noop? else if defined?(@noop) @noop else Puppet[:noop] end end end
Checks if the given current and desired values are equal. This default implementation performs this check in a backwards compatible way where the equality of the two values is checked, and then the equality of current with desired converted to a string.
A derived implementation may override this method to perform a property specific equality check.
The intent of this method is to provide an equality check suitable for checking if the property value is in sync or not. It is typically called from {insync?}.
# File lib/puppet/property.rb, line 383 def property_matches?(current, desired) # This preserves the older Puppet behaviour of doing raw and string # equality comparisons for all equality. I am not clear this is globally # desirable, but at least it is not a breaking change. --daniel 2011-11-11 current == desired or current == desired.to_s end
Retrieves the current value _(is)_ of this property from the provider. This implementation performs this operation by calling a provider method with the same name as this property (i.e. if the property name is ‘gid’, a call to the ‘provider.gid’ is expected to return the current value. @return [Object] what the provider returns as the current value of the property
# File lib/puppet/property.rb, line 461 def retrieve provider.send(self.class.name) end
Determines whether the property is in-sync or not in a way that is protected against missing value. @note If the wanted value _(should)_ is not defined or is set to a non-true value then this is
a state that can not be fixed and the property is reported to be in sync.
@return [Boolean] the protected result of `true` or the result of calling {insync?}.
@api private @note Do not override this method.
# File lib/puppet/property.rb, line 300 def safe_insync?(is) # If there is no @should value, consider the property to be in sync. return true unless @should # Otherwise delegate to the (possibly derived) insync? method. insync?(is) end
Sets the current _(is)_ value of this property. The value is set using the provider’s setter method for this property ({call_provider}) if nothing else has been specified. If the _valid value_ for the given value defines a `:call` option with the value `:instead`, the value is set with {call_valuemethod} which invokes a block specified for the valid value.
@note In older versions (before 20081031) it was possible to specify the call types `:before` and `:after`
which had the effect that both the provider method and the _valid value_ block were called. This is no longer supported.
@param value [Object] the value to set as the value of this property @return [Object] returns what {call_valuemethod} or {call_provider} returns @raise [Puppet::Error] when the provider setter should be used but there is no provider set in the _associated
resource_
@raise [Puppet::DevError] when a deprecated call form was specified (e.g. `:before` or `:after`). @api public
# File lib/puppet/property.rb, line 482 def set(value) # Set a name for looking up associated options like the event. name = self.class.value_name(value) call = self.class.value_option(name, :call) || :none if call == :instead call_valuemethod(name, value) elsif call == :none # They haven't provided a block, and our parent does not have # a provider, so we have no idea how to handle this. self.fail "#{self.class.name} cannot handle values of type #{value.inspect}" unless @resource.provider call_provider(value) else # LAK:NOTE 20081031 This is a change in behaviour -- you could # previously specify :call => [;before|:after], which would call # the setter *in addition to* the block. I'm convinced this # was never used, and it makes things unecessarily complicated. # If you want to specify a block and still call the setter, then # do so in the block. devfail "Cannot use obsolete :call value '#{call}' for property '#{self.class.name}'" end end
Sets up a shadow property for a shadowing meta-parameter. This construct allows the creation of a property with the same name as a meta-parameter. The metaparam will only be stored as a shadow. @param klass [Class<inherits Puppet::Parameter>] the class of the shadowed meta-parameter @return [Puppet::Parameter] an instance of the given class (a parameter or property)
# File lib/puppet/property.rb, line 512 def setup_shadow(klass) @shadow = klass.new(:resource => self.resource) end
Returns the wanted _(should)_ value of this property. If the _array matching mode_ {match_all?} is true, an array of the wanted values in unmunged format is returned, else the first value in the array of wanted values in unmunged format is returned. @return [Array<Object>, Object, nil] Array of values if {match_all?} else a single value, or nil if there are no
wanted values.
@raise [Puppet::DevError] if the wanted value is non nil and not an array
@note This method will potentially return different values than the original values as they are
converted via munging/unmunging. If the original values are wanted, call {#shouldorig}.
@see shouldorig @api public
# File lib/puppet/property.rb, line 529 def should return nil unless defined?(@should) self.devfail "should for #{self.class.name} on #{resource.name} is not an array" unless @should.is_a?(Array) if match_all? return @should.collect { |val| self.unmunge(val) } else return self.unmunge(@should[0]) end end
Sets the wanted _(should)_ value of this property. If the given value is not already an Array, it will be wrapped in one before being set. This method also sets the cached original should values returned by {shouldorig}.
@param values [Array<Object>, Object] the value(s) to set as the wanted value(s) @raise [StandardError] when validation of a value fails (see {validate}). @api public
# File lib/puppet/property.rb, line 549 def should=(values) values = [values] unless values.is_a?(Array) @shouldorig = values values.each { |val| validate(val) } @should = values.collect { |val| self.munge(val) } end
Formats the given newvalue (following should type conventions) for inclusion in a string describing a change. @return [String] Returns the given newvalue in string form with space separated entries if it is an array. @see change_to_s
# File lib/puppet/property.rb, line 562 def should_to_s(newvalue) [newvalue].flatten.join(" ") end
Synchronizes the current value _(is)_ and the wanted value _(should)_ by calling {set}. @raise [Puppet::DevError] if {should} is nil @todo The implementation of this method is somewhat inefficient as it computes the should
array twice.
# File lib/puppet/property.rb, line 570 def sync devfail "Got a nil value for should" unless should set(should) end
Asserts that the given value is valid. If the developer uses a ‘validate’ hook, this method will get overridden. @raise [Exception] if the value is invalid, or value can not be handled. @return [void] @api private
# File lib/puppet/property.rb, line 581 def unsafe_validate(value) super validate_features_per_value(value) end
Asserts that all required provider features are present for the given property value. @raise [ArgumentError] if a required feature is not present @return [void] @api private
# File lib/puppet/property.rb, line 591 def validate_features_per_value(value) if features = self.class.value_option(self.class.value_name(value), :required_features) features = Array(features) needed_features = features.collect { |f| f.to_s }.join(", ") raise ArgumentError, "Provider must have features '#{needed_features}' to set '#{self.class.name}' to '#{value}'" unless provider.satisfies?(features) end end
@return [Object, nil] Returns the wanted _(should)_ value of this property.
# File lib/puppet/property.rb, line 600 def value self.should end
(see should=)
# File lib/puppet/property.rb, line 605 def value=(value) self.should = value end
Generated with the Darkfish Rdoc Generator 2.


Development Status values :
| task name | comment (and related issues) | progress status |
|---|---|---|
| Init(opts) | Called when erocci start, feature #3 | |
| Terminate() | Exit the application, feature #4 | |
| SaveResource(id, ...) | Save a resource and add it to Configuration model, feature #5 | |
| SaveLink(id, ...) | Save a link and add it to Configuration model, feature #6 | |
| Update(id, ...) | Update attributes of an entity, feature #7 | |
| SaveMixin(id, entities) | Associate a list of entities with a mixin, replacing existing list if any previously given, feature #8 | |
| UpdateMixin(id, entities) | Associate a list of entities with a mixin, replacing existing list if any previously given, feature #9 | |
| Find(id) | Find an entity by his relative path, feature #10 | |
| Load(id) | Describe an entity contents, feature #11 | |
| List(id, filters) | Get an iterator for a collection: then use Next() to iterate, feature #12 | |
| Next(opaque_id, start, items) | Retrieve items for a collection, from start(int) with number items, feature #13 | |
| Delete(id) | Remove entity or dissociate mixin from configuration, feature #14 | |
| property schema (core interface) | Assign an OCCI extension xml, on load, for now, extension are loaded via ConfigurationManager , for an owner and a Configuration Object, feature #15 | |
| AddMixin(id, location, owner) | Add a user mixin, act as a user tag, feature #16 | |
| DelMixin(id, location, owner) | Delete a user mixin, feature #17 | |
| Action(id, action_id, attributes) | Execute Action command for real interaction, action is call properly, while action has no connector, it use OCL validator but cant launch a command, feature #18 | |
| Dummy connector | Connector attach to default infrastructure model, feature #21 | |
| Cloud connector | Connector based on CloudDesigner implementation, for multi cloud purpose | |
| Docker connector | Connector based on CloudDesigner implementation, for Docker container purpose | |
| Hypervisor connector | Connector based on CloudDesigner implementation, for Hypervisor (like xen, vmware etc.) purpose | |
| Simulator connector | Connector based on CloudDesigner implementation, for Simulator purpose | |
| Custom connector, light demo | Custom connector based on Clouddesigner model of a light demo |


It is made by ninjamuffin99 (programmer), PhantomArcade (animator), evilsk8r (artist), and Kawaisprite (musician) originally for Ludum Dare 47.


I want only this type of question.
Thank you for visiting SubnettingPractice.com, the most extensive subnetting practice site on the Internet. We provide text based and image based subnetting questions which simulate the real world.
If these questions seem too difficult, start out with our basic subnetting questions. You may also want to look at out IPv6 questions
Learning how to subnet is key to passing the CCNA, understanding how the internet works and the basis for any networking career. Use this site along with a good CCNA book to gain the knowledge you need to succeed.


QA
Bulldozing
AQ Map
SSRS
LOCATION:
START DATE:
END DATE:
UPDATE SEARCH CRITERIA
change location bb
change location es
change location np
neighbourhood content here
electrical content here


Utopia::Exceptions::Handler
A middleware which catches exceptions and performs an internal redirect.
Definitions
def initialize(app, location = '/errors/exception')
Implementation
def initialize(app, location = '/errors/exception')
@app = app
@location = location
end
def fatal_error(env, exception)
Generate a very simple fatal error response. This function should be unlikely to fail. Additionally, it generates a lowest common denominator response which should be suitable as a response to any kind of request. Ideally, this response is also not good or useful for any kind of higher level browser or API client, as this is not a normal error path but one that represents broken behaviour.
Implementation
def fatal_error(env, exception)
body = StringIO.new
write_exception_to_stream(body, env, exception)
body.rewind
return [500, {HTTP::CONTENT_TYPE => "text/plain"}, body]
end


| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
LOG_LEVEL_DEBUG |
3 |
public static final int |
LOG_LEVEL_ERROR |
6 |
public static final int |
LOG_LEVEL_INFO |
4 |
public static final int |
LOG_LEVEL_NONE |
2147483647 |
public static final int |
LOG_LEVEL_VERBOSE |
2 |
public static final int |
LOG_LEVEL_WARNING |
5 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
ACCOUNT_ALREADY_LINKED |
208 |
public static final int |
CACHE_MISS |
120 |
public static final int |
COMMAND_UNAVAILABLE |
108 |
public static final int |
CONNECTION_FAILED |
100 |
public static final int |
DUPLICATE_VALUE |
137 |
public static final int |
EMAIL_MISSING |
204 |
public static final int |
EMAIL_NOT_FOUND |
205 |
public static final int |
EMAIL_TAKEN |
203 |
public static final int |
EXCEEDED_QUOTA |
140 |
public static final int |
FILE_DELETE_ERROR |
153 |
public static final int |
INCORRECT_TYPE |
111 |
public static final int |
INTERNAL_SERVER_ERROR |
1 |
public static final int |
INVALID_ACL |
123 |
public static final int |
INVALID_CHANNEL_NAME |
112 |
public static final int |
INVALID_CLASS_NAME |
103 |
public static final int |
INVALID_EMAIL_ADDRESS |
125 |
public static final int |
INVALID_EVENT_NAME |
160 |
public static final int |
INVALID_FILE_NAME |
122 |
public static final int |
INVALID_JSON |
107 |
public static final int |
INVALID_KEY_NAME |
105 |
public static final int |
INVALID_LINKED_SESSION |
251 |
public static final int |
INVALID_NESTED_KEY |
121 |
public static final int |
INVALID_POINTER |
106 |
public static final int |
INVALID_QUERY |
102 |
public static final int |
INVALID_ROLE_NAME |
139 |
public static final int |
INVALID_SESSION_TOKEN |
209 |
public static final int |
LINKED_ID_MISSING |
250 |
public static final int |
MISSING_OBJECT_ID |
104 |
public static final int |
MUST_CREATE_USER_THROUGH_SIGNUP |
207 |
public static final int |
NOT_INITIALIZED |
109 |
public static final int |
OBJECT_NOT_FOUND |
101 |
public static final int |
OBJECT_TOO_LARGE |
116 |
public static final int |
OPERATION_FORBIDDEN |
119 |
public static final int |
OTHER_CAUSE |
-1 |
public static final int |
PASSWORD_MISSING |
201 |
public static final int |
PUSH_MISCONFIGURED |
115 |
public static final int |
REQUEST_LIMIT_EXCEEDED |
155 |
public static final int |
SCRIPT_ERROR |
141 |
public static final int |
SESSION_MISSING |
206 |
public static final int |
TIMEOUT |
124 |
public static final int |
UNSUPPORTED_SERVICE |
252 |
public static final int |
USERNAME_MISSING |
200 |
public static final int |
USERNAME_TAKEN |
202 |
public static final int |
VALIDATION_ERROR |
142 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final String |
DEFAULT_PIN |
"_default" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final String |
ACTION_PUSH_DELETE |
"com.parse.push.intent.DELETE" |
public static final String |
ACTION_PUSH_OPEN |
"com.parse.push.intent.OPEN" |
public static final String |
ACTION_PUSH_RECEIVE |
"com.parse.push.intent.RECEIVE" |
public static final String |
KEY_PUSH_CHANNEL |
"com.parse.Channel" |
public static final String |
KEY_PUSH_DATA |
"com.parse.Data" |
public static final String |
PROPERTY_PUSH_ICON |
"com.parse.push.notification_icon" |
protected static final int |
SMALL_NOTIFICATION_MAX_CHARACTER_LIMIT |
38 |


| Results 1 - 10 of 1044 ListGrid |
|
gapi-google-analytics-php-interface - GAPI - Google Analytics API PHP Interface
Activity: Medium - Updated: Last 30 days - Stars: 460 GAPI is now at version 1.3 - This version contains fixes for the handling of very large metric values represented in scientific notation. Thanks to austinrehab for raising this issue. Developme... php, symfony, cakephp, zend-framework, php5 |
|
piwam - Piwam Is A Wonderful Association Manager
Activity: Medium - Updated: Last 30 days - Stars: 36 Association Manager, written in PHP with Symfony framework. But it has been developped for French associations only, which respect specific French laws. That is why this project space will... gestionnaire, association, manager, php, piwam, organization, 1901, management, gestion, trombinoscope, comptabilité, symfony, membres, cotisations, comptabilité |
|
mysql-workbench-doctrine-plugin - plugin to create YAML schemes out of MySQL Workbench for the doctrine ...
Activity: Low - Updated: Earlier this year - Stars: 63 There are plenty of reasons, why I will discard the LUA plugin. 1. I'm a PHP developer and LUA is a pain for me, as it retains me from implementing good ideas. The second effect is, that users ... mysql, workbench, plugin, doctrine, symfony, export, yaml, php, ORM |
|
sabreamf - SabreAMF is a Flash Remoting server and client for PHP
Activity: Medium - Updated: Apr 06, 2011 - Stars: 27 SabreAMF is now unmaintained. The announcement can be read on my blog. The sourcecode has been moved to Github, where it can be freely forked. If somebody who cares enough steps up, I'll hap... sabreamf, php5, amf0, amf3, flashremoting, amf, php, client, server, flex, flash |
|
spyc - A simple YAML loader/dumper class for PHP
Activity: Medium - Updated: Last 30 days - Stars: 111 We're finally moved to github: Spyc is a YAML loader/dumper written in pure PHP. Given a YAML document, Spyc will return an array which you can use however you see fit. Given an array, Spyc will r... php, yaml, parser |
|
yamleditor - Eclipse YAML Editor plugin
Activity: Low - Updated: Nov 09, 2011 - Stars: 38 Instalation via Update Manager: URL: (NEW) Java 1.5 or higher You can entry issue, to report bug, request new features or suggest modifications to existing features. eclipse, java, plug-in, symfony, php, php5 |
|
eklipse - Eklipse
Activity: Low - Updated: Apr 14, 2011 Página web oficial del grupo de música Eklipse PHP, Symfony, CSS |
|
kohana-mptt - Kohana Code Repository
Activity: Low - Updated: Apr 14, 2011 - Stars: 12 I won't have time in the near future to do bugfixes, new features etc. Feel free to fork any of the stuff in this repo with attribution. This project has been superseded by a behaviour for ORM... mptt, nestedsets, modifiedpreordertreetraversal, kohana, php, orm, formgeneration, validation, hmvc, spam |
|
lpsn - As3 symfony project
Activity: Medium - Updated: Jan 20, 2011 - Stars: 1 As3 symfony project ActionScript, PHP |
|
tutoriel-symfony-mathieu - test de symfony
Activity: None - Updated: Feb 08, 2011 C'est le tutoriel symfony "jobeet" Subversion, Symfony, PHP |


--- title: Matrix needData: true scripts: /js/matrix.js ---
This text will hopefully be replaced with a result matrix. If that does not seem to be happening, check if scripts are allowed. Alternatively, check out report.txt.


public abstract class OpenCVPipeline extends java.lang.Object implements CameraBridgeViewBase.CvCameraViewListener2
| Modifier and Type | Field and Description |
|---|---|
protected JavaCameraView
|
cameraView
|
protected android.content.Context
|
context
|
private boolean |
inited
|
private boolean |
initStarted
|
private boolean |
isVuforia
|
protected DrawViewSource
|
rawView
|
private ViewDisplay
|
viewDisplay
|
| Constructor and Description |
|---|
OpenCVPipeline()
|
| Modifier and Type | Method and Description |
|---|---|
void |
disable()
Detaches the JavaCameraView from the camera
and the screen, stopping OpenCV processing.
|
void |
enable()
Attaches the underlying JavaCameraView to the
screen and the camera using the set
ViewDisplay
to do so, essentially starting OpenCV processing.
|
JavaCameraView
|
getCameraView()
Exposes the underlying JavaCameraView used.
|
DrawViewSource
|
getRawView()
|
void |
init(android.content.Context context,
ViewDisplay viewDisplay)
Initializes the OpenCVPipeline, but
implicitly uses the rear camera.
|
void |
init(android.content.Context context,
ViewDisplay viewDisplay,
int cameraIndex,
boolean isVuforia)
Initializes the OpenCVPipeline.
|
Mat |
onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
The method that calls
processFrame(Mat,
Mat) ; there's little reason to override this, if
ever.
|
void |
onCameraViewStarted(int width,
int height)
This function is called when the camera is
started; overriding this may be useful to set the
maximum width and height parameters of an image processing
pipeline.
|
void |
onCameraViewStopped()
Override this function if there should be
logic on camera close.
|
abstract Mat |
processFrame(Mat rgba,
Mat gray)
Override this with the main image processing
logic.
|
protected JavaCameraView cameraView
protected DrawViewSource rawView
private ViewDisplay viewDisplay
protected android.content.Context context
private boolean initStarted
private boolean inited
private boolean isVuforia
public void init(android.content.Context context, ViewDisplay viewDisplay)
context
- the application context, usually
hardwareMap.appContext
viewDisplay
- the ViewDisplay that will display
the underlying JavaCameraView to the screen;
in most cases, using CameraViewDisplay.getInstance() as the
argument is just fine.
public void init(android.content.Context context, ViewDisplay viewDisplay, int cameraIndex, boolean isVuforia)
context
- the application context, usually
hardwareMap.appContext
viewDisplay
- the ViewDisplay that will display
the underlying JavaCameraView to the screen;
in most cases, using CameraViewDisplay.getInstance() as the
argument is just fine.
cameraIndex
- The index of the camera to use.
On every FTC-legal phone (afaik) 0 is the back camera, and 1
is the front camera.
public void enable()
ViewDisplay
to do so, essentially starting OpenCV processing.
This function must be called after init().
java.lang.IllegalStateException
- if enable()
is called before init()
public void disable()
public JavaCameraView getCameraView()
public DrawViewSource getRawView()
public void onCameraViewStarted(int width, int height)
onCameraViewStarted
in
interface CameraBridgeViewBase.CvCameraViewListener2
width
- - the width of the frames that will be
delivered
height
- - the height of the frames that will
be delivered
public void onCameraViewStopped()
onCameraViewStopped
in
interface CameraBridgeViewBase.CvCameraViewListener2
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
processFrame(Mat,
Mat)
; there's little reason to override this, if
ever.
onCameraFrame
in
interface CameraBridgeViewBase.CvCameraViewListener2
inputFrame
- the input frame given by the
internal JavaCameraView
processFrame(Mat,
Mat)


Installation¶
Stable Release: DIALS 3.16.0¶
The current stable release can be downloaded from Github, where you can also find further release notes.
DIALS 3.16.0 Linux installerDIALS 3.16.0 macos-x86_64.pkgDIALS 3.16.0 macos-x86_64.tar.gzDevelopment Builds¶
Nightly build installers are available for Linux and Mac OS. For instructions on compiling from source or setting up a DIALS development environment, see Installation for Developers.
Mac installerLinux installerInstallation¶
Mac graphical binary installers¶
We provide a graphical package installer for Mac users. Download the
Mac OS X
installer and double click the .pkg
file to start the
graphical installer. Follow the instructions, which will install DIALS in the
/Applications/
directory. To use DIALS, open a new terminal window and type,
e.g.:
source /Applications/dials-dev20150903/dials_env.sh
to setup the DIALS environment.
Mac and Linux binary installers¶
We provide binary tar.gz
and tar.xz
files for various Mac and Linux
platforms, e.g. on Linux:
wget https://dials.diamond.ac.uk/diamond_builds/dials-linux-x86_64-conda3.tar.xz
tar -xJf dials-linux-x86_64-conda3.tar.xz
cd dials-installer-dev
Or on Mac:
curl https://dials.diamond.ac.uk/diamond_builds/dials-macosx-conda3.tar.gz > dials-macosx.tar.gz
tar -xzf dials-macosx.tar.gz
cd dials-installer-dev
Then to install in the /usr/local directory (you may need to add a sudo
before the command):
./install
or to install in a specified directory:
./install --prefix=/path/to/installation/directory/
To use DIALS, open a new terminal window and type, e.g.:
source /path/to/installation/directory/dials-dev/dials_env.sh


This game has been designed for portrait. Please rotate your device.
Skitter Clicker
Clicker
Breeders
Upgrades
Other
larvae hatched
larvae/second
Buy 1
Buy 10
Buy 100
Purchase
Bought
Other


3.5
domestic | environment | existing drains | 2007
Every
building
must not be
constructed
over an existing drain
(including a field drain) that is to remain active.
Limitation:
This standard does not apply where it is not
reasonably practicable
to
reroute an existing drain.
3.5.0 Introduction
The purpose of this standard is to ensure that existing drains continue to
function properly without causing harm to the
building
or to the health of the
occupants.
Public sewers
Generally, public sewers are not permitted beneath
buildings
. Where it is
should be re-routed around the
building
. Permission will be required from the
Water Authority for any
work
that is to be carried out to a public sewer.
Permission of Scottish
Water
In exceptional circumstances, if it not possible to re-route an existing drain or
sewer away from the
dwelling
, for instance if a gap
building site
in a terrace is
being developed, the Water Authority may permit a
building
to be
constructed
over an existing public sewer. Where it is necessary to
build
over a public
sewer, approval of the Water Authority will be required.
Disused drains and sewers offer ideal harbourage to rats and frequently offer
a route for them to move between the drains and the surface. They can also
collapse causing subsidence.
In the case of
conversions
, as specified in regulation 4, the
building
as
converted
shall meet the requirement of this standard (regulation 12,
schedule 6).
3.5
—
3.5.0
domestic | environment | existing drains | 2007
3.5.1 Existing drains
A survey should be carried out to establish the geography and topography of
the
building site
and ascertain whether there are any existing field drains.
Where a
building site
requires that an existing drain (including a field drain)
must remain active and be re-routed or retained, particular methods of
construction
and protection should be carefully considered. The guidance
contained in clauses 3.5.2, 3.5.3 and 3.5.4 should be taken into account and
any new drain should be
constructed
in accordance with the guidance to
standards 3.6 and/or 3.7.
3.5.2 Re-routing of drains
Where a
building
is erected over a private drain, including a field drain that is
to remain active, the drain should be re-routed if
reasonably practicable
or
re-constructed
in a manner appropriate to the conditions of the
site
.
3.5.3 Re-construction of drains
The condition of any private drain or sewer that is to be
built
over should be
determined. If in poor condition and/or relatively shallow, then consideration
should be given to
re-construction
if re-routing is not
reasonably practicable
.
The strength of a pipeline should be determined, decided or specified before
construction work
is undertaken. Drains should be designed and
constructed
in accordance with the recommendations described in BS EN 752-3: 1997
and BS EN 1295-1: 1998. During
construction
, it should be ensured that the
assumptions made in the design are safeguarded or adapted to changed
conditions.
Protection of drains
Every drain or sewer should be protected from damage by
construction
traffic
and heavy machinery. Providing barriers to keep such traffic away from the
line of the drain or sewer may be appropriate. Heavy materials should not be
stored over drains or sewers.
It is recommended that manholes are not located within a
dwelling
.
3.5.4 Drains passing through structures
Where a drain or sewer passes through a structure, including a manhole or
inspection chamber, a detail should be devised to allow sufficient flexibility to
avoid damage of the pipe due to movement.  Where drains or sewers pass under or
close to structures, similar precautions should be considered. Drains or
sewers should be
constructed
and laid in accordance with the
recommendations of BS EN 1610: 1998.
3.5.5 Sealing disused drains
Disused sewers or drains provide ideal nesting sites for rats. In order to
prevent this, they should be disconnected from the drainage system as near
as possible to the point of connection. This should be done in a manner that
does not damage any pipe that is still in use and ensures that the sewer
system is watertight. This may be carried out, for example, by removing the
pipe from a junction and placing a stopper in the branch of the junction fitting.
Where the connection is to a public sewer, the Water Authority should be
consulted.
3.5.1
—
3.5.5
domestic | environment | existing drains | 2007
Sewers and drains less than 1.5 m from the surface and in open ground
should be, as far as
reasonably practicable
, removed. Other pipes should be
capped at both ends and at any point of connection, to ensure rats cannot
gain entry.
3.5.5
—
3.5.5


Liverpool fans discuss who should replace Mo Salah if he is ruled out of Crystal Palace clash
Andrew Robertson is also out.
by Jay WilliamsLiverpool winger Mo Salah is likely to miss the game against Crystal Palace this weekend.
According to Sky Sports News, Andrew Robertson and Salah have both been ruled out. The pair aggravated ankle injuries against Manchester City before the international break.
Robertson and Salah sat out of international duty in a bid to get fit for this weekend’s game against Palace. But it looks like neither player will pass the fitness test.
Who should replace Salah?
Salah’s absence means that Jurgen Klopp needs to find a replacement on the wing. Roberto Firmino, Sadio Mane and Salah form a devastating front three but this could be broken up.
There are four main candidates to take Salah’s spot. Divock Origi is one of the options and he can play anywhere across the front three. Xherdan Shaqiri is another but he is recovering from an injury.
Alex Oxlade-Chamberlain could play in an advanced role and he has been scoring recently. Alternatively, Adam Lallana might fancy Salah’s spot on the right.
Here are some tweets from Liverpool fans discussing who should start if Salah misses the Palace game.
Have something to tell us about this article?
Let us know


Test 'shape' attributes using various combinations of values. If working as expected, behavior of all 4 imagemaps should function identically. This should be converted to a unit test once the testing framework is updated.
The behavior of each shape should be:
All 'shape' attributes use conforming value (rect/poly/circle)
All 'shape' attributes use non-conforming value (rectangle/polygon/circ)
All 'shape' attributes use conforming value (poly/circle) with rectangle shape attribute missing which should default to rect per HTML spec
All 'shape' attributes use non-conforming value (polygon/circ) with rectangle shape attribute empty which should default to rect per HTML spec