Toggle navigation
UBIC
Overview
My UBI
KYC
Send
Receive
Transactions
Advanced
Do AA
Peers
Tx pool
Minting
Delegates
Balance
Status
Best block:
Blockchain height:
Synced:
Register Passport
do KYC
verify KYC
Do AA is still in development and will be used as a recertification mechanism
do AA
Add a new transaction output
Pay
Add peer
Start minting
Stop minting
Vote
Unvote
Ban
×
Vote for
pubKey:
×
Unvote
pubKey:
×
Add Peer
IP:
×
Register Identity using the Passport's NFC chip
Passport Nbr:
Date of birth:
Date of expiry:
×
KYC
Proof to verify:
×
Do AA
Passport Nbr:
Date of birth:
Date of expiry:
Address to unlock:
×
KYC
Passport Nbr:
Date of birth:
Date of expiry:
Challenge:
Type:
Anonymous
Name, date of birth, passport number
Facial image
Error
Missing or Invalid Api key
Please wait
Just some seconds left
Confirmation
Are you sure to send this transaction with a fee of:
Your KYC proof


The same data with both one and two y-axes. Two y-axes:
Two y-axes with y as primary axis (default):
Two y-axes with y2 as primary axis:
Two y-axes using different grids:
A single y-axis (left):
A single y-axis (right):


Short bio:
My name is Ashley and I'm currently a student at Code Fellows working towards becoming a software developer!
I've previously worked in the service industry, but felt it was time for a career change.
I'm 27 years old and have lived in beautiful Washington State my whole life.
I LOVE animals and have several wonderful pets.
Goals:
Survive this course and find a job in the tech industry!
- Austria
- Maldives
- Croatia
- Japan
- Norway
- Scotland
- Iceland
- Argentia
- England
- Germany


Chapter 51 Ė KENíS MOM:
KENíS MOTHERíS HISTORY:† A few years ago, while our family was living with Kenís mother (1986 Ė 1990), I encouraged Kenís mother to write her history.† She would say ďOh nobody would want to read it if I did.† My life has been boringĒ.† One day I started asking her questions about her life and as she answered these questions, I would write them down.† Soon other things about her life would pop into her mind and she would tell me those things or experiences.† It wasnít long until I had several pages and then I read it back to her.† I felt she had some great experiences and so I kept encouraging her to write down things as they came to her mind.† Pretty soon, she was excited too.† This went on for some time.† Finally, I was able to compile it and add pictures.† She passed away in November of that year.† She had wanted to give them as Christmas gifts to her children and siblings, so we had them printed and spiral bound and gave the books as her final gift to them.
Mom Jensen had been showing signs of Dementia since we lived with her from 1986 through 1990.† Her 3rd husband, Leo Jensen had passed away and she was lonely.†† We had had financial problems in Arizona and so had come to live with her to get back on our feet.† She was forgetful and would mention frequently that she couldnít remember things and hoped her mind wasnít going.† She would accuse Jeff of taking things and losing them - when it was her.† After we bought our home at 778 E 700 S, she continued to worsen and we finally had to take her car away from her as she would get confused and get lost plus her eyes were getting bad.† She had said to Ken ďI donít want to drive any more, take my carĒ.† He took that opportunity.† She regretted it soon after, and almost to the day she died, would keep telling us that she shouldnít have given us her car as she needed it so she could go to the store and other places where she wanted to go.† We kept her car for a few months, but it was too hard for Mom as when we would bring her over for Sunday dinner, etc., and she would see her car in our garage, she would stroke it and cry.† We finally traded it in on a truck for Ken.
††††††††††† † Aunt Vida had been living in a retirement home in Boise, Idaho and Mom wanted her to come live with her, so she finally did.† That didnít work too well either for they would argue and fight verbally with each other plus Aunt Vida was so wobbly and she insisted on going down into the basement as that bathroom had a shower and she liked to shower rather than bathe.† Mom preferred bathing.† We worried about Aunt Vida falling as she went down the stairs.† Mom kept calling Bob (he was retired so was generally home where she would reach him) to come and find things for her or do things for her.† It got to be such a problem as she was calling him 5 or 6 times a day.† He & Carroll lived in Sunset and Mom in Layton - so he didnít get much else done.† He would call me at Lincoln Elementary many times and ask if I could come over after work to try to find her (glasses, purse, etc) that she couldnít find.† I would pray and then look for it and usually find what she had lost.
††††††††††† †Bob was frustrated and asked Ken what could be done.† They finally decided that they would need to move her in with Bob.† They were going to make an addition on Bobís present home, but that didnít work so Bob & Carroll sold their home (which they had paid for) and took out a loan to buy a bigger home in Clinton so Ken could remodel the basement and make an apartment for Mom & Aunt Vida.† It took Ken about 3 months by working nights after work until late and each Saturday.† Ken about lost his health doing this and I was worried about him.
††††††††††† Mom never did like it there even though it was a beautiful apartment.† She was a negative person and so would say that it was a ďhole in the groundĒ and she would say no one ever came to see her and that Bob never came down and that she never got to go anyplace.† This wasnít true, but I think a lot of it was the dementia.† She couldnít remember when people came to visit her, when weíd take her places, (we took her to Idaho when we would go visit David & Shauna, or Rick & Lois or go to Island Park with Rich & Lois to stay for a week in February with them in their vacation condo.† We would drop her off at her brother, Irvenís or her sister, Wilma place and pick her up on the way back.† Bob & Carroll & Irven & Sandy would take her there also.† She couldnít remember any of this.† We visited her often and Bob came down at least once or twice a day.
††††††††††† Finally, Aunt Vida, went downhill and her son, Mark, who was divorced, came to live with them to take care of his mom.† He took care of Mom also and it was a blessing for us.† It was hard on him as Mom resented him fixing meals, etc., and would give him a hard time.††† Mom fell outside, one day while working in the yard, and broke her arm.† Irven went over and stayed in the hospital with her that night and I came the next morning to stay with her.† That was a hard time for all of us.† Mom couldnít remember why the cast was on her arm and would keep trying to get it off with knives (we finally had to hide them), scissors, or whatever she could find.† She even tried to soak it off and the doctor had to put a new cast on.† She kept digging at it until she caused it to heal unnaturally which looked awful when the cast came off.† It hurt her and she was unrelentless about wanting it off and she would become quite angry and upset.† It was more than Mark could handle so Irven & Sandy and Ken & I plus Bob would take turns staying day & night with her.† We didnít sleep so well at night since she would be up a lot.
††††††††††† Mark lived here about 2 Ĺ years when his mother passed away in Jan. of 2002.† He didnít want to stay and take care of Mom, but he had no place to go - so Bob & Carroll let him have one of their bedrooms upstairs and they stored his other things in their garage.† Bob & Carroll are good people.† I have been upset with them at times because they expect Ken to remodel their homes and do repairs and they donít ever pay him.† They have bought him a couple of tools and fixed meals for him when heís there doing the work, but it upset me that everyone else pays Ken even my Mom & Dad and our children, but Bob never has.† Irven asked Bob about it one time and Bob said ďIf I paid Ken to do the work, I couldnít afford to have it done.Ē† Ken was busy and we needed the money so I have felt resentful at times.† But I hope I have repented as since I have gotten to know them better I can see what good people they are, and how good they have been to Mom.
††††††††††† Irven & Sandy took Mom to their home after Aunt Vida passed away as they felt it would be too hard on her to be alone.† That only lasted a couple of months as she kept insisting that she wanted to go back to her home.† She even tried walking there a couple of times.† She made it so miserable for them that they finally called a meeting with the other two brothers & spouses (Bob & Ken).† They said they needed to bring her back to her apartment and that we would all need to take turns staying with her.† They had worked out a schedule for us all.† They would stay Sunday night, Monday, Monday night, Tuesday, Tuesday night & Wednesday.† Irvenís wife, Sandy, doesnít work so she could stay the days and Irven would come after work and they would stay with her until Wednesday night.† Ken & I were to stay with her Wednesday, Thursday, Friday & Saturday nights and Saturday day if we could and Bob would look out for her on Thursday, Friday & some Saturdays during the day.† Irven had contacted Cheryl, Momís oldest granddaughter, to come stay with her on Sundays and she agreed to do that.† We did this for a few months, but it was a hardship on everyone.†
Ken & I had put up our home for sale hoping to sell it quickly and then Ken would have the money to buy the materials to start building our home in Star Valley, Wyoming.† We had purchased the land while up visiting Sandi & Terry.† Well, our home didnít sell quickly, even though all our neighbors thought it would as we had made the home and landscaping really attractive.† It turned out that with the low economy, homes were not selling.† Homes had been selling good in the spring, but seldom now.† The realtor explained that many Realtors were going out of business and that there were so many people losing their homes and that the listing would fill a large telephone book.†
†††††††††††
Ken & I thought about what to do - whether to go on a mission first and let Scott, Mishelle & their family move into our home and pay what they could for rent and Ken & I move in with Mom to take care of her.† We made it a matter of prayer and Ken also spent a afternoon in the Celestial room in the temple to get some answers.† Ken had the feeling that we should not build up in Star Valley at this time, but we should move in with Mom, have Scott & Mishelle move into our home and continue planning for a mission - that things would work out.† Well they have.† If we place our faith in the Lord, He will work things out for us.
We moved in with Mom the end of July.† It was both hard, but good.† It was good doing things for Mom and most of the time she really appreciated it, but it was also hard as she couldnít remember hardly anything and didnít even know who we were part of the time.† She thought Ken was her husband, her brother and her son at different times.† Iím not sure who she thought I was - sometimes a stranger.† Many times, she would act out especially if we told her ďyou canítĒ, ďDonít do thatĒ, ďNoĒ and anything like that.† She would explode and start shouting, swearing, etc.† People and doctors have told us that many people who have Alzheimerís or Dementia act out that way.† Many times, I would rather have stayed at work, rather than come home as I was always tense, not knowing how she would be and it caused me and Ken a lot of stress.† Bob & Carroll had taken care of her about 7 years before Mark came and they were ďburned outĒ.† Even with Mark & then us there, it was still hard on them as she would go up during the night and wake them up at times, and go up during the day when we were at work.† Carroll wasnít a good house keeper and it really bothered Mom and she would get upset and start cleaning Carrollís house.† Of course, it upset Carroll and they had problems.† Many times, 5 minutes later, Mom wouldnít remember anything about what she had said or done, but it still really bothered Carroll and Bob.† By this time, they didnít have much patience with her, but I could understand why.† Finally, the 1st of October, 2002, there was another big episode between Mom & Carroll and Mom threatened to beat Cole, Sherryís son, and started after him.† Carroll couldnít take it any longer and wanted Mom out of her house.† Ken was going to be gone to Mike & Beckyís doing some work in their basement and then to Roy & Lindaís in California, so I was worried about being alone with her also.† Bob & Ken had talked about putting Mom in a nursing home, but Irven & Sandy had a fit every time we talked about it.† They wouldnít hear of doing it.† I think they felt guilty about putting Sandyís mother in one and she wasnít treated like they thought she should be.† Anyway, Ken told Bob they would have to do it now.† The doctor had already told them that they would eventually have to put Mom in one as she would only get worse and that the hardest thing about this disease is ďcaretaker burnoutĒ.† He told them that when they needed to do it to just call him and he would make the arrangement.† In order to have Medicare pay for it, they had to put her in the hospital for three days, then 3 months in a nursing home and they would evaluate her.† If they felt she really needed it, they would pay for it and take her assets and social security checks.† (In order to quality for Medicare to do this, the person couldnít have over $2,000.† Mom doesnít.)† Ken called the doctor and then he went on down to Mikeís and left Bob & I to take care of this situation.† Bob took her to the hospital.† She was really upset and told him ďthatís the last time I will take a ride with youĒ.† We called Irven & Sandy, and they were upset with us for doing this, but came to visit Mom a lot while she was in the hospital.† Bob & I did also.† Mom was upset and wanted us to take her home.† We could usually calm her down by playing ďrummyĒ (her favorite card game).† Bob looked for a nice nursing home, but couldnít find one close by.† He called me at work and asked if I could meet him at the South Ogden Rehab (which is a nursing home) as he liked that one.† I met him after work and was impressed with it also.† It was carpeted throughout, and was decorated very nice - felt so warm and homey.† Bob met with the manager the next day and did the paperwork.† I stayed up until after midnight that night packing Momís belongings so Bob and his son, Grant, could bring them to the nursing home the next afternoon where I met them and together we arranged her room.† I had taken my nails and hammer and stayed later to hang her pictures and other decorations on the walls and arrange the furniture better.†††††† On October 1, 2002, the caseworkers, from the hospital, were supposed to take Mom from the hospital to the nursing home, but she wouldnít go with them.† They finally called Bob and told him.† He called Ken and together they convinced her to go with them and that they would be taking her to her new apartment.† She had wanted her own apartment since we took her out of her home.† She liked it, so after a while they left.† That evening she had forgot, and insisted that she use the phone at the nurseís station where she called Bob and demanded that he come and get her.† He told her he couldnít that night, but he would be up the next day to see her.
††††††††††† †Well, her calling and being upset and demanding continued for the next two or three weeks.†† We would go there and find her upset so we would spend the next hour or more convincing her of what a nice apartment she had and the nice people who were taking care of her and that she wanted her own apartment and now she had it.† One time when I had gone alone, I walked her down to the rooms where the fish tank was and also the sun room.† They were furnished so nice and the atmosphere was wonderful, beautiful, soothing and relaxing.† I told her how lucky she was to be here and that I would like to trade her as she didnít have to worry about anything - that it was all done for her, nice people doing it for her, and at least one family member coming to visit her every day.† She had good food, entertainment, games, church meetings, family home evening, etc., etc.† Maybe I would feel different if I were there, but it does seem so nice and also nice not to have any responsibilities - at least for a while.† Iím so busy all the time that I hardly have any time to sit down and rest.† I do enjoy my life, however, and it makes me happy to serve others, especially my family, and accomplish things.† As I was ready to leave, I gave her a hug and she said ďYou wonít forget me, will you?Ē† That really touched me and I said ďOf course not, Mom, I love you and I will be up here to see you as often as I can.Ē† She also said, as I was going out the door, ďTell my family I still love them even though they put me here.Ē
††††††††††† Ken went to the Priesthood session of October General conference with his sons, Scott & Jeff.† He had only been gone a few minutes when Bob knocked on the door of our home (where Scott & Mishelle were living as Mishelle had invited me to come and be with them while the guys were at conference).† When I answered it, I found him all upset and he asked where Ken was.† I told him Ken, Scott & Jeff were at the stake house for conference.† I could see he was all dressed up to go also, but he asked me for directions as he said he had to get him and they had to quickly go to the nursing home as Mom had hit a nurse in the face, took off her shoe, was waving it back and forth and threatened to hit anyone who came near her.† When Ken got home, later that night, he explained that when they got there he told Bob to stay in the car, as he was worried about Bob having a heart attack or stroke as he was so upset from the phone call.† Mom threatened to hit Ken also when he started towards her so he sat across the hall from her.† He couldnít hear her so she finally told him he could sit by her.† He had a hard time calming her down and getting her to her room as she had decided she was leaving this place.† That is where the problem started.† The nurse & aids saw her heading for the door and told her not to leave.† Well, you donít tell Mom not to do anything.† You canít say ďnoĒ, ďdonítĒ, ďyou canít do thatĒ, etc.† If you do, she explodes and you wish you hadnít.†
††††††††††† She did that to me one day when I was doing the laundry on a Saturday in her home.† She was taking it out of the dryer and it was permanent press clothes and she was wrinkling them.† I told her I could do it and she said ďnoĒ, that she had them.† I told her that she was wrinkling them so she threw them at me, said she couldnít do anything right anymore and that she was leaving.† She started swearing, yelling, etc.† I got so upset that I said things I shouldnít have also.† When she went out the door, I went in the bedroom, knelt down and prayed and asked the Lord to help me calm down, to forgive me, and help me be able to go out and apologize and get things better again.† He did bless me and I was able to go out and find her working in the yard, I hugged her and told her I was sorry.† She said she was sorry too and that we would forget the whole incident.† I was grateful.
††††††††††† †††† Irven & Sandy finally realized that we had done the right thing to put Mom in a rest home.† They realized how bad mom was and that these people were trained to take care of Alzheimer and dementia patients.† They were happy about how nice the nursing home was (Sandyís Momís wasnít nearly this nice) and how nice the nurses and aids were to Mom.†
††††††††††† Irven made up a schedule for all of us giving us certain days to be with Mom so she would have family with her every day.† We didnít have to be with her 24 hours a day, but someone was there for at least an hour or longer every day.† The nurses and aids couldnít believe that we were there so much, they told us that none of the other patients had visitors so often.† Cheryl still wanted to come and be with her on Sundays.† Many times, she would bring her sister, Terry, with her.
††††††††††† Mom started having problems with her bowels.† She got hydroids also, which caused her a lot of pain.† The nurses gave her medicine for that and they had to clean up a lot of messes.† Many times, we would go there and find a real mess everywhere and it smelled terrible.† We could hardly stand to go in.† I would gather up all these clothes and wash them out in the toilet and sink and wash down the bathroom.† I felt bad for Mom as it really bothered her that she was having these problems.† Mom was a private person, when it came to things like this, and she was very independent, but she didnít have the strength and mentality to take care of these problems now.†† Even though it was hard, I am glad I was able to help her with these things.† I felt I was showing love for her.
††††††††††† Cheryl and Terry came one Sunday and found Mom in this mess and they were really upset.† Cheryl called us and wanted us all to come in as she felt the nursing home wasnít taking care of her Grandma.† Irven was here and he said he would go in and calm Cheryl and Terry down.† Ken had had to go in and calm down Irven and Sandy one time when they went in and found her like that.† Irven & Sandy were so upset that they chewed out the nurses and aids and had the whole place upset with our family.† The people at the nursing home did take good care of Mom, but they couldnít be with her all the time.† Since she had these problems, they would clean her up and 10 minutes later she would have a mess again.† We had been with her enough to understand that and we appreciated how good and patient they were with Mom.
††††††††††† It wasnít long until she couldnít even play ďRummyĒ.† This was the one thing she enjoyed doing, but her mind was so gone that she couldnít remember how to play it.† When she started having problems, we would cheat to have her win the games, as it made her happy to win, but at the end it would frustrate her to even try to play as she couldnít remember anything.
††††††††††† One day we got a call from the nurse that Mom had fallen, that she had seen it, checked her over, but couldnít find anything wrong.† Mom told her she wanted to go back to bed so she helped her.† She told us that Mom had been sleeping for a long time and she tried to wake her up, but couldnít get her to wake up.† Ken told Bob & Carroll and called Irven & Sandy and then we left to go to the nursing home.† When we got there, Mom was still asleep.† We tried to wake her, but couldnít.† Bob, Irven & Sandy soon arrived.† We all tried at different times during the evening to wake her, but couldnít.† She had gone into a coma.† The nurse said she thought she might have had a slight stroke as she hadnít really fallen, but just slid down to the floor as she was walking out the door of her room.† Mom had only been in the nursing home for about a month.† We talked that first night and redid our schedule to have someone with mom around the clock.† They brought in a nice recliner so we could sleep in it.† We all took turns being with Mom.† Cheryl came in on Sunday and other times as it was hard on her to know that her Grandmother was passing away.† We called in Hospice as the nursing home suggested it.† The nurse came while Cheryl and I were there and asked if we had any questions.† All of us, including Roy & Linda in California, were concerned that maybe we were starving her to death since we couldnít give her any food or water with her being in a coma and Mom didnít want any life support.† I told her our concerns and she explained that this is natureís way of shutting down the body.† She said that Mom was peaceful and her body didnít want food or water since it was shutting down - that if we gave it to her intravenously, it would cause problems.† If we gave her water, it would either go into the lungs and cause pneumonia or cause the body to swell.† If we gave her food, the digestive system couldnít handle it.† I was grateful to understand that.† I knew that mom did seem peaceful.† Sometimes she opened her eyes a little and I could see that there was not fear or anxiety in them.† Mom even moved her arms some and we thought that maybe she was coming out of the coma, but the doctor told us not to expect that as she was dying.† The nurses from Hospice told us that the last thing to go was the hearing so we should talk to her and say good, positive things.† We did this.†
††††††††††† Bob was with Mom when she passed away at 12:01 a.m. on Nov 7, 2002.† He called us, and Ken called Irven and Cheryl to let them know, but we decided to wait until the next morning to call the rest of the family.† Ken called the mortician.† We met the next day at the mortuary with Irven & Sandy as Bob & Carroll were both sick.† We made the funeral arrangements, but it wasnít hard as Mom had a funeral plan with Linquist Mortuary.† Ken, Sandy & I then stopped at a florist to pick out the flowers.† We planned the program for the funeral and Irven said he wanted to speak.† Neither Bob nor Roy wanted to speak so Ken decided he better.† He then asked Momís bishop if he would say a few words.† Sandy said her and her daughters could sing and our daughter, Sandi, would accompany them.† We decided to have all the grandchildren and great grandchildren sing ďI Am A Child of God.
Mom Jensen had wanted to die ever since her third husband, Leo Jensen, had passed away.† She used to say to me ďThey say old age is golden, well it isnít, itís just a lot of leadĒ.  I love life and I love my family and want to be here with them.Ē† Mom Jensen didnít love life.† She was a negative person and she was not out-going, like my mother, so she didnít have many friends.† She would go to church and sit on the back row and leave quickly after church so she didnít have to talk to anyone and yet she would criticize people and say they were unfriendly and thought they were too good for her as they wouldnít talk to her - and yet they didnít have much of a chance.† She criticized her neighbors and said they were unfriendly, but she never went to visit them.† I really felt sorry for her.† She was a good grandmother to Cheryl, but not to her other grandchildren.† We think the problem was that she loved her children so much that she thought her grandchildren caused problems for her children so she was always criticizing them and getting after them.† We told her many times that she should love them and be a grandmother to them, not a parent, as they already had parents, but needed good grandparents.†† Our children didnít want to visit Grandma Jensen, but they loved going to Grandma Porters.† They knew my mother loved them and was glad to see them.† My mother always remembered them on their birthdays, Christmas and other times and she had toys for them to play with at her home and cookies and other goodies for them to eat.† Kenís mother didnít, so it is no wonder they didnít want to go see her.† They felt she only wanted to see her children, but not them and that they were a bother to her.† She had a pool table at her home in Layton so they would go downstairs right after we arrived and play pool or go outside and play in the summer, but they were always glad to leave.
Kenís mom was a good cook and fixed delicious meals and made the best pies that I have tasted.† I used to make pies, but when we moved close to Kenís mom, I never made them as she would make them for me or we could go to her home and have pie.† That was her specialty.† She had been a school lunch cook for several years both in Idaho, while her children were young, and in Utah, after they were grown.† She was an emackulant housekeeper and her home was very important to her.† I would see her spend money to buy nice things for her home and I knew that was her priority as she spent her money there instead of on her family.† My money goes to buy gifts and things for my children and grandchildren; I guess I got this from my mother as she did this also.† My mother didnít have nice furniture or other nice things, but always bought things for her family.
††††††††††† I loved Kenís Mom, but would be upset with her attitude and the way she treated our children.† When we lived with her, I encouraged her to write her history.† She resisted at first saying she didnít have anything worthwhile writing about and that no one would want to read it anyway.† I finally got her to start writing it by asking her questions about her childhood.† As she started writing it down, she would think of other things and write them down and seemed to be excited to do it.† I would keep encouraging her, reading and editing it and then typing it up.† We worked on it for two or three years while we were living there and I had several rough drafts.† Sandy, Irvenís, wife offered to take it and type it up on their computer as she said she had the time and that way we could save it on disks and make copies for everyone, etc.† They were living in Idaho at the time.† We didnít have a computer then and thought I would have to stay late at work and type it up there, but was glad when she volunteered to do it.† Like a dummy, I didnít make a copy of my rough draft.† We never got the disks or copy of Momís history so I finally asked Sandy about it.† They had moved to the state of Washington by then and she said she didnít know for sure where it was, that she hadnít gotten it done and she thinks that when Mom was visiting them, she might have given it to her.† I asked Mom about it, but she didnít remember getting it.† I asked Sandy to look for it and she said she would, but we never heard anything more.† I was sick about it as by now, Momís mind was going and she couldnít remember these things and wouldnít be able to rewrite her history.† We had spent so much time on it and it was a valuable history.† Well years went by and towards the end of Momís life, while we were staying with her from July through September, 2002, Cheryl had been out visiting Mom and while we were gone to our church meetings, she looked through Momís things to find pictures as she is making a scrapbook for mom & she was going to make copies for all of us.† She found a large manila envelope which had the Ogden Temple address on it.† Mom had worked at the Ogden Temple for a few years.† She looked inside it and there was Momís history.† Sandy had given it to Mom and she had put it in this envelope.† When I had looked through her things for the history and saw this envelope, I didnít look inside as I just figured it was mementos from when she worked at the temple.† I was very excited to have this.† I spent the next several weeks, whenever I had the time, typing up this rough draft on the computer.† As I would finish one page, Mom would read it.† She seemed really happy with it.† One day when I was wrapping Christmas presents (I do them early) she asked what she could give her children for Christmas.† I told her we would have her history made into books and we could wrap them and give them as her Christmas gifts.† She was excited about doing that, however, she didnít live until Christmas.† When I finished the history, I sent a copy to Roy & Linda, gave one to Bob & Carroll & Irven & Sandy for them all to edit.† They did and it is finished now.† I havenít had it copied as Cheryl wants to have the pictures with the history.† I did finish it soon after and gave a copy to all Momís children and to Cheryl.† I think I gave one to each of our children also.
††††††††††† We had bought some land in Star Valley, Wyoming and we planned to sell our home in Layton and build there.† I was planning to retire at age 62 from the district so we put our home up for sale.† Homes had been selling all around us and our realtor said we wouldnít have a hard time selling it as we had taken good care of it and made improvements and the yards looked great.† We didnít hear back from him as time went on, so I finally called him and he said that the market had dropped and homes were not selling now.† That there were a lot of foreclosures and that if we were to sell our home, we would practically have to give it away. †We sure didnít want to do that again.† Bob & Carroll needed help with Ken & Bobís Mom who had Alzheimerís and had been living in Bob & Carrollís basement apartment which Ken had built for their mother.† Ken and I wanted to go on a mission, but we didnít know if we should go on a mission first or build our home in Star Valley first.† Ken & I thought about what to do - whether to go on a mission first and let Scott, Mishelle & their family move into our home and pay what they could for rent and Ken & I move in with Mom to take care of her.† We made it a matter of prayer and Ken also spent an afternoon in the Celestial room in the temple to get some answers.† Ken had the feeling that we should not build up in Star Valley at this time, but we should move in with Mom and take care of her, have Scott & Mishelle move into our home and continue planning for a mission - that things would work out.† Well they have. †Kenís mother passed away the end of November and our mission call to the Philippines came on Christmas Eve.†† (This was a great spiritual experience for Ken and I)†
††††††††††† We sold our home to Scott & Mishelle while we were on our mission as Scott had graduated from college and had a good job and they wanted to buy a home.† We didnít end up building our home in Star Valley as Sandi & Terry had sold their cabin there which was just a couple of blocks from where our property was, and David & Shauna moved down to Utah.† He was transferred and they bought a home in Enterprise (North of Morgan).† I didnít want to live four hours away from our nearest family as I wanted to attend birthdays, ball games, and recitals and have dinners and holidays together.† Plus, the building supplies had increased 3 times since we were on our mission so I didnít feel we could afford to build our home now.† Ken was disappointed as he has always wanted to build his own home.† Bob & Carroll invited us to come and live in their basement apartment again and we have.† Now we are close to all our children and their families and I love that.
Well, Mom Jensen finally got to go at age 92, in November 2002.† She didnít want a funeral, but all of us thought we should have one.† I guess she was right - we shouldnít have had one as it didnít turn out so good.† ††
Kenís Motherís funeral
My Aunt Esther, My Dadís brother, Daleís wife, passed away the same day as Kenís mom and they had her funeral the same day as Mom Jensenís.† Aunt Estherís funeral was in the morning so Ken & I went to it.† Several of the children spoke and did a beautiful job and also Elder Porter, formerly of the Seventy and a relative of ours, spoke.† The music was beautiful and we really felt the spirit.† We were hoping for that at Kenís Momís funeral as well, but that wasnít the case.†
There were more people there than she thought would come, and the music and speakers were good - except Irven.†† Irven spoke first and spoke for 41 minutes.† He said very inappropriate things, and said things, that I think would have made Mom feel bad.† Irvenís own children went out in the hall and were embarrassed at the things he said.† Our children were upset and went out in the hall also.† Sandy was sitting beside me and she was nervous about his talk also.† Bob wasnít feeling well, but he was so upset that he went to the back of the building and looked up at Irven and made the cutting signs to get him to stop and sit down.† Irven either didnít see him or ignored him and kept going.†  Irven saw him this time, looked surprised, but quickly ended and sat down.† Our children heard comments from others in the audience saying things like ďBoy, make sure you donít ask Irven Browning to speak at my funeralĒ, or ďNo wonder, their mother didnít want a funeral if she knew her son would say things like that.Ē† It was hard for Ken to speak after that, but he did a great job and only spoke for 7 minutes.† After another musical number, the Bishop spoke.† He spoke for 20 minutes which was too long also, his talk was great, but people were tired as the funeral was too long and they were still upset with Irvenís talk.
††††††††††† We went over to Momís and Bob & Carrollís church house afterwards where their Relief Society had prepared a meal for us.† It was very good.† All our children could talk about was Irvenís talk.† Irven and Sandy sat by themselves as their children were sitting at another table.† I know Irven knew we were upset with him so Ken finally went over and spoke to him.† We talked about who would be riding together to go up to Driggs, Idaho where Mom was to be buried.† Our daughter, Sandi, wanted to go, but didnít want to go if Irven & Sandy would be riding with us.† Roy had rented a van to bring his daughter & family up from California with them - so he offered to drive it and let us all ride with him as his daughter & family wouldnít be going as they were staying with Lindaís Mom.† Bob & Carroll were still sick so they said they didnít feel like they could go, so it looked like Irven & Sandy would be riding with Roy, Linda, Ken & I.† Then Cheryl said her and Bob wanted to go so Irven offered to drive and they could go with them.† Ken didnít sleep much that night as he worried about Cheryl & Bob riding with Irven & Sandy since Irven & Sandy are so fanatical now about politics, taxes, etc.† Cheryl called us early the next morning to say that Bob wasnít feeling well so he wouldnít be going, but she still wanted to go and wondered if she should just drive to our place and go with us.† That was the answer to our prayers and we told her ďyesĒ and that our daughter, Sandi, was going with us so they would feel better having each other without husbands that day.†† I told Ken that he shouldnít call Irven until just before we were ready to go and just say that Cheryl came here without Bob and so we would take her with us.† Iím sure they werenít too happy with us, but we felt that it was the best solution to our problem.† We had a good time visiting as we traveled and we enjoyed each otherís company.† Everything went well at the burial except Irven & Sandy acted a little cold towards us.† Kenís Aunt Wilma invited all of us to come to her home in Teton afterwards for lunch.† She had made soup, chili and pies.† There were other family members at the burial also and they were also invited.† We had a good time visiting, but Irven & Sandy were eating in the kitchen with Uncle Lee & Aunt Wilma and the rest of us were in the front room.† I went in to tell them that we were all getting together at our place when we got back, so we could divide up Momís belongings as Roy & Linda had to leave the next morning to drive back to California.† They were upset and just said, weíre not coming, just divide it up with yourselves.† I told them we really would like to have them there and that they should have part of the furniture, etc., also.† Finally, they relented and said they would come.† We had a fairly nice time being together and it turned out that Irven & Sandy got several things so they felt better.† Roy & Linda didnít take hardly anything.† They said they had a small home and no place to put more furniture and they didnít have room in their vehicle to take it back anyway.† I also think they realized that they hadnít been up here to help take care of Mom and it had been hard on the three siblings & their spouses who did live here and took care of her.† We invited Roy & Linda to come over the next morning for Biscuits & gravy before leaving for California and we also invited Irven & Sandy as we wanted to have family unity again.† They all came and we did have a nice time and were able to laugh and talk again.† I was grateful for that as I hate to have bad feelings in the family and it has been a hard year for all of us.† We canít stay angry with Irven as he is part of our family and Heavenly Father tells us to forgive everyone 70 x 7.† We feel better now too
Ken has had the power of attorney for Mom as Bob didnít want to do it and wanted Ken to do it.† Bob is Momís oldest son so would normally be the one to do all that.† With that, Ken has had to make a lot of the decisions and be the executor.† Irven & Bob didnít get along too well and they would keep calling Ken about problems they were having with each other and things they disagreed on.† Irven & Sandy felt Bob & Carroll should take care of Mom since they are retired - well, they have for 7 years and were ďburned outĒ.† They as much as told Bob & Carroll this so it caused resentment, and when Irven & Sandy came over to take their turns being with Mom (before we put her in the nursing home), they didnít tell Bob & Carroll (who lived upstairs) when they were coming and leaving and they would leave Mom for long periods of time without saying anything - so this made Bob & Carroll mad at them.† Irven and Sandy had given us much grief all during the time when we needed to help Mom after Aunt Vida passed away.† They didnít seem to agree with hardly anything the rest of us agreed on.† Things got ugly a couple of times.† One time we were meeting together at Bob & Carrollís to decide what to do and it was tense.† I finally said ďThe Holy Ghost isnít here with us when we are acting this way.† Can we have a prayer and calm down?Ē† We did and it helped.† I had some hard feelings towards them for a while, but thank goodness I have repented and now feel good towards them.† Anyway, it was quite a feascal, and hard on everyone.† Iím glad that year is over as Ken was about to his witís end,† I wasnít much better and neither were Bob & Carroll and I donít think it was very easy on Irven & Sandy either even though we felt they were a big part of the problem.


We are always happy to hear your comments and sugessions.
We'll write rarely, but only the best content.
+044-43867009
Mon - Fri, 10:30-22:30
softwarehubofficial@gmail.com


Reporting Bugs¶
Although every situation is different, this section describes how to collect data which will help make efficient use of everyone’s time when dealing with vpp bugs.
Before you press the Jira button to create a bug report - or email<EMAIL_ADDRESS>- please ask yourself whether there’s enough information for someone else to understand and to reproduce the issue given a reasonable amount of effort. Unicast emails to maintainers, committers, and the project PTL are strongly discouraged.
A good strategy for clear-cut bugs: file a detailed Jira ticket, and then send a short description of the issue to<EMAIL_ADDRESS>perhaps from the Jira ticket description. It’s fine to send email to<EMAIL_ADDRESS>to ask a few questions before filing Jira tickets.
Data to include in bug reports¶
Image version and operating environment¶
Please make sure to include the vpp image version and command-line arguments.
$ sudo bash
# vppctl show version verbose cmdline
Version: v18.07-rc0~509-gb9124828
Compiled by: vppuser
Compile host: vppbuild
Compile date: Fri Jul 13 09:05:37 EDT 2018
Compile location: /scratch/vpp-showversion
Compiler: GCC 7.3.0
Current PID: 5211
Command line arguments:
/scratch/vpp-showversion/build-root/install-vpp_debug-native/vpp/bin/vpp
unix
interactive
With respect to the operating environment: if misbehavior involving a specific VM / container / bare-metal environment is involved, please describe the environment in detail:
Linux Distro (e.g. Ubuntu 18.04.2 LTS, CentOS-7, etc.)
NIC type(s) (ixgbe, i40e, enic, etc. etc.), vhost-user, tuntap
NUMA configuration if applicable
Please note the CPU architecture (x86_86, aarch64), and hardware platform.
When practicable, please report issues against released software, or unmodified master/latest software.
“Show” command output¶
Every situation is different. If the issue involves a sequence of debug CLI command, please enable CLI command logging, and send the sequence involved. Note that the debug CLI is a developer’s tool - no warranty express or implied - and that we may choose not to fix debug CLI bugs.
Please include “show error” [error counter] output. It’s often helpful to “clear error”, send a bit of traffic, then “show error” particularly when running vpp on noisy networks.
Please include ip4 / ip6 / mpls FIB contents (“show ip fib”, “show ip6 fib”, “show mpls fib”, “show mpls tunnel”).
Please include “show hardware”, “show interface”, and “show interface address” output
Here is a consolidated set of commands that are generally useful before/after sending traffic. Before sending traffic:
vppctl clear hardware
vppctl clear interface
vppctl clear error
vppctl clear run
Send some traffic and then issue the following commands.
vppctl show version verbose
vppctl show hardware
vppctl show interface address
vppctl show interface
vppctl show run
vppctl show error
Here are some protocol specific show commands that may also make sense. Only include those features which have been configured.
vppctl show l2fib
vppctl show bridge-domain
vppctl show ip fib
vppctl show ip neighbors
vppctl show ip6 fib
vppctl show ip6 neighbors
vppctl show mpls fib
vppctl show mpls tunnel
Network Topology¶
Please include a crisp description of the network topology, including L2 / IP / MPLS / segment-routing addressing details. If you expect folks to reproduce and debug issues, this is a must.
At or above a certain level of topological complexity, it becomes problematic to reproduce the original setup.
Packet Tracer Output¶
If you capture packet tracer output which seems relevant, please include it.
vppctl trace add dpdk-input 100 # or similar
send-traffic
vppctl show trace
Capturing post-mortem data¶
It should go without saying, but anyhow: please put post-mortem data in obvious, accessible places. Time wasted trying to acquire accounts, credentials, and IP addresses simply delays problem resolution.
Please remember to add post-mortem data location information to Jira tickets.
Syslog Output¶
The vpp signal handler typically writes a certain amount of data in /var/log/syslog before exiting. Make sure to check for evidence, e.g via “grep /usr/bin/vpp /var/log/syslog” or similar.
Binary API Trace¶
If the issue involves a sequence of control-plane API messages - even a very long sequence - please enable control-plane API tracing. Control-plane API post-mortem traces end up in /tmp/api_post_mortem.<pid>.
Please remember to put post-mortem binary api traces in accessible places.
These API traces are especially helpful in cases where the vpp engine is throwing traffic on the floor, e.g. for want of a default route or similar.
Make sure to leave the default stanza “… api-trace { on } … ” in the vpp startup configuration file /etc/vpp/startup.conf, or to include it in the command line arguments passed by orchestration software.
Core Files¶
Production systems, as well as long-running pre-production soak-test systems, must arrange to collect core images. There are various ways to configure core image capture, including e.g. the Ubuntu “corekeeper” package. In a pinch, the following very basic sequence will capture usable vpp core files in /tmp/dumps.
# mkdir -p /tmp/dumps
# sysctl -w debug.exception-trace=1
# sysctl -w kernel.core_pattern="/tmp/dumps/%e-%t"
# ulimit -c unlimited
# echo 2 > /proc/sys/fs/suid_dumpable
If you start VPP from systemd, you also need to edit /lib/systemd/system/vpp.service and uncomment the “LimitCORE=infinity” line before restarting VPP.
Vpp core files often appear enormous, but they are invariably sparse. Gzip compresses them to manageable sizes. A multi-GByte corefile often compresses to 10-20 Mbytes.
When decompressing a vpp core file, we suggest using “dd” as shown to create a sparse, uncompressed core file:
$ zcat vpp_core.gz | dd conv=sparse of=vpp_core
Please remember to put compressed core files in accessible places.
Make sure to leave the default stanza “… unix { … full-coredump … } … ” in the vpp startup configuration file /etc/vpp/startup.conf, or to include it in the command line arguments passed by orchestration software.
Core files from Private Images¶
Core files from private images require special handling. If it’s necessary to go that route, copy the exact Debian packages (or RPMs) which correspond to the core file to the same public place as the core file. A no-excuses-allowed, hard-and-fast requirement.
In particular:
libvppinfra_<version>_<arch>.deb # vppinfra library
libvppinfra-dev_<version>_<arch>.deb # vppinfra library development pkg
vpp_<version>_<arch>.deb # the vpp executable
vpp-dbg_<version>_<arch>.deb # debug symbols
vpp-dev_<version>_<arch>.deb # vpp development pkg
vpp-lib_<version>_<arch>.deb # shared libraries
vpp-plugin-core_<version>_<arch>.deb # core plugins
vpp-plugin-dpdk_<version>_<arch>.deb # dpdk plugin
For reference, please include git commit-ID, branch, and git repo information [for repos other than gerrit.fd.io] in the Jira ticket.
Note that git commit-ids are crypto sums of the head [latest] merged patch. They say nothing whatsoever about local workspace modifications, branching, or the git repo in question.
Even given a byte-for-byte identical source tree, it’s easy to build dramatically different binary artifacts. All it takes is a different toolchain version.
On-the-fly Core File Compression¶
Depending on operational requirements, it’s possible to compress corefiles as they are generated. Please note that it takes several seconds’ worth of wall-clock time to compress a vpp core file on the fly, during which all packet processing activities are suspended.
To create compressed core files on the fly, create the following script, e.g. in /usr/local/bin/compressed_corefiles, owned by root, executable:
#!/bin/sh
exec /bin/gzip -f - >"/tmp/dumps/core-$1.$2.gz"
Adjust the kernel core file pattern as shown:
sysctl -w kernel.core_pattern="|/usr/local/bin/compressed_corefiles %e %t"
Core File Summary¶
Bottom line: please follow core file handling instructions to the letter. It’s not complicated. Simply copy the exact Debian packages or RPMs which correspond to core files to accessible locations.
If we go through the setup process only to discover that the image and core files don’t match, it will simply delay resolution of the issue; to say nothing of irritating the person who just wasted their time.


Constructor
new ShipPlacementView(options)
Parameters:
| Name | Type | Description |
|---|---|---|
options |
- Source:
Extends
- View
Methods
(static) handleBoardCellClick()
Click handling for cells / placement
- Source:
(static) handleBoardCellOut()
Handle mouse leaving cell
- Source:
(static) handleBoardCellOver(row, column)
Handle mouse over cell
Parameters:
| Name | Type | Description |
|---|---|---|
|
options | |
row |
||
column |
- Source:
(static) handleFinishPlacement()
Render game board once finished
- Source:
(static) handleRotateShip()
Ship rotation handling for ship placement
- Source:
(static) handleSelectedShipChange(target)
Handle changing a selected ship
Parameters:
| Name | Type | Description |
|---|---|---|
target |
object |
- Source:
(static) remove()
View remove function for ephemeral objects, ie. eventListeners
- Source:
(async, static) render(container)
Renders a defined view into a container. Passes in necessary, predefined
render parameters.
Parameters:
| Name | Type | Description |
|---|---|---|
container |
Container to render the view within |
- Source:


Delhi police nab 3 terror suspects
‘They were planning blasts in city, Assam’
by Staff ReporterThe Delhi police on Monday claimed to have averted terror strikes in Assam and the national capital by arresting three persons allegedly carrying an improvised explosive device in Assam’s Goalpara district.
The suspects have been identified as Ranjeet Islam, Mukadir Islam, and Luit Zameel, all residents of Assam. They are believed to have been influenced by the Bangladesh module of Islamic State, said the police. Luit was a supervisor at an Aadhaar enrolment centre, while the other two were working as labourers. The three men were in touch with some other suspects in Delhi, the police said.
DCP (Special Cell) Pramod Kushwah said they received inputs on the movement of several suspects planning something “big” in Delhi. Their target was a religious congregation. “We got inputs from intelligence agencies that the suspects were present in Goalpara district of Assam,” said Mr. Kushwah. A Special Cell team was sent to Assam for further probe, he added.
The accused were allegedly carrying a complete IED for detonation at Raasmela, a local fair, on Sunday. “They were held before they could place the IED at the fair. An FIR was registered at Goalpara Sadar police station and the accused were brought to Delhi for further investigation,” said Mr. Kushwah.
The Raasmela plan was a test run for Delhi attack. “We are trying to find out their source of logistics and technical support,” the DCP said.


Why hasn’t anyone invented yet a Programming Language that would catch them all?
Such question has stuck in my brain for quite some time, and none of the answers I found online were convincing. Then, I found an essay/video by Prof. Aiken, who teaches a class on Compilers at Stanford’s Computer Science faculty.
His point was so interesting that I want to elaborate it further.
The “cost” of a Programming Language
Let’s start with a question that apparently hasn’t got anything to do with the original question: What’s the most expensive thing about a Programming Language?
Let’s say you were to create a new Programming Language today, and finishing up its development by tomorrow (a bit optimistic, I know). Now, what would the most expensive, and most difficult thing you have to do?
Prof. Aiken makes a very interesting point here. He says that:
The most expensive thing of a Programming Language is the time it takes to programmers to learn it.
If you work in more than one programming language, then you know it’s a lot of time indeed. However, when a language is young and there are only few programmers using it, it can evolve very quickly because it’s easy to keep just a few developers updated with the novelties. Also, young languages are backed by small but extremely tight communities. This is another big boost to its development.
Think about well established languages, say Java and Python. For each of them there are hundreds of thousands of programmers using it, and therefore these languages evolve much more slowly. How much time there is between two consecutive Java, or Python, releases?
Thus, famous and solid programming languages are slower to adapt to new needs that arise from new technologies.
Therefore, quite paradoxically, creating a new language is a faster way to support such new needs, as well as gathering new users and creating a new community of programmers around the new language.
I’d like to share two examples from my own daily practice at work.
A new language, just for statistician?
Let’s consider R, the “language for statisticians”. It’s an extension of an old language, called S, created at the Bell Labs. R, instead, was originally implemented at the University of Auckland, New Zealand.
Would you say it is not possible to support statistics computation in Python, Java or C? Of course it is. And actually there’s a well known package for Python, scipy.stats
, oriented towards statistics.
However, adapting Java or C in order to make them easy-to-use for statisticians would require a lot of time. In this sense, the scipy.stats package is a perfect example: even though it works well (and let’s assume it’s well designed internally), its interface for the programmer (that is, the syntax and the libraries) is nowhere as neat as R’s interface. I personally find scipy.stats
really clumsy to use for statistics. R is almost perfect.
This is why R got a big traction (and quite some hype around it). All well deserved in my opinion. For example, it’s the only programming language used in the fantastic Data Science specialization offered on Coursera by the Johns Hopkins University.
So, all good for a long while. What happened then? In my opinion, things went a bit out of control.
R’s aficionados thought - Hey why don’t we get out of the statisticians world? We can use R for a lot of other things!
The result was a bunch of pseudo- software products written in R. Today, you can really find anything in R: web servers, http and websocket clients, maybe even some GUI library.
The undeniable fact is that R wasn’t designed for these applications. This, along with the fact that they weren’t built by professional software developers, makes these software products not very well designed, again in my modest opinion.
At any rate, the simple evidence is that R has evolved into a full-fledged programming language, regardless of the quality of the libraries for things outside of the statistic scope. Hence, we have a new general-purpose programming language alongside the more classic C++, Java, etc.
If you think R’s story is an exception, then think again! Lots of other Programming Languages have seen the same happening to them.
A new language, just for automation?
A language I’ve worked with for a long time is Matlab. It’s a proprietary programming language, owned by MathWorks, that was designed to seamlessly integrate with a set of other software tools developed by the same company. Main use cases: dynamic system simulations, automotive and feedback control.
Even though these applications are not too common within the Computer Science world, and even though Matlab is not too common of a language either, I think it’s a good example in this context.
Matlab is, once more, in my opinion, not the best programming language out there, if used for general-purpose software development. Memory management, OOP, and many other features are almost senseless therein.
However, it’s just perfect for dynamic systems simulations and control applications. And that’s why is the de-facto tool in this industry.
If you think that numpy + scipy is a good competitor, then, well, I bet you’ve never really used Matlab.
Matlab’s story is quite similar to R’s. A great product, enormously useful to people working in the related field. MathWorks built something really great.
But then people started doing the weirdest thing with it, and things went, ironically, out of control!
Conclusions
Programming Languages history is a fascinating topic! From FORTRAN, for which arguably the first real Compiler was built, to C - simply put, a milestone in the Computer Science history.
Modern languages history is also very interesting, and also heavily influenced by the new trends and technologies that become public every day.
Ultimately, the constant rise of new needs for such technologies, and the big amount of time it would take for “old” languages to adapt and address these needs, are the reasons why we have so many programming languages out there.
References
R programming language: A Brief History (Wikipedia page).
MATLAB programming language: A Brief History (Wikipedia page).
Prof. Aiken personal page at Stanford University.


Getting started
Setup
Before starting with these instructions, make sure you’ve installed Edward.
To get you started with Edward, we’re going to create a few simple services and groups. Our example services will all be written in Go.
These instructions assume a bash terminal.
First off, let’s create a parent folder for our services. This is where the Edward config file will live. In your GOPATH, create a folder called edward_quickstart:
mkdir $GOPATH/edward_quickstart
If you prefer, you can also create this folder under your GitHub username, to fit in with your other projects: $GOPATH/github.com/user/edward_quickstart. The following instructions will assume $GOPATH/edward_quickstart for brevity.
Creating Your First Service
Your first service will be a classic “Hello, world!” HTTP server. This service will sit under edward_quickstart and will consist of a single file, main.go. Let’s create that directory and file now:
mkdir $GOPATH/edward_quickstart/hello
touch $GOPATH/edward_quickstart/hello/main.go
Open the main.go file you just created and add this code:
package main
import (
"flag"
"fmt"
"net/http"
)
var port = flag.Int("port", 8080, "Port number for service")
func main() {
flag.Parse()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, world!")
})
http.ListenAndServe(fmt.Sprintf(":%v", *port), nil)
}
This service will listen on port 8080 by default, and return “Hello, world!” in the body of every response. But we’re not going to run it quite yet, first we’re going to generate a config so we can launch this service with Edward.
Generating an Edward Config
Edward includes a generator for go services which will automatically create config
for any go services found under the current working directory. If we run edward generate
it will create a config for our new service:
cd $GOPATH/edward_quickstart/hello
edward generate
You will see a message letting you know that config for the service hello will
be generated and you will be asked to confirm. Type y
to confirm.
A file called edward.json will be created in the hello directory. You can check that hello is available as a service by listing all available services.
edward list
You should see a list that only includes the hello service.
Starting your Service
Now we have our configuration set up, we can run the hello service with this command:
edward start hello
This will build and launch the hello service. Once the command completes, open a browser and go to http://localhost:8080/, you should see the message Hello, world!.
Stopping your Service
Your service is now running in the background, you can stop it with the stop
command:
edward stop hello
If you now try to browse to http://localhost:8080/, you will see an error message, as the server is no longer running.
When running more than one service, you can stop all services at once with edward stop
.
Restarting your Service
If you’ve made changes to a service, you can restart it to trigger a rebuild. To try this out, first start the service again.
edward start hello
Now, while the service is running, open the main.go file you created earlier, and change:
fmt.Fprintf(w, "Hello, world!")
to:
fmt.Fprintf(w, "Greetings, world!")
To apply this change to your service, run the command:
edward restart hello
This will stop the service, then build and launch it again. If you browse to http://localhost:8080/ again, you will see that the message has changed to Greetings, world!.
Modifying the Edward Config
The Edward config you generated can be found at $GOPATH/edward_quickstart/edward.json. We’re going to edit this file to have the hello service listen on a different port.
Open edward.json, you will see the hello service defined as the only entry in the services array. Under commands, you will see two string values, build and launch. These define the commands used to build and launch your service, respectively.
We’re going to change the launch command to use a different port. Change:
"launch": "hello"
To:
"launch": "hello -port=8081"
Save the config file, and restart the hello service as you did earlier.
The URL http://localhost:8080/ will now no longer work, but http://localhost:8081/ will show the message as expected.
Adding a Second Service
To complement the hello service, let’s add a goodbye service. First, create a directory and source file:
mkdir $GOPATH/edward_quickstart/goodbye
touch $GOPATH/edward_quickstart/goodbye/main.go
Edit $GOPATH/edward_quickstart/goodbye/main.go and add the following code:
package main
import (
"flag"
"fmt"
"net/http"
)
var port = flag.Int("port", 8082, "Port number for service")
func main() {
flag.Parse()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Goodbye, world!")
fmt.Println("Received request")
})
http.ListenAndServe(fmt.Sprintf(":%v", *port), nil)
}
If you run edward generate
now, it will create the goodbye service (you may be
prompted for both services, don’t worry, just confirm), but the hello service’s
config will not be changed.
Run edward list
to confirm that both services are available.
We can start our new service in the same way we started hello:
edward start goodbye
And can view the goodbye message at http://localhost:8082/.
We can also start both services at once. First, stop everything by running edward stop
.
Then run a start command specifying both services.
edward start hello goodbye
Both services will now be running. You can test at their URLs, but you can also see a summary of all your running services with:
edward status
This will show that both services are running, along with the port on which they are running, which should be 8081 for hello and 8082 for goodbye.
Creating a Group
Specifying every service you want to start can be useful for one or two services, but can get tedious for more complicated setups.
To simplify the workflow, you can create groups of services which can be started all at once from a single name.
Open your edward.json file and add a groups array as follows:
{
"groups": [
{
"name": "salutations",
"children": ["hello", "goodbye"]
}
],
"services": [
...
]
}
Save the file and you will now see salutations under the groups list when
you run edward list
.
Stop any running services, then start the group:
edward start salutations
This will build and launch both services, which you can confirm with edward status
.
Viewing Logs
For debugging, you’ll need to be able to view the output from your services. You can
follow the output from one service using the log
command.
Make sure your services are still running, and run the log command to see the output for the goodbye service:
edward log goodbye
This will begin following the output from goodbye. If you visit http://localhost:8082/,
you will see the message “Received request” in the output. You can stop following
the log by pressing Ctrl+c
to interrupt the command.
Running edward log
will show both standard and error output. You can also use
the alias edward tail
.
Summary
After this guide, you should now be able to use Edward to:
- Start, stop and restart services and groups
- Generate config for go services
- Set up groups
- View service status
- Follow service output


7 Daycare Costs and Unexamined Assumptions
Keywords: Skepticism, Census data API
7.1 Case Description
Data journalism is a welcome trend, but it has not always been accompanied by a rise in thoughtful analysis. I saw in a 2015 article from Vox and I was annoyed that the article relied on a map just to show percentages (why not a table?) and then began noticing other problems, such as the lack of a date for the data.
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
| State | Cost |
|---|---|
| Alabama | 5,637 |
| Alaska | 10,957 |
| Arizona | 9,437 |
| Arkansas | 5,995 |
| California | 11,817 |
| Colorado | 13,154 |
| Connecticut | 13,880 |
| Delaware | 11,000 |
| District of Columbia | 22,631 |
| Florida | 8,694 |
| Georgia | 7,644 |
| Hawaii | 8,280 |
| Idaho | 7,200 |
| Illinois | 12,964 |
| Indiana | 8,918 |
| Iowa | 9,485 |
| Kansas | 11,201 |
| Kentucky | 6,294 |
| Louisiana | 5,747 |
| Maine | 9,512 |
| Maryland | 13,932 |
| Massachusetts | 17,062 |
| Michigan | 9,882 |
| Minnesota | 14,366 |
| Mississippi | 4,822 |
| Missouri | 8,632 |
| Montana | 9,062 |
| Nebraska | 7,926 |
| Nevada | 9,852 |
| New Hampshire | 11,810 |
| New Jersey | 11,534 |
| New Mexico | 7,942 |
| New York | 14,144 |
| North Carolina | 9,255 |
| North Dakota | 8,217 |
| Ohio | 8,977 |
| Oklahoma | 6,788 |
| Oregon | 11,322 |
| Pennsylvania | 10,640 |
| Rhode Island | 12,867 |
| South Carolina | 6,475 |
| South Dakota | 5,661 |
| Tennessee | 5,857 |
| Texas | 8,759 |
| Utah | 8,641 |
| Vermont | 11,270 |
| Virginia | 10,458 |
| Washington | 12,733 |
| West Virginia | 7,926 |
| Wisconsin | 11,579 |
| Wyoming | 6,541 |
Source Child Care Aware® of America
The costs come from a source that gives separate estimates for an infant, a four-year old and a school child at day-care centers and the Vox article doesn’t say which age group it used to calculate the percentages of median income that costs represent. Worse, it uses median household income, when the source used median state income (see source at fn 49, p. 2.). (Unfortunately the source cites to a Census data table that no longer exists.)
7.2 With the right metrics
Do the Vox estimates agree with both the costs reported by Cost of Daycare and the Census 2014 median household income, which is what Vox used?
| State | Cost | Median_household_income | Percentage |
|---|---|---|---|
| Alabama | 5,637 | 42,830 | 13 |
| Alaska | 10,957 | 71,583 | 15 |
| Arizona | 9,437 | 50,068 | 19 |
| Arkansas | 5,995 | 41,262 | 15 |
| California | 11,817 | 61,933 | 19 |
| Colorado | 13,154 | 61,303 | 21 |
| Connecticut | 13,880 | 70,048 | 20 |
| Delaware | 11,000 | 59,716 | 18 |
| District of Columbia | 22,631 | 71,648 | 32 |
| Florida | 8,694 | 47,463 | 18 |
| Georgia | 7,644 | 49,321 | 15 |
| Hawaii | 8,280 | 69,592 | 12 |
| Idaho | 7,200 | 47,861 | 15 |
| Illinois | 12,964 | 57,444 | 23 |
| Indiana | 8,918 | 49,446 | 18 |
| Iowa | 9,485 | 53,712 | 18 |
| Kansas | 11,201 | 52,504 | 21 |
| Kentucky | 6,294 | 42,958 | 15 |
| Louisiana | 5,747 | 44,555 | 13 |
| Maine | 9,512 | 49,462 | 19 |
| Maryland | 13,932 | 73,971 | 19 |
| Massachusetts | 17,062 | 69,160 | 25 |
| Michigan | 9,882 | 49,847 | 20 |
| Minnesota | 14,366 | 61,481 | 23 |
| Mississippi | 4,822 | 39,680 | 12 |
| Missouri | 8,632 | 48,363 | 18 |
| Montana | 9,062 | 46,328 | 20 |
| Nebraska | 7,926 | 52,686 | 15 |
| Nevada | 9,852 | 51,450 | 19 |
| New Hampshire | 11,810 | 66,532 | 18 |
| New Jersey | 11,534 | 71,919 | 16 |
| New Mexico | 7,942 | 44,803 | 18 |
| New York | 14,144 | 58,878 | 24 |
| North Carolina | 9,255 | 46,556 | 20 |
| North Dakota | 8,217 | 59,029 | 14 |
| Ohio | 8,977 | 49,308 | 18 |
| Oklahoma | 6,788 | 47,529 | 14 |
| Oregon | 11,322 | 51,075 | 22 |
| Pennsylvania | 10,640 | 53,234 | 20 |
| Rhode Island | 12,867 | 54,891 | 23 |
| South Carolina | 6,475 | 45,238 | 14 |
| South Dakota | 5,661 | 50,979 | 11 |
| Tennessee | 5,857 | 44,361 | 13 |
| Texas | 8,759 | 53,035 | 17 |
| Utah | 8,641 | 60,922 | 14 |
| Vermont | 11,270 | 54,166 | 21 |
| Virginia | 10,458 | 64,902 | 16 |
| Washington | 12,733 | 61,366 | 21 |
| West Virginia | 7,926 | 41,059 | 19 |
| Wisconsin | 11,579 | 52,622 | 22 |
| Wyoming | 6,541 | 57,055 | 11 |
Sources: source and 2014 U.S. Census ACS Table B19013
Wherever Vox derived its data on median household income, the percentages conflict with the official Census data.
Repeating the table using median family income of families with children under 18 changes the picture even more.
| State | Cost | Median_family_income | Percentage |
|---|---|---|---|
| Alabama | 5,637 | 75,194 | 7 |
| Alaska | 10,957 | 102,102 | 11 |
| Arizona | 9,437 | 75,515 | 12 |
| Arkansas | 5,995 | 67,840 | 9 |
| California | 11,817 | 86,659 | 14 |
| Colorado | 13,154 | 91,561 | 14 |
| Connecticut | 13,880 | 118,884 | 12 |
| Delaware | 11,000 | 100,387 | 11 |
| District of Columbia | 22,631 | 156,438 | 14 |
| Florida | 8,694 | 73,152 | 12 |
| Georgia | 7,644 | 79,049 | 10 |
| Hawaii | 8,280 | 86,609 | 10 |
| Idaho | 7,200 | 68,801 | 10 |
| Illinois | 12,964 | 91,630 | 14 |
| Indiana | 8,918 | 77,792 | 11 |
| Iowa | 9,485 | 84,783 | 11 |
| Kansas | 11,201 | 82,231 | 14 |
| Kentucky | 6,294 | 72,934 | 9 |
| Louisiana | 5,747 | 85,688 | 7 |
| Maine | 9,512 | 82,313 | 12 |
| Maryland | 13,932 | 115,514 | 12 |
| Massachusetts | 17,062 | 120,309 | 14 |
| Michigan | 9,882 | 83,788 | 12 |
| Minnesota | 14,366 | 100,317 | 14 |
| Mississippi | 4,822 | 71,948 | 7 |
| Missouri | 8,632 | 79,834 | 11 |
| Montana | 9,062 | 75,129 | 12 |
| Nebraska | 7,926 | 82,543 | 10 |
| Nevada | 9,852 | 71,860 | 14 |
| New Hampshire | 11,810 | 101,759 | 12 |
| New Jersey | 11,534 | 117,618 | 10 |
| New Mexico | 7,942 | 67,481 | 12 |
| New York | 14,144 | 95,033 | 15 |
| North Carolina | 9,255 | 76,894 | 12 |
| North Dakota | 8,217 | 92,987 | 9 |
| Ohio | 8,977 | 85,640 | 10 |
| Oklahoma | 6,788 | 72,169 | 9 |
| Oregon | 11,322 | 78,000 | 15 |
| Pennsylvania | 10,640 | 91,674 | 12 |
| Rhode Island | 12,867 | 95,256 | 14 |
| South Carolina | 6,475 | 76,836 | 8 |
| South Dakota | 5,661 | 81,458 | 7 |
| Tennessee | 5,857 | 73,317 | 8 |
| Texas | 8,759 | 79,954 | 11 |
| Utah | 8,641 | 77,754 | 11 |
| Vermont | 11,270 | 87,743 | 13 |
| Virginia | 10,458 | 100,305 | 10 |
| Washington | 12,733 | 90,150 | 14 |
| West Virginia | 7,926 | 70,965 | 11 |
| Wisconsin | 11,579 | 87,677 | 13 |
| Wyoming | 6,541 | 88,483 | 7 |
Sources: Cost of Daycare and 2014 U.S. Census ACS Table B19126
The table below compares the Vox table with this analysis.
| State | Vox | This_paper | Difference |
|---|---|---|---|
| Alabama | 13 | 7 | 6 |
| Alaska | 15 | 11 | 4 |
| Arizona | 19 | 12 | 7 |
| Arkansas | 15 | 9 | 6 |
| California | 19 | 14 | 5 |
| Colorado | 21 | 14 | 7 |
| Connecticut | 20 | 12 | 8 |
| Delaware | 18 | 11 | 7 |
| District of Columbia | 32 | 14 | 18 |
| Florida | 18 | 12 | 6 |
| Georgia | 15 | 10 | 5 |
| Hawaii | 12 | 10 | 2 |
| Idaho | 15 | 10 | 5 |
| Illinois | 23 | 14 | 9 |
| Indiana | 18 | 11 | 7 |
| Iowa | 18 | 11 | 7 |
| Kansas | 21 | 14 | 7 |
| Kentucky | 15 | 9 | 6 |
| Louisiana | 13 | 7 | 6 |
| Maine | 19 | 12 | 7 |
| Maryland | 19 | 12 | 7 |
| Massachusetts | 25 | 14 | 11 |
| Michigan | 20 | 12 | 8 |
| Minnesota | 23 | 14 | 9 |
| Mississippi | 12 | 7 | 5 |
| Missouri | 18 | 11 | 7 |
| Montana | 20 | 12 | 8 |
| Nebraska | 15 | 10 | 5 |
| Nevada | 19 | 14 | 5 |
| New Hampshire | 18 | 12 | 6 |
| New Jersey | 16 | 10 | 6 |
| New Mexico | 18 | 12 | 6 |
| New York | 24 | 15 | 9 |
| North Carolina | 20 | 12 | 8 |
| North Dakota | 14 | 9 | 5 |
| Ohio | 18 | 10 | 8 |
| Oklahoma | 14 | 9 | 5 |
| Oregon | 22 | 15 | 7 |
| Pennsylvania | 20 | 12 | 8 |
| Rhode Island | 23 | 14 | 9 |
| South Carolina | 14 | 8 | 6 |
| South Dakota | 11 | 7 | 4 |
| Tennessee | 13 | 8 | 5 |
| Texas | 17 | 11 | 6 |
| Utah | 14 | 11 | 3 |
| Vermont | 21 | 13 | 8 |
| Virginia | 16 | 10 | 6 |
| Washington | 21 | 14 | 7 |
| West Virginia | 19 | 11 | 8 |
| Wisconsin | 22 | 13 | 9 |
| Wyoming | 11 | 7 | 4 |
7.3 Takeaway
Доверяй, но проверяй
Trust, but verify. This is true of any data, but especially data that you can trace trace to an authoritative source. And it is critical to think about the choice of a benchmark to evaluate one set of data against another. Here, the costs of day care came from a credible source and seem reasonable, based on anecdotal evidence. If this were more than an exercise, it would be important to seek out alternative estimates.
The data used to provide the cost of day care as a percentage of median household income proved a poor choice. Not all households have children. There is, however, data not only for family households, but even for families with children under 18. Relatively few households residing in retirement communities have day care expenses; it also turns out that families with children under 18 have a higher median income than the all household group.
There may be a way to determine median income of families with one or more children under 6, since the number of those families is collected or estimated (between the full Census years), which would provide an even better metric.
The data you have is not always the data you need.
Data sources:
Cost of Daycare, Appendix I: 2014 Average Annual Cost of Full-Time Child Care by State, pp. 53-54 in pdf
U.S. Census American Community Survey for 2014, using the R package by Ezra Haber Glenn (2018). acs: Download, Manipulate, and Present American Community Survey and Decennial Data from the US Census. R package version 2.1.3. https://CRAN.R-project.org/package=acs


DEFINE-QT-WRAPPERS (qt-library &rest what)
Defines Lisp methods for all Qt methods/signals/slots of given library.
(See example Qt_EQL_dynamic/trafficlight/
).
(define-qt-wrappers *c++*) ; generate wrappers (see "Qt_EQL_dynamic/") (define-qt-wrappers *c++* :slots) ; Qt slots only (any of :methods :slots :signals) (my-qt-function *c++* x y) ; instead of: (! "myQtFunction" (:qt *c++*) x y)
DEFVAR-UI (main-widget &rest variables)
This macro simplifies the definition of UI variables:
(defvar-ui *main* *label* *line-edit*...) ;; the above will expand to: (progn (defvar *label* (qfind-child *main* "label")) (defvar *line-edit* (qfind-child *main* "line_edit")) ...)
ENSURE-QT-OBJECT (object)
Returns the qt-object
of the given class/struct (see method the-qt-object
in example X-extras/CLOS-encapsulation.lisp
).
This function is used internally whenever a qt-object
argument is expected.
QADD-EVENT-FILTER (object event function)
Convenience function. Adds a Lisp function to be called on a given event type.
If the object argument is NIL
, the event will be captured for the whole application.
If the Lisp function returns NIL
, the event will be processed by Qt afterwards.
Returns a handle which can be used to remove the filter, see qremove-event-filter
.
See also qoverride
for QObject::eventFilter(QObject*,QEvent*)
and QObject::installEventFilter(QObject*)
,QObject::removeEventFilter(QObject*)
.
The event class corresponds to the respective event type (no cast needed).
(qadd-event-filter nil |QEvent.MouseButtonPress| (lambda (object mouse-event) (print object) nil))
QAPP ()
Convenience function returning qApp
.
QAPROPOS (&optional search-string class-name)
Finds all occurrencies of the given search string in the given object's meta information.
Constructors are listed under "Methods".
To list the user defined functions of external C++ classes (see Qt_EQL), pass the object instead of the class name.
(qapropos "html" "QTextEdit") (qapropos nil "QWidget") (qapropos) (qapropos '|toString|) ; wrapper function symbol (qapropos nil *qt-main*) ; see Qt_EQL, Qt_EQL_dynamic (custom Qt classes, Qt3Support classes)
QAPROPOS* (&optional search-string class-name)
Similar to qapropos
, returning the results as nested list.
QAUTO-RELOAD-C++ (variable library-name)
Linux only.
Extends qload-c++
(see Qt_EQL_dynamic/
).
Defines a global variable (see return value of qload-c++
), which will be updated on every change of the C++ plugin (e.g. after recompiling, the plugin will automatically be reloaded, and the variable
will be set to its new value).
If you want to be notified on every change of the plugin, set *<variable>-reloaded*
. It will then be called after reloading, passing both the variable name and the plugin name.
See qload-c++
for an example how to call plugin functions.
(qauto-reload-c++ *c++* "eql_cpp") (setf *c++-reloaded* (lambda (var lib) (qapropos nil (symbol-value var)))) ; optional: set a notifier
QCALL-DEFAULT ()
To use anywhere inside an overridden function (see qoverride
).
Calls the base implementation of the virtual Qt method after leaving the function body.
Optionally call the base implementation directly (if you want to do post-processing of the return value).
QCLEAR-EVENT-FILTERS ()
Clears all added event filters.
QCONNECT (caller signal receiver/function &optional slot)
Connects either a Qt signal to a Qt slot, or a Qt signal to a Lisp function.
(qconnect edit "textChanged(QString)" label "setText(QString)") (qconnect edit "textChanged(QString)" (lambda (txt) (print txt)))
QCOPY (object)
Copies object
using copy-on-write, if such a constructor is available (non QObject derived classes only).
This function is short for e.g: (qnew "QPixmap(QPixmap)" pixmap)
Note that the returned value will not be garbage collected (analogous to qnew
).
(qcopy pixmap) ; QPen, QBrush, QFont, QPalette, QPixmap, QImage...
QDELETE (object &optional later)
QDEL
Deletes any Qt object, and sets the pointer
value to 0
. Deleting a widget deletes all its child widgets, too.
If later
is not NIL
, the function QObject::deleteLater()
will be called instead (but note: the object
pointer will be set to 0
immediately.)
Returns T
if the object has effectively been deleted.
See also qlet
for local Qt objects.
(qdel widget) (qdel socket :later)
QDISCONNECT (caller &optional signal receiver/function slot)
Disconnects signals to either Qt slots or Lisp functions. Anything but the caller can be either NIL
or omitted.
Returns T
if something has effectively been disconnected.
(qdisconnect edit "textChanged(QString)" label "setText(QString)") (qdisconnect edit "textChanged(QString)") (qdisconnect edit nil label) (qdisconnect edit)
QENUMS (class-name &optional enum-name)
Returns the meta enum list of the given class-name
and enum-name
(see Q_ENUMS
in Qt sources).
Omitting enum-name
will return all meta enum lists of the class/scope.
(qenums "QLineEdit" "EchoMode") ; gives '("QLineEdit" ("EchoMode" ("Normal" . 0) ...)) (qenums "Qt")
QEQL (object1 object2)
Returns T
for same instances of a Qt class.
To test for same Qt classes only, do:
(= (qt-object-id object1) (qt-object-id object2))
QESCAPE (string)
Calls Qt::escape()
.
QEVAL (&rest forms)
Slime mode :repl-hook
only (not needed in default Slime mode): evaluate forms in GUI thread. Defaults to a simple progn
outside of Slime.
QEXEC (&optional milliseconds)
Convenience function to call QApplication::exec()
.
Optionally pass the time in milliseconds after which QEventLoop::exit()
will be called.
See also qsleep
.
QEXIT ()
Calls QEventLoop::exit()
, in order to exit event processing after a call to qexec
with a timeout.
Returns T
if the event loop has effectively been exited.
QFIND-BOUND (&optional class-name)
Finds all symbols bound to Qt objects, returning both the Qt class names and the respective Lisp variables.
Optionally finds the occurrencies of the passed Qt class name only.
(qfind-bound "QLineEdit")
QFIND-BOUND* (&optional class-name)
Like qfind-bound
, but returning the results as list of conses.
QFIND-CHILD (object object-name)
Calls qFindChild<QObject*>()
.
Can be used to get the child objects of any Qt object (typically from a UI, see qload-ui
), identified by QObject::objectName()
.
(qfind-child *main* "editor")
QFIND-CHILDREN (object &optional object-name class-name)
Calls qFindChildren<QObject*>()
, returning a list of all child objects matching object-name
and class-name
.
Omitting the &optional
arguments will find all children, recursively.
(qfind-children *qt-main* nil "LightWidget") ; see Qt_EQL example
QFROM-UTF8 (byte-array)
Returns the byte array (vector of octets) converted using QString::fromUtf8()
.
QGUI (&optional process-events)
Launches the EQL convenience GUI.
If you don't have an interactive environment, you can pass T
to run a pseudo Qt event loop. A better option is to start the tool like so:eql -qgui
, in order to run the Qt event loop natively.
QID (name)
Returns the internally used ID of the object name. Non QObject classes have negative ids.
(qid "QWidget")
QINVOKE-METHOD (object function-name &rest arguments)
QFUN
Calls any of Qt methods, slots, signals. Static methods can be called by passing the string name of an object.
The most convenient way of calling Qt methods is to use the wrapper functions (see alternative 2 below), which allows for tab completion, showing all possible candidates in case of ambiguous type lists (overloaded methods). Additionally, static functions are shown as one symbol (easily catching the eye).
(Optionally you can pass the argument types (as for qconnect
and qoverride
), which may result in better performance, but only in some edge cases.)
(qfun item "setText" 0 "Some objects are EQL.") (qfun "QDateTime" "currentDateTime") ; static method (qfun slider "valueChanged" 10) ; emit signal ;; alternative 1: (macro '!') (! "setText" item 0 "Some objects are EQL.") (! "currentDateTime" "QDateTime") (! "valueChanged" slider 10) ;; alternative 2: (wrapper functions) (|setText| item 0 "Some objects are EQL.") (|currentDateTime.QDateTime|) (|valueChanged| slider 10)
QINVOKE-METHOD* (object cast-class-name function-name &rest arguments)
QFUN*
Similar to qinvoke-method
, additionally passing a class name, enforcing a cast to that class.
Note that this cast is not type safe (the same as a C cast, so dirty hacks are possible).
Note: using the (recommended) wrapper functions (see qfun
), casts are applied automatically where needed.
(qfun* graphics-text-item "QGraphicsItem" "setPos" (list x y)) ; multiple inheritance problem (qfun* event "QKeyEvent" "key") ; not needed with QADD-EVENT-FILTER ;; alternatively: (! "setPos" ("QGraphicsItem" graphics-text-item) (list x y)) (! "key" ("QKeyEvent" event)) ;; better/recommended: (|setPos| graphics-text-item (list x y))
QINVOKE-METHOD+ (object function-name &rest arguments)
QFUN+
Use this variant to call user defined functions (declared Q_INVOKABLE
), slots, signals from external C++ classes.
In order to call ordinary functions, slots, signals from external C++ classes, just use the ordinary qfun
.
(qfun+ *qt-main* "foo") ; see Qt_EQL, Qt_EQL_dynamic ;; alternatively: (! "foo" (:qt *qt-main*))
QINVOKE-METHODS (object &rest functions)
QFUNS
A simple syntax for nested qfun
calls.
(qfuns object "funA" "funB" "funC") ; expands to: (qfun (qfun (qfun object "funA") "funB") "funC") (qfuns object ("funA" 1) ("funB" a b c)) ; expands to: (qfun (qfun object "funA" 1) "funB" a b c) (qfuns "QApplication" "font" "family") (qfuns *table-view* "model" ("index" 0 2) "data" "toString") ;; alternatively: (! ("funC" "funB" "funA" object)) (! (("funB" a b c) ("funA" 1) object)) (! ("family" "font" "QApplication")) (! ("toString" "data" ("index" 0 2) "model" *table-view*)) ;; using wrapper functions, the above reads: (|funC| (|funB| (|funA| object))) (|funB| (|funA| object 1) a b c) (|family| (|font.QApplication|)) (|toString| (|data| (|index| (|model| *table-view*) 0 2)))
QLATER (function)
Convenience macro: a qsingle-shot
with a 0
timeout.
This will call function
as soon as the Qt event loop is idle.
(qlater 'delayed-ini)
QLET (((variable-1 expression-1) (variable-2 expression-2)) &body body)
Similar to let*
(and to local C++ variables).
Creates temporary Qt objects, deleting them at the end of the qlet
body.
If expression
is a string, it will be substituted with (qnew expression)
, optionally including constructor arguments.
(qlet ((painter "QPainter")) ...) (qlet ((reg-exp "QRegExp(QString)" "^\\S+$")) ...)
QLOAD (file-name)
Convenience function for Slime (or when loading EQL files from an ECL thread).
Loading files that create many Qt objects can be slow on the Slime REPL (many thread switches).
This function reduces all thread switches (GUI related) to a single one.
QLOAD-C++ (library-name &optional unload)
Loads a custom Qt/C++ plugin (see Qt_EQL_dynamic/
).
The library-name
has to be passed as path to the plugin, without file ending.
This offers a simple way to extend your application with your own Qt/C++ functions.
The plugin will be reloaded (if supported by the OS) every time you call this function (Linux: see also qauto-reload-c++
).
If the unload
argument is not NIL
, the plugin will be unloaded (if supported by the OS).
(defparameter *c++* (qload-c++ "eql_cpp")) ; load (Linux: see also QAUTO-RELOAD-C++) (qapropos nil *c++*) ; documentation (! "mySpeedyQtFunction" (:qt *c++*)) ; call library function (note :qt)
QLOAD-UI (file-name)
Calls a custom QUiLoader::load()
function, loading a UI file created by Qt Designer. Returns the top level widget of the UI.
Use qfind-child
to retrieve the child widgets.
(qload-ui "my-fancy-gui.ui")
QLOCAL8BIT (string)
Converts a Unicode pathname to a simple ECL base string, using QString::toLocal8Bit()
(see QLocale
settings).
Depending on the OS (namely Windows), this is necessary if you get a filename from Qt and want to use it in ECL.
See also QUTF8.
QMESSAGE-BOX (x)
QMSG
Convenience function: a simple message box, converting x
to a string if necessary.
Returns its argument (just like print
).
QNEW-INSTANCE (class-name &rest arguments/properties)
QNEW
Creates a new Qt object, optionally passing the given arguments to the constructor.
Additionally you can pass any number of property/value pairs.
Please note how you can abbreviate long type lists.
(qnew "QWidget") (qnew "QPixmap(int,int)" 50 50) ; constructor (qnew "QLabel" "text" "Readme") ; set property (qnew "QMatrix4x4(qreal...)" 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4)
QNEW-INSTANCE* (class-name &rest arguments/properties)
QNEW*
Convenience function for the REPL.
Same as qnew
, but showing the object immediately (if of type QWidget
).
QNULL-OBJECT (object)
QNULL
Checks for a 0
Qt object pointer.
QOBJECT-NAMES (&optional type)
Returns all supported object names. Passing either :q
or :n
returns only the QObject inherited, or not QObject inherited names, respectively.
QOK ()
Needed to get the boolean ok value in cases like this:
(! "getFont(bool*)" "QFontDialog" nil) (|getFont.QFontDialog| nil) ; NIL needed for <bool*>
QOVERRIDE (object name function)
Sets a Lisp function to be called on a virtual Qt method.
To remove a function, pass NIL
instead of the function argument.
If you call qcall-default
anywhere inside your overridden function, the base implementation will be called afterwards.
Instead of qcall-default
you can directly call the base implementation, which is useful if you want to do post-processing of the returned value.
(qoverride edit "keyPressEvent(QKeyEvent*)" (lambda (ev) (print (|key| ev)) (qcall-default)))
QPROCESS-EVENTS ()
Convenience function to call QApplication::processEvents()
.
QPROPERTIES (object &optional (depth 1))
Prints all current properties of object
, searching both all Qt properties and all Qt methods which don't require arguments (marked with '*').
Optionally pass a depth
indicating how many super-classes to include. Pass T
to include all super-classes.
(qproperties (|font.QApplication|)) (qproperties (qnew "QVariant(QString)" "42")) (qproperties *tool-button* 2) ; depth 2: both QToolButton and QAbstractButton
QPROPERTY (object name)
QGET
Gets a Qt property. Enumerator values are returned as int
values.
Returns T
as second return value for successful calls.
(qget label "text")
QQUIT (&optional (exit-status 0) (kill-all-threads t))
QQ
Terminates EQL. Use this function to quit gracefully, not ext:quit
.
QREMOVE-EVENT-FILTER (handle)
Removes the event filter corresponding to handle
, which is the return value of qadd-event-filter
.
Returns handle
if the event filter has effectively been removed.
See also qclear-event-filters
.
QREQUIRE (module &optional quiet)
Loads an EQL module, corresponding to a Qt module.
Returns the module name if both loading and initializing have been successful.
If the quiet
argument is not NIL
, no error message will be shown on failure.
Available modules: :help :network :opengl :sql :svg :webkit
(qrequire :network)
QRGB (red green blue &optional (alpha 255))
Constructs a (unsigned-byte 32)
value that represents a 32 bit pixel color specified by the red, green, blue and alpha values.
QRUN-IN-GUI-THREAD (function &optional (blocking t))
QRUN
Runs function
in GUI thread while (by default) blocking the calling thread (if called from main thread, function
will simply be called directly).
This is needed to run GUI code from ECL threads other than the main thread.
Returns T
on success.
There are 2 reasons to always wrap any EQL function like this, if called from another ECL thread:
qrun*
.
(qrun 'update-view-data)
QRUN-IN-GUI-THREAD* (&body body)
QRUN*
Convenience macro for qrun
, wrapping body
in a closure (passing arguments, return values).
(qrun* (|setValue| ui:*progress-bar* value)) (let ((item (qrun* (qnew "QTableWidgetItem")))) ; return value(s) ...)
QSELECT (&optional on-selected)
QSEL
Allows to select (by clicking) any (child) widget.
The variable qsel:*q*
is set to the latest selected widget.
Optionally pass a function to be called upon selecting, with the selected widget as argument.
(qsel (lambda (widget) (qmsg widget)))
QSENDER ()
Corresponding to QObject::sender()
. To use inside a Lisp function connected to a Qt signal.
QSET-COLOR (widget color-role color)
Convenience function for simple color settings (avoiding QPalette
boilerplate).
Use QPalette
directly for anything more involved.
(qset-color widget |QPalette.Window| "white")
QSET-NULL (object)
Sets the Qt object pointer to 0
. This function is called automatically after qdel
.
QSET-PROPERTY (object name value)
QSET
Sets a Qt property. Enumerators have to be passed as int
values.
Returns T
as second return value for successful calls.
(qset label "alignment" |Qt.AlignCenter|)
QSIGNAL (name)
Needed in functions which expect a const char*
Qt signal (not needed in qconnect
).
QSINGLE-SHOT (milliseconds function)
A single shot timer similar to QTimer::singleShot()
.
(qsingle-shot 1000 'one-second-later) (let ((ms 500)) (qsingle-shot ms (lambda () (qmsg ms))))
QSLEEP (seconds)
Similar to sleep
, but continuing to process Qt events.
QSLOT (name)
Needed in functions which expect a const char*
Qt slot (not needed in qconnect
).
QSTATIC-META-OBJECT (class-name)
Returns the ::staticMetaObject
of the given class name.
(qstatic-meta-object "QEasingCurve")
QSUPER-CLASS-NAME (name)
Returns the super class of an object name, or NIL
if the class doesn't inherit another Qt class.
Returns T
as second return value for successful calls.
(qsuper-class-name "QGraphicsLineItem")
QT-OBJECT-? (object)
Returns the specific qt-object
of a generic qt-object
.
Works for QObject and QEvent inherited classes only.
(qt-object-? (|parentWidget| widget)) (qt-object-? (|widget| (|itemAt| box-layout 0))) (qt-object-? event)
QT-OBJECT-NAME (object)
Returns the Qt class name.
QUI-CLASS (file-name &optional object-name)
Finds the class name for the given user-defined object name in the given UI file.
Omitting the object name will return the top level class name of the UI.
(qui-class "examples/data/main-window.ui" "editor") ; returns "QTextEdit"
QUI-NAMES (file-name)
Finds all user-defined object names in the given UI file.
(qui-names "examples/data/main-window.ui")
QUIC (&optional (file.h "ui.h") (file.lisp "ui.lisp") (ui-package :ui))
Takes C++ code from a file generated by the uic
user interface compiler, and generates the corresponding EQL code.
See also command line option -quic
.
QUTF8 (string)
Converts a Unicode pathname to a simple ECL base string, using QString::toUtf8()
.
Depending on the OS (namely OSX, Linux), this is necessary if you get a filename from Qt and want to use it in ECL.
See also QLOCAL8BIT.
QVERSION ()
Returns the EQL version number as "<year>.<month>.<counter>", analogous to the ECL version number.
The second return value is the Qt version as returned by qVersion()
.
TR (source &optional context plural-number)
Macro expanding to qtranslate
, which calls QCoreApplication::translate()
.
Both source
and context
can be Lisp forms evaluating to constant strings (at compile time).
The context
argument defaults to the Lisp file name. For the plural-number
, see Qt Assistant.