text:
Q: Swift error in SwiftUI Button action closure: "Cannot use mutating member on immutable value: 'self' is immutable" Following is the shortened version of the ContentView in my Swift app. The error Cannot use mutating member on immutable value: 'self' is immutable shows up on line self.classifyImage(self.image) inside my Button action closure. How do I set image to be mutable? Or is there a better way to do what I'm trying to accomplish? Essentially I want to pass the UIImage var in my ContentView to be processed by my Vision CoreML model via the classifyImage function I have here.
struct ContentView: View {
    @State private var image = UIImage()

    private lazy var classificationRequest: VNCoreMLRequest = {
        do {
          let model = try VNCoreMLModel(for: SqueezeNet().model)

          let request = VNCoreMLRequest(model: model) { request, _ in
              if let classifications =
                request.results as? [VNClassificationObservation] {
                print("Classification results: \(classifications)")
              }
          }
          request.imageCropAndScaleOption = .centerCrop
          return request
        } catch {
          fatalError("Failed to load Vision ML model: \(error)")
        }
    }()

    private mutating func classifyImage(_ image: UIImage) {
        guard let orientation = CGImagePropertyOrientation(
          rawValue: UInt32(image.imageOrientation.rawValue)) else {
          return
        }

        guard let ciImage = CIImage(image: image) else {
          fatalError("Unable to create \(CIImage.self) from \(image).")
        }

        DispatchQueue.global(qos: .userInitiated).async {
          let handler =
            VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
          do {
              try handler.perform([self.classificationRequest])
          } catch {
            print("Failed to perform classification.\n\(error.localizedDescription)")
          }
        }
    }

    var body: some View {
        Button(action: {
            self.classifyImage(self.image).   // <-- error
        }) {
            // Button text here
        }
        // blah blah
    }
}

A: You cannot mutate View from within itself as struct (so no lazy creations, no mutating func, etc). If you need to change image somewhere, then assign to it directly as to state.
Here is fixed (compilable) part of code. Tested with Xcode 12.
struct ContentView: View {
    @State private var image = UIImage()

    private let classificationRequest: VNCoreMLRequest = {
        do {
          let model = try VNCoreMLModel(for: SqueezeNet().model)

          let request = VNCoreMLRequest(model: model) { request, _ in
              if let classifications =
                request.results as? [VNClassificationObservation] {
                print("Classification results: \(classifications)")
              }
          }
          request.imageCropAndScaleOption = .centerCrop
          return request
        } catch {
          fatalError("Failed to load Vision ML model: \(error)")
        }
    }()

    private func classifyImage(_ image: UIImage) {
        guard let orientation = CGImagePropertyOrientation(
          rawValue: UInt32(image.imageOrientation.rawValue)) else {
          return
        }

        guard let ciImage = CIImage(image: image) else {
          fatalError("Unable to create \(CIImage.self) from \(image).")
        }

        DispatchQueue.global(qos: .userInitiated).async {
          let handler =
            VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
          do {
              try handler.perform([self.classificationRequest])
          } catch {
            print("Failed to perform classification.\n\(error.localizedDescription)")
          }
        }
    }

    var body: some View {
        Button(action: {
            self.classifyImage(self.image)   // <-- error
        }) {
            // Button text here
        }
        // blah blah
    }
}

A: The problem is that you are dealing with a struct. Changing a value inside a struct is semantically the same as assigning a new value to it. So the function would work when your ContentView struct is defined via var contentView = ContentView(). If you use let contentView = ContentView() than you get your error. The difference is that by assigning a new value to your image with the mutating function swift automatically creates a new Struct and assigns it to var contentView = ....
Another better approach would be if you would use a ViewModel like this:
import Combine
import UIKit
....
class ContentViewModel: ObservableObject {
    var image: uiImage
    @Published var classification: String

    init(_ image: UIImage) {
       self.image = image
    }

    func classifyImage() {
       // classify your image and assign the result to the published var classification. This way your view will be automatically updated on a change
    }
}

Then you could use the model in your View like this:
struct ContentView: View {
    @ObservedObject private var viewModel = ContentViewModel(UIImage())

    var body: some View {
        Button(action: {
            self.viewModel.classifyImage()
        }) {
            // Button text here
        }
        // blah blah
    }
}

This is a much cleaner approach due to the fact that you are encapsulate your logic into a viewmodel and do not pollute the view with processing code.

redpajama_set_name: RedPajamaStackExchange


text:
Kirmond le Mire, Lincolnshire
The village comprises of little more than a row of houses and several farms, the church is on the north side of the road on an easterly slope running down to a small stream at the bottom of the hill, there are numerous footpaths in the area giving access to some good views of the Wolds.
The village has existed in some form since Roman times, remains of a large villa complex have been found, and Roman terraces can be seen beyond the stream. The Domesday book of 1086 lists the village as having a church, 24 families and a mill, probably water driven, the whole being part of the estates of William de Percy, a Norman baron. The name 'Kirmond' is Norman French and derives from the meaning 'goat hill'.
Little is known about the original church which probably dated back to Norman times. Kirmond was involved in the Lincolnshire rising in Henry VIII's time and during Queen Elizabeth I's reign the church was in good order, however it fell into disrepair in the 17th century when its nave was demolished.
The present building was designed WA Nicholson in 1848 and was financed by Squire Christopher Turnor of Stoke Rochford near Grantham, who was owner of the village. It is built in the Early English in local ironstone. There is a west bell cote, nave, south porch and chancel with a north vestry. The chancel has a priest's door which is decorated with a pattern of dogtooth Saint Andrew's crosses. There are several lancet windows, and a pointed oval window in the west wall beneath the bell cote.
In 1899 the interior of St Martin's was refurbished at a cost of £10. In 1930 a brick and concrete vestry was built, somewhat spoiling the north side of the church. At that time a new set of furnishings was also added. The church has several memorials to various members of the Turnor family.
The church is maintained and cared for by the small community and is a beautiful place to spend a few quiet moments when visiting the area. A pumpkin and vegetable sculpture service in October is always popular!
Fascinating churchyard
53.417164, -0.2178195
St Martin Church, Kirmond Road
Kirmond le Mire
LN8 6HZ
More information coming soon.
Revd Chris Hewitt
chris.hewitt@lincoln.anglican.org
St Martin External links
St Andrew's is popular with walkers and others who, according to our visitors book, appreciate both its peaceful setting and the fact that it is always open during daylight hours.
St Mary with St Gabriel
Two churches are recorded at Binbrook in Domesday, these most likely being the former churches of St Mary and St Gabriel.
Brookenby church was created out of the former unmarried sergeants accommodation and consists of worship area, two meeting rooms, kitchen and library.

redpajama_set_name: RedPajamaCommonCrawl


Zlatan Ibrahimović (IPA: , Bosnian pronunciation; born October 3, 1981) is a Swedish football player of Bosniak and Croatian descent. He plays as a striker. He currently plays for Inter Milan, in Italy, and for the Sweden national football team.
On August 18, 2004, Ibrahimović injured fellow Ajax teammate Rafael van der Vaart during an international match against the Netherlands, which led to accusations from van der Vaart that Ibrahimović had hurt him intentionally. This led to Ibrahimović's sudden sale to Juventus F.C. on August 31, 2004.
Near the end of the Serie A season Juve reportedly rejected a €70 million bid for him from Spanish power Real Madrid. This later proved to be nothing more than a PR stunt initiated by Ibrahimović's agent in order to raise his market value. Nonetheless, he was voted the player of the season in 2004-05 by the fans of Juventus. Zlatan was nominated to the 2005 FIFA world player of the year along with thirty other top players and finished as number eight. On November 14, 2005, he was awarded Guldbollen, a prize given to the best Swedish footballer of the year.
Even though he played well, arguably the best football he had produced so far, criticism against the lack of goals started to increase. And in spring, when Ibrahimović lost most of his fine form in the game outside the penalty area as well, criticism rose to a thunderstorm, both in Italy, where fans and journalists preferred Juve icon Alessandro del Piero, often sidelined for Ibrahimović's benefit, and in Sweden. Even so, he retained his place in the starting eleven and Juventus eventually won the Serie A again. Ibrahimović was also considered arrogant and troublesome, especially in Sweden where these feelings were strengthened due to several incidents between Zlatan and Swedish media.
Ibrahimović was a regular starter for Sweden in the campaign for Euro 2004, and after a fine season in Ajax he was well prepared for Euro 2004 in Portugal. He joined a fine Swedish team featuring Celtic star Henrik Larsson and Arsenal winger Fredrik Ljungberg. Ibrahimović did well, scoring a penalty goal against Bulgaria and rounding off a fine performance against the solid defense of Italy by scoring an amazing late equaliser. He jumped up in the air with his back to goal and kicked the ball one-and-a-half meters above the ground with his back heel into Buffon's top corner. Ibrahimović is well known for his agility and his ability to score goals with his feet high up in the air, and perhaps this stems from the fact that he practiced tae kwon do as a youth. The tournament ended, though, with Sweden losing to Holland on penalties in the quarterfinals. Zlatan was one of the Swedes who missed a penalty.
Ibrahimović contributed heavily to Sweden's successful attempt to qualify to the 2006 World Cup. Both Sweden and Ibrahimović were thought to under-achieve in the tournament, though. He was substituted at half time in one game, against Paraguay, and did not participate in another, against England, due to a groin injury. How much his performances in the other games were affected by this is hard to know. Sweden was knocked out in the 2nd round by Germany.


Just a quick note to announce that I'm back online after a 2 year hiatus following Comcast's decision not to host websites. I managed to acquire the domain "wxman57.com".
I have my very old and outdated site "WorldWide Weather" uploaded as a test, but one page I've been maintaining is my hurricane links page.
I got the pages back up describing how to make meteograms (plus the Excel files).
Last edited by vbhoutex on Sat Mar 11, 2017 6:30 pm, edited 1 time in total.
Oh dear. Next thing you know, he will be writing a book. The title?
All I have to say is Its about damn time!
Just playing around with it using notepad, I removed the cat in the left frame and replaced it with something more appropriate. I also removed the left menu drop-down menu to pages that no longer exist, as well as all the stuff under "What's New" that was from as long as 17 years ago.
wxman57 wrote: Just playing around with it using notepad, I removed the cat in the left frame and replaced it with something more appropriate. I also removed the left menu drop-down menu to pages that no longer exist, as well as all the stuff under "What's New" that was from as long as 17 years ago.
I remember really enjoying your earlier page on the case for Florida getting increased activity prior to the hyperactive mid 2000's. You made some great arguments predicting the future. Thanks for bringing your site back up.
Tireman4 wrote: Oh dear. Next thing you know, he will be writing a book. The title?
A fascinating glimpse into the life of Wxman57, renowned meteorological realist, as you've never seen him before. Discover the hows, whys, and methods behind his unique persona and his unbelievable plans for the future.
In this updated edition, you'll find classic stories of his wait-and-pounce approach. Ignoring the message boards for several days while young enthusiasts hype the latest group of clouds into a Category 5 monster, Wxman57 then returns from a 7,200km bike ride to crush their dreams with science. "There's nothing there yet -- and probably won't be until next Thursday" he types. "This will probably increase cloudiness in the Bahamas and maybe rain chances into next weekend for Florida. That's good because I'm scheduled to be off."
In addition, you'll get never-before-seen insights into the true monster storm threats. Using the same blunt tactics and free of any emotion whatsoever, Wxman57's Vulcan-like persona crushes the reverse-psychology groupthink surrounding a real, genuine threat. "This will likely be a Category 3 or 4 landfalling somewhere from Grand Isle to Port Arthur in 3 days." he says, obliterating aspiring internet meteorologist "DingoBaby" who insists Tropical Depression 4 is a "weak, nothing blob".
This edition includes bonus features and interviews with his most vocal critics and colleagues.
Dr. Punjab Gorupta from the University of New Delhi calls the book "Thorough...the internet needs to hear this story".
Good going wxman57! Keep up the good work!
If you can still find a copy of 1stPage200 (now defunct HTML editor), you might find that useful. Let's you test and preview off-line. Then you can upload the resulting code. I may have the downloaded installer file somewhere.
My posts are not official forecasts. They are just my opinion and may or may not be backed by sound meteorological data. They are NOT endorsed by any professional institution or storm2k.org. For official information, please refer to the NHC and NWS products.
WXman I remember reading that FL report back then.. boy did it come true in 2004/05. Are you going to update this?
This looks amazing. Thanks for the heads up. As someone who is pretty new to all this stuff, it's nice having one website to access all of these different resources.


What the Sports happened to Sweden?
Two headers, two goals for England.
What didn't happen with Sweden is the real question.
There's a reason why Zlatan was left off the World Cup squad this year, and this Instagram conversation with former England international David Beckham is that reason.
There is something about England and set pieces that go so beautifully together and go so badly for opponents.
Also, never doubt Harry Kane.
Jordan Pickford might be the second coming of Jesus in England if things stay the course.
What do we think of Tottenham? Crap! What do we think of crap? Tottenham!
That was thrown out the door apparently since Dele Alli and Harry Kane have been bossing the pitch. God Save the Queen indeed.
I paid three quid for this beer. Screw it.
Imagine Auburn's Iron Bowl miracle, the Minneapolis Miracle, Tiger Woods' 2008 US Open performance, David Freese's walk-off home run in the 2011 World Series, Sergio Aguero's goal in extra time to win the 2011-2012 Premier League title and Villanova's buzzer-beater to win the 2016 National Championship and you might come close to how wild England fans were after both goals were scored.


This weekend I am going to setup a new OES2015 in the tree and want to make it our new master server.
Add the new OES04 server as designated primary via the dns / dhcp console.
Then all the other servers with DNS in my tree will get the changes from the new OES04 instead of OES03.
Create a new service for OES04 with a new name.
Import the static hosts via the import functionallity.
Decomssion home volume on OES03 and commission on OES04.
Last edited by jfeyen; 30-Nov-2015 at 03:15 PM.


Thayer's Gull (Larus thayeri) and Glaucous-winged Gull (Larus glaucescens) at Swan Lake.
I think this is a female Glaucous-winged Gull (Larus glaucescens) due to its relatively small size.
This entry was posted in birds, photojournal and tagged Glaucous-winged Gull, Swan Lake, Thayer's Gull. Bookmark the permalink.


Regarding student internships: We encourage people of different disciplines to apply for internships at the LCSB. Please take a look at the different research groups (https://wwwde.uni.lu/lcsb/research) and if interested, feel free to address the internship application directly to the person in charge of the project. Only applications with both a resume and a cover letter will be considered. Due to the volume of applicants, we are only able to contact those selected for interviews.
The LCSB is located in Esch-Belval, which is part of Esch-sur-Alzette.
If you travel by car, coming from the north, please take the A4, direction Esch-sur-Alzette, and stay on that road until it ends at the roundabout Rond Point Raemerich. Don't leave the A4 too early! Simply follow the A4 until it ends, than follow the signs to 'Belval'. On the campus, unfortunately, there are no signs leading the way to either the House of Biomedicine or Biotech II.
Please use the following plan to orientate on the campus. The House of Biomedicine (LCSB I) is directly next to the old blast furnace site, close to the red Dexia buildings. The building is a bit hidden. It is a six floor modern white building.Biotech II (LCSB II) is behind the big outdoor parking, right next to ADEM and across the street from Southlane Towers.
We recommend to use the basement garage under the Belval Plaza shopping mall or the Parking Square Mile. From either site it is less than five minute walk to either of our buildings. In the Belval Plaza, the parking is for free for stays of less than 3 hours.
If you travel by train you can directly leave the train at the stop 'Belval Université'. Both of our buildings are less than five minutes away from the train station.


text:
Re D (A Child) (Appeal Out of Time) [2020] EWHC 1167 (Fam)
The father sought permission to appeal out of time against a district judge's finding of fact that he had abused his daughter. Francis J decided that the findings were so unsafe and their consequences so series that they could not be allowed to stand, despite the exceptional delay in appealing. He noted with surprise the district judge's assertion that the mother's counsel could conduct the cross-examination of the expert witness on behalf of the litigant-in-person father as well as the mother, a suggestion which Francis J said was "incorrect and plainly wrong". The expert had not been cross-examined on his misunderstanding of a previous judgment in the case, and in failing to depart from the expert's view the district judge fell into further error. The procedure adopted was irregular enough to cause injustice within the meaning of FPR Part 30. Permission to appeal out of time was granted, the appeal was allowed and the finding of fact set aside. The matter would be remitted for re-hearing by a High Court judge of the Family Division.


A torus has the shape of a doughnut. Formally, a torus is a surface of revolution generated by revolving a circle in three dimensional space about a line which does not intersect the circle.
The three different classes of standard tori correspond to the three possible relative sizes of r and R. When R > r, the surface will be the standard ring torus. The case R = r corresponds to the horn torus, which in effect is a torus with no "hole". The case R < r describes a self-intersecting surface called a spindle torus.


B.N.Y.S. (Bachelor of Naturopathy and Yogic Sciences) is an undergraduate program in Indian Alternative Medicine, which covers the study of both Naturopathy Medicine and Therapeutic Yoga. Naturopathy is a system of treatment which recognizes the existence of the vital curative force within the body. It is a drug-less non-invasive rational and evidence based system of medicine imparting treatments with natural elements based on the Theory of vitality, theory of toxemia, theory of self healing capacity of the body and the principles of healthy living. It helps human system to remove the cause of disease by expelling the unwanted and unused matters from human body. Yoga is an ancient art, which combines physical exercises, mental (meditation), and breathing techniques for harmonizing the system of development for body, mind, and spirit.
Students who aspire to become a Doctor, but are not able to secure a M.B.B.S. seat would generally prefer B.D.S., B.H.M.S., B.A.M.S., B.U.M.S., B.S.M.S., or B.N.Y.S. The duration of B.N.Y.S. course in India is 5.5 years with 4.5 years of classroom study and ONE year compulsory internship. BNYS Medical Graduates are equivalent to MBBS medical graduate as a General Physician. On completion of the program, students are eligible to prefix "Dr." before their name and to be called as a Doctor. BNYS course is governed by the Central Council of Indian Medicine (CCIM), which is the statutory apex body working under the Ministry of Health and Family Welfare, Department of AYUSH.
The minimum eligibility for securing admission to B.N.Y.S. program is clearing HSC(10+2) or equivalent examination with at least 50% marks in Physics, Chemistry, Biology and English from a recognized board. According to the latest notification issued by Ministry of AYUSH, admission to BHMS, BAMS and BUMS will be based on NEET scores. Hence students should also clear NEET (UG) conducted by CBSE for admission to B.N.Y.S.
The Course Fee for B.N.Y.S. vary with Institutions. The Fee in Central/State Govt. Funded Institutions are heavily subsidized and may cost you around Rs.5000 to Rs. 10,000 per Annum. The course fee in other institutions under All India Quota may cost you anywhere between Rs. 50,000 to Rs.2 lakhs annually. The course fee in Private Medical Colleges & Universities are not defined, it can be anywhere around Rs.1 to Rs.3 lakhs per Annum.
Top TEN Medical Colleges for B.N.Y.S.
Syllabus / Subjects in B.N.Y.S.


The 412 Lax Podcast & Blog.
We suggest going to your high school football game and then watching five more college and NFL games over the weekend is a bad idea.
The post Recruiting: You Can't Watch as Much Football and September 1st appeared first on 412 LAX.


text:
El ácido selenoso, también conocido como ácido selenioso, es un compuesto químico. Su fórmula química es H2SeO3. Es un ácido. Contiene iones de hidrógeno y selenito.

Propiedades
El ácido selenoso es un ácido débil. Se puede calentar para producir dióxido de selenio. Es más estable que el ácido sulfuroso. Puede cristalizarse como un sólido blanco. Es un agente oxidante débil. Reacciona con bases para producir selenitos.

Preparación
Se produce disolviendo el dióxido de selenio en agua.

Usos
Se utiliza para teñir el acero de color azul-gris. Se utiliza en la fabricación de compuestos orgánicos.

Seguridad
El ácido selenoso es muy tóxico. Sólo ingerir una pequeña cantidad puede matarte.

Véase también

 Ácido selénico
 Ácido Hidroselénico

Referencias

Ácidos
Compuestos de selenio

redpajama_set_name: RedPajamaWikipedia


In a pre-recorded interview with CBS's 60 Minutes, President Obama answered questions on why he had chosen not to release graphic images of Osama Bin Laden.
STEVE KROFT: Did you see the pictures?
KROFT: What was your reaction when you saw them?
KROFT: Why haven't you released them?
OBAMA: You know, we discussed this internally. Keep in mind that we are absolutely certain this was him. We've done DNA sampling and testing. And so there is no doubt that we killed Osama bin Laden. It is important for us to make sure that very graphic photos of somebody who was shot in the head are not floating around as an incitement to additional violence. As a propaganda tool. You know, that's not who we are.
You know, we don't trot out this stuff as trophies. You know, the fact of the matter is this was somebody who was deserving of the justice that he received. And I think– Americans and people around the world are glad that he's gone. But we don't need to spike the football. And I think that given the graphic nature of these photos, it would create some national security risk. And I've discussed this with Bob Gates and Hillary Clinton and my intelligence teams and they all agree.
OBAMA: You know, the truth is that and we – we're monitoring worldwide reaction. There's no doubt that Bin Laden is dead. Certainly there's no doubt among Al Qaeda members that he is dead. And so we don't think that a photograph in and of itself is going to make any difference. There are going be some folks who deny it. The fact of the matter is, you will not see Bin Laden walking on this Earth again.
This entry was posted in current issues, Osama bin Laden and tagged barack obama, death, death of bin laden, osama bin laden, photographs of bin laden. Bookmark the permalink.
song of the day… Humko pyar hoa..


Shanty National Park is not a replica of an existing park, rather it is a park of imaginations and memories. In our park, we created vast expanses, lush greenery, critters large and small. Visitors were invited to experience the mystical power and tranquility of nature.
Collaboration with Eli Edleson-Stein for the 2017 Art Shanty Projects. Photos taken by Emmet Kowler.


Image analysis of three-dimensional microtomographic image data has become an integral component of pore scale investigations of multiphase flow through porous media. This study focuses on the validation of image analysis algorithms for identifying phases and estimating porosity, saturation, solid surface area, and interfacial area between fluid phases from gray-scale X-ray microtomographic image data. The data used in this study consisted of (1) a two-phase high precision bead pack from which porosity and solid surface area estimates were obtained and (2) three-phase cylindrical capillary tubes of three different radii, each containing an air–water interface, from which interfacial area was estimated. The image analysis algorithm employed here combines an anisotropic diffusion filter to remove noise from the original gray-scale image data, a k-means cluster analysis to obtain segmented data, and the construction of isosurfaces to estimate solid surface area and interfacial area. Our method was compared with laboratory measurements, as well as estimates obtained from a number of other image analysis algorithms presented in the literature. Porosity estimates for the two-phase bead pack were within 1.5% error of laboratory measurements and agreed well with estimates obtained using an indicator kriging segmentation algorithm. Additionally, our method estimated the solid surface area of the high precision beads within 10% of the laboratory measurements, whereas solid surface area estimates obtained from voxel counting and two-point correlation functions overestimated the surface area by 20–40%. Interfacial area estimates for the air–water menisci contained within the capillary tubes were obtained using our image analysis algorithm, and using other image analysis algorithms, including voxel counting, two-point correlation functions, and the porous media marching cubes. Our image analysis algorithm, and other algorithms based on marching cubes, resulted in errors ranging from 1% to 20% of the analytical interfacial area estimates, whereas voxel counting and two-point correlation functions overestimated the analytical interfacial area by 20–40%. In addition, the sensitivity of the image analysis algorithms on the resolution of the microtomographic image data was investigated, and the results indicated that there was little or no improvement in the comparison with laboratory estimates for the resolutions and conditions tested.


Holidays and a lack of crafting generally have meant I've been absent from Kate's challenge for a couple of weeks. I could have linked up but you would have been reading a post titled "15 minute challenge with Kate" that was completely blank.
I haven't been feeling the quilty love lately, however this Friday has been set aside as "Major Quilting Day" so I can make some progress on all of the projects sitting here poking their tongues out at me and whispering "There's no way you're going to finish us by the end of the year". Bastards- I hate it when craft taunts me.
Two quilts made their way to the professional quilter this week so I'm counting that as progress simply because I had to touch them to put them in the car. That's how desperate things are. But while quilts haven't been on the agenda, a number of other little projects have been completed. Sometimes I have the attention span of a gold fish so fast and easy is good.
4 paper pieced hexagon flowers - done!
I made myself a new case for my sunglasses using the cut up an old tape measure method for the closure at the top. Thanks Annie for the heads up on this- it's brilliant and I didn't poke my own eyeball out with sharp tape measure pieces in the process. Always a bonus.
The love of my life (my Ipad) got a cover.
I made making travel tissue holders. Thanks Erin. They are easy.
I got around to changing the cruddy old quilting blocks that I had in these frames to things that reflect my current loves.
And I downloaded and printed every cute thank you card and Christmas gift tag available for free on the internet. Thank you various designers and creative people for making these available to people like me that cant design their own cute cards.
I think my period of craftitis absentitis had officially ended.
I wanted to send a shout out to the glorious Char at Cloth Stitched who sent me a squishy parcel last week containing these beautiful goodies-just because she is amazing and while I had 8 million metres of the blue fabric in that design I didn't have a skerrick of pink. I really do have amazing blog friends. Thankyou!
To see more amazing people and marvel at their creative work pop on over to Kate's to oooh and ahhh.
Wow! You sure get a lot accomplished on an off week. I'm taking Thursday and Friday off, so maybe you can send me some quilting mojo since we'll kind of be doing it at the same time .. maybe for a couple of hours on my Thursday afternoon ..
I purchased a new basket for all my paper piecing yesterday I have bits of it everywhere and it pile is growing by the minute so now it is all in one basket that I can pick up and take. Of course taking a quilt to the quilter is part of the challenge. But it looks like you did lots anyway. Bring on the sewing mojo. I have just decided what the girls are going to get for Xmas this year so I had better get on with it. So I think my next few weeks are going to be fine challenge wise.
You are an over achiever! At the moment with my lack of mojo I'd be happy to get that amount of sewing done in a month, heck, even a year!
I hope your new love is happy in his new home.
Wow your sunglasses case looks so sunshiny and cheerful.
Loving the hand piecing, looking forward to seeing more happy hexies.
I like the eye glass case and the IPad cover, I thought I was the only person who still had Picnic Parade fabric.
The frames are beautiful and look great holding the things you love.
not bad for someone with no mojo young lady!! I have been stitching away madly (conjure up pic of me on couch with needles and threads flying everywhere!) on my SSCS..apart from that not much going on (stitching wise) in my world.
Love your hexie flowers, especially the polka dot and the red ones. You got a lot of crafting accomplished, girl! And what a cute idea to put selvages and your dolls (I have no idea how to spell matr...whatever) in frames. Happy quilting on Friday. You'll teach those bastards to keep their naysaying thoughts to themselves!
That's a whole lot of little things you got done! And two quilts are going to be done, soon.
Wow you have been busy! I love what you framed, very cute. Pretty hexies, gorgeous glass case and Ipad cover. You definitely have your mojo back.
Love the frames! such a sweet idea -( might have to steal that ) and looks like you have had a productive week - love the sunglasses case, and ipad cover and tissue holders - Youre on fire Shay!
Stop! You are making the rest of us look bad!
That IS a cool idea for the sunglasses case, thanks for the heads up! Love the little hexies too :-) PS Billy asked if hubby was still talking to you after I told him you took your ipad to bed?? He said he must be very tolerant or like us and you sleep in separate beds as I get to play on my iphone into the wee hours of the morning if I can't sleep. Billy snores like a freight train and has sleep apnea so we have always had separate bedrooms even when we were dating...lack of sleep makes me very ugly!!
You are so clever.....how hard was the iPad case? I also saw some really cute pillows (on pinterest) that were made from sweaters. See, you're going to make me crafty yet!
I had no idea that there was such thing as a professional quilter.
Thanks for the inspiration...if I decide to use my mom's sewing machine, I'll report in.
Enjoy your big Friday Sewing Day! I love your frames with fabrics in them. Those tissue holders would make the perfect gifts, I might check them out. Lovely soft package of Denyse spots. I've heard Spotligjt is getting another DS range but I haven't seen it in the stores yet. Not that I need any more fabric!
I KNOW I read this post when you first posted it. I'm not sure why I didn't comment, though, because your hexies are like 42 kinds of awesome, those traveling tissue holders are CUTE and I love your iPad case.
It is amazing what you can get done a little at a time.


text:
/*global app:true */
/*jslint browser:true,sloppy:true,nomen:true,unparam:true,plusplus:true,indent:4 */
/*
| Copyright 2014 Esri
|
| Licensed under the Apache License, Version 2.0 (the "License");
| you may not use this file except in compliance with the License.
| You may obtain a copy of the License at
|
| http://www.apache.org/licenses/LICENSE-2.0
|
| Unless required by applicable law or agreed to in writing, software
| distributed under the License is distributed on an "AS IS" BASIS,
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
| See the License for the specific language governing permissions and
| limitations under the License.
*/
define([
    'config/config', // if you change this, change the one in main.js too.

    'app/views/LayoutView',
    'app/models/LocationModel',
    'app/controllers/MapController',
    'app/controllers/QueryController',

    'widgets/buildingbutton/BuildingButton',
    'widgets/floorpicker/FloorPicker',
    'widgets/overviewmap/OverviewMap',
    'widgets/loader/LoadIndicator',
    'widgets/basemapgallery/BasemapGallery',
    'widgets/bookmarks/BookmarksController',
    'widgets/newlayersearch/NewLayerSearch',
    'widgets/legend/LegendController',

    'esri/dijit/HomeButton',

    'app/views/MapButtonPanelView',
    'app/views/MapCoverView',

    'esri/map',
    'esri/basemaps',
    'esri/geometry/Extent',
    'esri/arcgis/utils',

    'dijit/Dialog',
    'dijit/form/Button',
    'dojo/dom',
    'dojo/dom-construct',
    'dojo/_base/lang',
    'dojo/query',
    'dojo/i18n!./nls/resourcestrings'],

function(config,
    Layout, LocationModel, MapController, QueryController,
    BuildingButton, FloorPicker, OverviewMap, LoadIndicator, CustomBMG, Bookmarks, LayerSearch,
    CustomLegend,
    HomeButton,
    MapButtonPanelView, MapCoverView,
    Map, esriBasemaps, Extent, arcgisUtils, Dialog, Button, dom, domConstruct, lang, query, resources) {

    return {

        /**
         * This is the entry point for the application, called from index.html
         * @return { N/A }
         */
        startup: function() {
            app = this;
            this.resources =  resources;
            this.initConfig();
            this.initQueryParams();
            this.initModels();
            this.initLayout();

            // only call this after DOM is setup in initLayout
            this.initSplashscreen();

            this.initMapSetup();

        },

        /**
         * Initialize esri configuration settings
         * @return { N/A }
         */
        initConfig: function() {
             // if (config.dataLayer.useWebmap) && (config.dataLayer.webmapID != null){

             // }

        },

        initQueryParams: function() {
            var match,
            urlParams = {},
            pl     = /\+/g,  // Regex for replacing addition symbol with a space
            search = /([^&=]+)=?([^&]*)/g,
            decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')); },
            query  = window.location.search.substring(1);

            while ((match = search.exec(query))) {
               urlParams[decode(match[1])] = decode(match[2]);
            }
            this.queryParams = urlParams;

        },

        initModels: function() {
            var startLoc = {
                building: null,
                floor: null
            };
            if (!this.queryParams.room) {
                if (this.queryParams.building) {
                    startLoc.building = this.queryParams.building;
                    startLoc.floor = this.queryParams.floor || null;
                } else {
                    startLoc = config.defaultLocation;
                }
            }

            this.locModel = new LocationModel(_.extend(startLoc, {id: 'locModel'}));

            this.locModel.startup();
        },

        /**
         * Initialize the application layout by inserting top level nodes into the DOM
         * @return { N/A }
         */
        initLayout: function() {
            this.layout = new Layout({
                config: config.layout,
            }, 'main-container');
            this.layout.startup();

            this.initMap();
        },

        /**
         * Initialize the map and place it in 'map-container'
         * @return { N/A }
         */
        initMap: function() {

            var mapConfig;
            // enable labels on feature layers (there doesn't seem to be a way to do this after map load)
            if (!config.dataLayer.mapServiceUrl) {
                    mapConfig = _.extend(config.mapSetup, {showLabels: true});
                } else {
                    mapConfig = config.mapSetup;
            }

            if (mapConfig.extent && _.isObject(mapConfig.extent)) {
                mapConfig.extent = new Extent(mapConfig.extent);
            }

            if (!esriBasemaps.hasOwnProperty(mapConfig.basemap)) {
                this.initBasemaps();
            }

            // if webmap , it will take longer to create - later use setInterval to check if map is valid
            if ((config.dataLayer.useWebmap) && (config.dataLayer.webmapID !== null)){
                var deferred = arcgisUtils.createMap(config.dataLayer.webmapID,'map-container', mapConfig);
                deferred.then(lang.hitch(this,function(response){
                    this.map = response.map;
                    //this is needed when webmap is based on FeatureService
                    this.operationalLayers = response.itemInfo.itemData.operationalLayers;
                }));

            } else {
                this.map = new Map('map-container', mapConfig);
            }

        },

        initMapSetup: function() {

            // if webmap , it will take longer to create - use setInterval to check if map is valid
            var self = this;
            var verifyMap = setInterval(function(){
                if (!self.map){
                    console.warn('map not created');
                } else {
                    clearInterval(verifyMap);

                    //if webmap , get ID of exisitng layer from webmap - else create a new ID for new dynamic maplayer
                    // what about feature service ?
                    if ((config.dataLayer.useWebmap) && (config.dataLayer.webmapID !== null) && (config.dataLayer.mapServiceUrl)){
                        _.find(self.map.layerIds, function(lyrId) {
                                var mapLyr = self.map.getLayer(lyrId);
                                if (mapLyr.url.slice(mapLyr.url.indexOf('//')).toLocaleLowerCase() == config.dataLayer.mapServiceUrl.slice(config.dataLayer.mapServiceUrl.indexOf('//')).toLocaleLowerCase()){
                                    self.dataLayerId = mapLyr.id;
                                }
                         });
                    } else {
                        self.dataLayerId = 'cpfDataLayer';
                    }

                    self.mapController = new MapController({
                                                map: self.map,
                                                locModel: self.locModel,
                                                config: config,
                                                resources: self.resources,
                                                dataLayerId: self.dataLayerId,
                                                operationalLayers: self.operationalLayers
                    });

                    //web map will already be loaded
                    if ((config.dataLayer.useWebmap) && (config.dataLayer.webmapID !== null)){
                        app.initQueries();
                        app.initWidgets();
                        self.layout.publishWindowSize();
                        self.mapController.publishMapSize();
                        //only call this after mapcontoller and Querycontroller are available
                        self.initDefaultLocation();
                    } else {
                        // map not yet loaded for regular maps
                        self.map.on('load', function() {
                            app.initQueries();
                            app.initWidgets();
                            self.layout.publishWindowSize();
                            self.mapController.publishMapSize();
                        });
                    }
                    console.debug('map created');
            }
            },100);

        },

        // workaround to set default location for webmap with feature service
        initDefaultLocation: function() {
            var self = this;
            if ((config.defaultLocation.building) && (config.defaultLocation.floor) && !(config.dataLayer.mapServiceUrl)){
               //confirm map is completely updated before re-setting the default floor - otherwise gets overwritten and set to first available floor
                var isMapComplete = setInterval(function(){
                    if (self.map.loaded && !self.map.updating){
                        console.debug('map complete');
                        clearInterval(isMapComplete);
                        self.locModel.silentSet('floor', config.defaultLocation.floor);
                        self.locModel.emit('floor-update');
                    } else {
                        console.debug('map not complete');
                    }
                },100);
            }
        },

        initBasemaps: function() {
            _.each(config.basemapGallery.customBasemaps, function(bmInfo) {
                if (esriBasemaps.hasOwnProperty(bmInfo.title)) {
                    console.warn('duplicate basemap title');
                    return;
                }
                esriBasemaps[bmInfo.title] = bmInfo;
            });
        },

        initQueries: function() {
            var qc = new QueryController({
                locModel: this.locModel,
                dataConfig: config.dataLayer
            });
            if (this.queryParams.room) {
                qc.runRoomFromRoomIDQuery(this.queryParams.room);
            }
        },

        initUtils: function() {

        },

        initSplashscreen:function() {
            if (config.splashscreen.showSplashscreen){

                // to resize actionbar together with contentpane, add the actionBarTemplateVal to the contentpane
                var actionBarTemplateVal = '
';
                actionBarTemplateVal += '<button class="btn" data-dojo-type="dijit/form/Button" type="button" id="splashscreenOK" data-dojo-props="onClick:function(){app.cpfSplashscreenDialog.hide();}">';
                actionBarTemplateVal += resources.okButton + '</button>
';

                var cpfSplashscreenDialog = new Dialog({
                    id: 'splashscreenDialog',
                    class: 'cpfSplashscreen',
                    title: config.layout.headerTitle,
                    closable: true,
                    content: '
' + resources.splashScreenMessage + '
' + actionBarTemplateVal
                    //actionBarTemplate: actionBarTemplateVal
                    });

                domConstruct.place(cpfSplashscreenDialog.domNode, 'splashscreen-dialog');

                app.cpfSplashscreenDialog = cpfSplashscreenDialog;
                app.cpfSplashscreenDialog.startup();
                app.cpfSplashscreenDialog.show();

            }

        },

        /**
         * Initialize components of the application, this is the last responsibility of the Controller
         * @return { N/A }
         */
        initWidgets: function() {

            this.initHomeButton();
            this.initBuildingButton();
            this.initFloorPicker();
            if (config.overviewMap.showOverviewMap){
                this.initOverviewMap();
            }
            this.initLoader();

            var mapCoverView = new MapCoverView({
                containerDiv: 'main-container',
                id: 'map-cover',
                config: config.layout,
                resources: this.resources
            });
            mapCoverView.startup();

            // has to be in same order that displays in MapButtonPanelView
            if (config.basemapGallery.showBasemapGallery){
                this.initBMG(mapCoverView);
            }
            this.initLegend(mapCoverView);
            this.initBookmarks(mapCoverView);
            this.initSearch(mapCoverView);
            // this.initInfo(mapCoverView);

        },

        initHomeButton: function() {
            var homeBtn = new HomeButton({
                map: this.map,
                id: 'homeButton',
                theme: 'cpfHomeButton',
                //containerDiv: 'map-buttons-vertical',
                resources: this.resources
            });

            //domConstruct.place(homeBtn.domNode, 'map-buttons-vertical');
            domConstruct.place(homeBtn.domNode, query('.esriSimpleSliderIncrementButton')[0], 'after');
            homeBtn.startup();

        },

        initBuildingButton: function() {
            var btn = new BuildingButton({
                locModel: this.locModel,
                containerDiv: 'map-buttons-vertical',   //'map-container',
                resources: this.resources
            }, null);
            btn.startup();
        },

        initFloorPicker: function() {

            var floorPicker = new FloorPicker({
                locModel: this.locModel,
                containerDiv: 'map-container',
                resources: this.resources
            });
            floorPicker.startup();
            app.fp = floorPicker;
        },

        initOverviewMap: function() {
            var overviewMap = new OverviewMap({
                map: this.map,
                config: config.overviewMap,
                mapServiceUrl: config.dataLayer.mapServiceUrl,
                resources: this.resources,
                dataLayerId: this.dataLayerId
            });
            overviewMap.startup();
        },

        initLoader: function() {
            var loading = new LoadIndicator({
                containerDiv: 'map-container'
            });
            loading.startup();
        },

        initBMG: function(mobileView) {
            var bmgView = new MapButtonPanelView({
                config: config.layout,
                buttonTitle: resources.basemapGalleryButtonTitle,
                iconClass: 'fa-image',
                id: 'bmgView',
                toggleDiv: 'map-buttons-horizontal',
                panelDiv: 'map-panels-horizontal',
                mobileView: mobileView
            });
            bmgView.startup();

            var bmg = new CustomBMG({
                map: this.map,
                config: config.basemapGallery,
                id: 'bmg'
            }, bmgView.replaceDiv);
            bmg.startup();

        },

        initLegend: function(mobileView) {
            var legendView = new MapButtonPanelView({
                config: config.layout,
                buttonTitle: resources.showLegendButtonTitle,
                iconClass: 'fa-th-list',
                id: 'legendView',
                toggleDiv: 'map-buttons-horizontal',
                panelDiv: 'map-panels-horizontal',
                mobileView: mobileView
            });
            legendView.startup();

            // TODO: make legend work with feature layers
            var legend = new CustomLegend({
                map: this.map,
                dataConfig: config.dataLayer,
                locModel: this.locModel,
                id: 'legend',
                resources: this.resources,
                dataLayerId: this.dataLayerId
            }, legendView.replaceDiv);
            legend.startup();
        },

        initBookmarks: function(mobileView) {
            var bookmarksView = new MapButtonPanelView({
                config: config.layout,
                buttonTitle: resources.changeBuildingsButtonTitle,
                iconClass: 'fa-location-arrow',
                id: 'bookmarksView',
                toggleDiv: 'map-buttons-horizontal',
                panelDiv: 'map-panels-horizontal',
                mobileView: mobileView
            });
            bookmarksView.startup();

            var bookmarks = new Bookmarks({
                map: this.map,
                dataConfig: config.dataLayer,
                locModel: this.locModel,
                id: 'bookmarks',
                resources: this.resources
            }, bookmarksView.replaceDiv);
            bookmarks.startup();
            // if (!this.locModel.building) {
            //     bookmarksView.mapToggle.click();
            // }

        },

        initSearch: function(mobileView) {
            var searchView = new MapButtonPanelView({
                config: config.layout,
                buttonTitle: resources.layerSearchButtonTitle,
                iconClass: 'fa-search',
                id: 'searchView',
                toggleDiv: 'map-buttons-horizontal',
                panelDiv: 'map-panels-horizontal',
                mobileView: mobileView
            });
            searchView.startup();

            var search = new LayerSearch({
                dataConfig: config.dataLayer,
                id: 'layer-search',
                viewWidget: searchView,
                resources: this.resources
            }, searchView.replaceDiv);
            search.startup();
            app.globalSearch = search;
        },

        initInfo: function(mobileView) {
            var infoView = new MapButtonPanelView({
                config: config.layout,
                buttonTitle: resources.infoButtonTitle,
                iconClass: 'fa-info',
                id: 'infoView',
                toggleDiv: 'map-buttons-horizontal',
                panelDiv: 'map-panels-horizontal',
                mobileView: mobileView
            });
            infoView.startup();
        }
    };
});

redpajama_set_name: RedPajamaGithub


Yep! You heard it here … Ravenwood Acres has moved to the Shuswap! It wasn't easy, and took quite a few trips back and forth, but we are finally moved to our new farm in the beautiful Silver Creek area of Salmon Arm, BC. A few chickens flew the coop in the process, but everyone is now settled into their new digs … until we start barn renovations in 2016 that is!
Our Dexter cattle enjoying the pasture on our new farm!
This entry was posted in News and tagged moving, okanagan, salmon arm, shuswap, silver creek. Bookmark the permalink.


Songhai, Gao language. Evangelism tools, church planting resources, Christian songs and audio bible study materials. Download free MP3s.
Audio-visual Bible lessons in 40 sections with pictures. Contains Bible overview from creation to Christ, and teaching on the Christian life. For evangelism and church planting. (A80270).
Audio-visual Bible lessons in 40 sections with pictures. Contains Bible overview from creation to Christ, and teaching on the Christian life. For evangelism and church planting. (A80271).
Book 1 of an audio-visual series with Bible stories of Adam, Noah, Job, Abraham. For evangelism, church planting and systematic Christian teaching. (A80282).
Book 2 of an audio-visual series with Bible stories of Jacob, Joseph, Moses. For evangelism, church planting and systematic Christian teaching. (A80272).
Book 3 of an audio-visual series with Bible stories of Joshua, Deborah, Gideon, Samson. For evangelism, church planting and systematic Christian teaching. (A80273).
Book 5 of an audio-visual series with Bible stories of Elisha, Daniel, Jonah, Nehemiah, Esther. For evangelism, church planting, systematic Christian teaching. (A80269).
Book 8 of an audio-visual series with Bible stories of the young church and Paul. For evangelism, church planting and systematic Christian teaching. (A80274).
Short audio Bible stories and evangelistic messages that explain salvation and give basic Christian teaching. Each program is a customised and culturally relevant selection of scripts, and may include songs and music. (C02491).
Other information: Understand French; All Muslim.


text:
The FIA Foundation is a company limited by guarantee and registered as a charity in the UK (No. 1088670). The Foundation is independent and under the control of its Trustees who are required to act within the powers conferred upon them in our Articles of Association and in the best interests of the charity.
Our charitable objectives are to promote public safety and public health, the protection and preservation of human life and the conservation, protection and improvement of the physical and natural environment through:
promoting research, disseminating the results of research and providing information in any matters of public interest which include road safety, automobile technology, the protection and preservation of human life and public health, transport and public mobility and the protection of the environment;
and promoting improvement in the safety of motor sport, and of drivers, passengers, pedestrians and other road users.
We are bound by the laws of the UK, including the Charities Act 1993 (as amended by the Charities Act 2006) and Bribery Act 2010. We take a zero tolerance approach to bribery and fraud and this is set out in our Anti-bribery and Corruption Policy and Anti-Fraud Policy and Fraud Response Plan adopted by the Board of Trustees in October 2021. We are also committed to complying with all Sanctions that may apply to the Foundation and our grants and this is set out in our External Sanctions Statement.
The Foundation was established in 2001 with a donation of $300 million made by the Fédération Internationale de l'Automobile (FIA), the non-profit federation of motoring organisations and the governing body of world motor sport. To clarify the relationship between the Foundation and the FIA the Board of Trustees adopted a statement on this subject in November 2010.
The Foundation is governed by a Board of Trustees. The Board is made up of not less than nine and not more than fifteen individuals including, the President of the FIA ex officio, and three nominees of the FIA and at least two Trustees independent from any member of the charity. The Trustees are responsible for the proper administration of the Foundation, have a duty to act collectively, and must act in the best interests of the charity. Our trustees are elected at the Annual General Meeting. Please contact the secretariat for more information on eligibility and how to apply for trusteeship. All Trustees must sign a Trustee Declaration and complete a Register of Interests. In addition to the requirements of the Foundation's Articles of Association the Foundation has adopted a Conflicts of Interest Policy and a Code of Conduct for Trustees.
Rt. Hon. Lord Robertson
Chairman, UK
H.E. Dr Amani Abou-Zeid
Abdelrahman Al-Mannai
Mohammed Ben Sulayem
United Arab Emirates (Ex Officio, FIA President)
Gerardo Braggiotti
Wan Heping
Werner Kraus
Gorki Obando
Ecuador (FIA Nominee)
UK (FIA Nominee)
David Richards
Carmelo Sanz De Barros
Spain (FIA Nominee)
Angelo Sticchi Damiani
Bernard Tay
Ken Woodier


Last week I started to give my boys' bathroom a facelift. The room was…well…a little fishy.
And a fishy toilet seat!
The room was cute and I didn't mind it so much. But, the border had started to peel. And the toilet seat was rusting. DO NOT, I repeat, DO NOT buy any cheap toilet seats that have metal hinges. They may look cool, but the nature of moisture collecting around the toilet makes them rust in no time. This was our third seat to do this. Why I didn't learn after the second? I'm optimistic by nature I guess.
Anyway, I had wanted to help this bathroom grow up a little. And I'd been anxious to try another moulding project after doing my son's closet last year.
Before delving into the wonderful world of mouldings, I had to remove that wallpaper border. When wallpaper starts to peel, you think, "Oh cool! That means it will be easy to remove." So you start picking and tearing at it. Well, resist the urge, it is just a funny joke wallpaper likes to play. You really need to be well stocked and prepared with the appropriate supplies for stripping wallpaper.
Start by using the scoring tool. Make lots and lots of holes until you just can't lift your arm anymore.
The more holes the easier it will be for the stripper to soak into the wallpaper glue.
Spray on the wallpaper stripper and let it sit for 15 minutes.
Repeat spraying the wallpaper (really soak it), and then gently try to slide your scraper behind the edge of the wallpaper.
Hopefully by now, it has loosened it's grip.
Gently pull the strip off while using the knife to help separate the border from the wall.
Remove any pieces that are left behind.
Spray down the walls again with the stripper.
Wipe it off with water and a sponge or rag.
This should get rid of all the wallpaper glue residue. But, it is still a good idea to use a primer on walls that previously had wallpaper on them. This will protect your paint job from doing something alien like bubbling up, flaking or who knows what!
If you follow me on Facebook, you were privy to my post over at Parentables. I gave them a special all accesses pass to my brain on a recent trip to the Habitat for Humanity ReStore on THIS day.
You can view this and more transformations over there! Be sure to leave me a comment. It seems those Parentables readers are a bit more shy than y'all!
And, one last note. I finally delivered my promised Pretty Handy Girl in a box to Cheri (pronounced like Sherry), who writes Dragonfliez Creationz. She is such a sweet person and she didn't even complain that it took me a month to deliver her box. Cheri and I like the same burritos from Tijuana Flats (thanks to Courtney for introducing me to this Raleigh gem.) But, unlike me, Cheri has a tough side too (luckily I didn't get to see it.) She's giving me assertiveness training because I'm too nice.
That's all for today. See you next week with some more bathroom updates.
Had I known how easy your method of taking down wallpaper was, I would have down it weeks ago!!! Thank you so much for posting this! I could not believe how easy it was.
I love your projects. The fish wallpaper was not so bad. My son wants the same. I am considering of buying it. The fishes are pretty funny. I am so glad that I found your blog. Best regards!


Enjoy your holiday in our appartmenthouse in a very quiet location at Sonnbichl, with lovely views of the surrounding mountains. Two well equipped appartments with cable-TV, W-LAN, telephone, radio and dischwasher. Garden with sunbathing area and hot-pot, barbecuing area with pavilion and children's playing area. Resort centre, minigolf and tennis courts are all within walking distance. Skibus stop and cross country track closeby. NEW: finnish sauna and thermal cabine (extra).
On which days would you like to stay in the »Fam. Pump Burgi App. Sonnbichl«?


text:
Texans look to move on quickly after lopsided loss to Denver
Giants name ex-Cowboys coach Garrett OC
Packers, 49ers battle for NFC title
Titans, Chiefs one win from Super Bowl
Browns interview Eagles VP Berry for GM
Jags to interview Linehan for OC opening
Warrant issued for Browns WR Beckham
Moore to keep calling plays for Cowboys
Bears name Lazor OC, DeFilippo QBs coach
Kamara to replace McCaffrey in Pro Bowl
49ers GM Lynch named PFWA Exec of Year
(AP Photo/Eric Christian Smith)
By KRISTIE RIEKEN
HOUSTON (AP) The Houston Texans are looking to turn the page quickly after following up their big win against New England with a lopsided loss to Denver this weekend.
They'll need to put that 38-24 defeat far behind heading to next Sunday's key AFC South matchup at Tennessee. Houston's loss to the Broncos left it in a tie with the Titans for first place in the division with both meetings with them coming up in the final three weeks of the season.
"Everything we want is in front of us," defensive tackle D.J. Reader said. "We've just got to take care of it. It's not like (we're) depressed or anything like that, but we've got to play better."
Houston allowed the Broncos to score on their first five possessions and gave up a defensive touchdown to fall behind 38-3 early in the third quarter. The Texans couldn't put together drives, gave up multiple big plays and turned over the ball three times in the loss.
"We're all in this together, but it all starts with me," coach Bill O'Brien said. "Look, we're an 8-5 football team coming off a (big win) and we got beat soundly by the Broncos, and we've got to come in here and go back to work. We've got important games left. There's a lot of football left to be played."
Quarterback Deshaun Watson finished with 292 yards passing and ran for two touchdowns against Denver, but he struggled to get the offense going before the game was out of hand. Watson had just 120 yards passing and didn't score before halftime.
"Didn't play well enough," Watson said. "They got up, and it was hard for us to come back. We tried to. Just got to get back to the drawing board."
Not much was working against the Broncos, but O'Brien was encouraged that his team kept fighting in the second half after falling behind by so much.
"It looked terrible, I get that, but I do think our guys fought hard and competed," O'Brien said. "I don't think there was ... any loafing. I think overall our guys, they competed, they fought.
The Texans need to figure out a way to start faster after scoring just 23 points in the first quarter this season. The problem continued on Sunday when they failed score in the opening quarter for the sixth time in 2019.
"We just have to commit to better habits, coaching and playing," O'Brien said. "We drive the ball, we're moving the ball on the first drive, get a penalty. Give up a long pass play on their first drive. These things, we talk about starting fast, but talk is cheap. We've got to go out there and actually do it."
Running back Carlos Hyde ran for 73 yards on Sunday after gaining just 17 yards on 10 carries against the Patriots. Hyde leads the Texans with 926 yards rushing in his first season with the team.
Left tackle Laremy Tunsil continues to struggle with false-start penalties. Tunsil, who was traded to Houston from Miami in August, had three on Sunday to give him an NFL-leading 12 this season.
"He's played very well, but he's had too many penalties and he would be the first one to tell you that," O'Brien said. "We've got to try to fix it. We've got to continue to try to help him to fix it."
WR Will Fuller missed his fourth game of the season with a hamstring injury.
8, 2 - Watson has thrown eight touchdown passes with just two interceptions in three career games against the Titans.
The Texans will look to execute better and eliminate turnovers as they travel to Nashville on Sunday looking to regain sole possession of first place in the AFC South. The Titans have won four in a row and six of the last seven games.
More AP NFL: https://apnews.com/NFL and https://twitter.com/AP-NFL


text:
Lavenham's woolly wonders
PUBLISHED: 10:46 23 June 2010 | UPDATED: 17:24 20 February 2013
The Guildhall of Corpus Christi is one of its most iconic buildings in Lavenham. But what lies behind the walls of this fascinating timber-framed property? The National Trust's Jane Gosling gives a hint of the colours to be seen
Lavenham is one of the best preserved Tudor villages in England and the National Trusts Guildhall of Corpus Christi is one of its most iconic buildings. But what lies behind the walls of this fascinating timber-framed property? Jane Gosling, the National Trusts house manager at the Guildhall, gives a hint of the colours to be seen
To the rear of Lavenham Guildhall is a tranquil courtyard garden, planted with dye plants which would once have been used to colour cloth. The thriving cloth trade in Lavenham, to which dyeing was essential, lasted well into the 16th century and brought great wealth to the village.
For centuries, plants have been used to produce colour. Although modern technology and chemicals have largely taken over, this traditional method of colouring cloth is being preserved by The Lavenham Guild of Weavers, Spinners and Dyers. They will be making an appearance at Lavenham Guildhall this month to reveal the secrets of dyeing, using natural (and some surprising) media.
The range of colours produced from each dye plant can vary greatly, depending on what is used as a mordant (chemical substance) to help the colours absorption by the fibre.
As well as dyeing, many of these plants also have medicinal purposes, such as agrimony, camomile and tansy, the stems of which produce a juice that in the past was used as a cold cure.
Explore Lavenhams garden for yourselves. Strategically positioned plant labels ensure that those less familiar with plants can identify the colourful varieties on display.
The dye plants of Lavenham
Agrimony (Agrimonia eupatoria)
Flowers produce a range of yellows through to ochre dyes. The leaves were once used as a tea infusion.
Camomile (Anthemis tinctoria)
Bright shades of yellow produced from the flower.
Cardoon (Cynara cardunculus)
A member of the artichoke family. Despite its bright purple flower, it is the leaf tips which are used to produce green, yellow or grey.
Dyers greenweed (Genista tinctoria)
A source of brilliant yellows which, mixed with woad, produces the traditional Lincoln Green.
Elecampane (Inula helenium)
The root of this impressively large plant produces a blue dye when wood ash is used as a mordant.
Goldenrod (Solidago canadensis)
A range of yellows from pale primrose to deep gold.
Ladys bedstraw (Galium verum)
The roots produce a striking range of colours from coral pink through to purple-reds.
Simmered in soft water the leaves will produce olive and paler shades of green.
Madder (Rubia tinctoria)
In hard water produces a source of rich reds used for cosmetics and by artists.
Safflower (Carthamus tinctorius)
When an acid mordant is used the flower stigmas produce a pink or red dye.
Saw wort (Serratula tinctoria)
Picked in full bloom the flower is a source of brilliant yellow.
St Johns Wort (Hypericum perforatum)
The stalks produce brownish-red hues, the flower yellow.
A range of yellows produced by the flower tops. Juice from the stems was used as a cold cure.
Toadflax (Linaria vulgaris)
Leaves produce deep oranges through to dark browns, tops bright yellow.
Weld (Reseda luteola)
Also known as wild mignonette, the leaves, tops and stalks are used to produce bright yellow through to dark orange, depending on mordant.
Wild indigo (Indigofera tinctoria/suffruticosa)
Replaced the use of Woad. The tops and leaves are the oldest source of blue colour known to man.
Woad (Isatis tinctoria)
The leaves were used in their first growth year to produce the famous Lavenham Blewes broadcloth. Also used by illustrators, for tinting metals and for cosmetics. Second year leaves produce a violet or grey tint, depending on the mordant used.
The entire plant is used to produce dark bronze and deep green colours.
Yellow flag iris (Iris pseudacorus)
The flowers produce a yellow dye, while spinners in the Hebrides still use the root to produce a deep black.
Also grown in the Guildhall garden is Fullers Teasel (Dipsacus fullonum sativus), used by cloth workers fixed to teasel bats, to raise the nap of the cloth. This variety has very hooked spikes which were ideal for the purpose.
Soapwort (saponaria officinalis) was used as an early detergent, to wash wool and cloth to remove grease from the fleece.


After A Strong Performance In Q3 2019, Would Focus On Digital Platform Drive Nike's Growth?
Nike (NYSE: NKE) announced its Q3 2019 financial results on March 21, 2019 followed by a conference call with analysts. The company met analysts' expectations for revenue while exceeding the earnings consensus estimate. NKE reported revenue of $9.6 billion in Q3 2019, about 7% higher than $9 billion in the year-ago period. On a constant-currency basis, revenue increased by 11% on a year-on-year basis. Higher revenue was a reflection of strong growth across wholesale, Nike Direct, categories across Sportswear and Jordan, continued double-digit growth across footwear and apparel, double-digit growth in Asia and digital, partially offset by declines in the US and Europe. Earnings came in at $0.68 per share in the third quarter, much higher than a loss of -$0.57 per share in Q3 2018. A sharp reduction in the tax expense following the implementation of the Tax Cuts and Jobs Act, coupled with higher average selling prices, led to a rise in margins and earnings for the quarter.
We have summarized the key announcements and our outlook for the company in our interactive dashboard – How did Nike fare in Q3 2019 and what is the outlook? In addition, here is more Consumer Discretionary Services data.
Digital Growth: On a constant currency basis, NIKE Digital achieved an impressive growth of 36% during the quarter. Both the SNKRS (sneakers) app – which sells limited-edition shoes using collaborations with athletes, celebrities and universities – and newly launched NIKE app are resonating strongly with consumers. For the quarter, SNKRS traffic and revenue were up triple digits, with 17 of the top 20 SNKRS launches having 100% sell through. Additionally, during the record-breaking Air Jordan 11 Concord launch, NKE's digital ecosystem showed its ability to handle scale and drive unrivaled energy, processing on average 300 transactions per second. Also, consumers using the NIKE App average 40% higher sales than those who don't. Nike Direct constituted approximately 28.6% of the company's total revenues in 2018, with the share expected to go up to 30% in 2019 and 32% in 2020, along with mobile contributing more than 50% of Digital commerce revenue. We expect growth momentum in Nike Digital to continue with increasing digitization and Nike's increasing investment in order to expand its digital ecosystem.
Women's Business: Although the Women's business growth rate outpaced Men's business growth across geographies and achieved double-digit growth in the last couple of quarters, Nike's Women's business represents only 18.9% of the company's total revenue. Given that women's Footwear and Apparel market is estimated at 1.5x the men's footwear market globally, Nike has tremendous potential to grow in this category. We believe that the upcoming Women's FIFA World Cup 2019 is a golden opportunity for Nike, with the company recently unveiling 14 National Team Kits for World Cup, a tournament record for NIKE. We expect the share of women's business to rise to 20% over the next two years.
Growth In Greater China: China earned its 19th consecutive quarter of high-quality, double-digit growth. Nike delivered 24% currency-neutral revenue growth in Greater China, led by NIKE Direct, with digital commerce up over 60%. China is Nike's best performing geographical market, with it still having immense untapped growth potential. China is already the largest footwear and apparel market in the world, but athletic footwear and apparel represents a smaller share of the total than in more developed markets such as the US. However, within the broader market, athletic footwear and apparel is growing double digits in China, as sport has increasingly become more a part of life for consumers in China. Nike is taking a number of initiatives – like sponsoring the Shanghai Marathon, partnerships with the China Super League, and working with the Ministry of Sport to expand physical education in schools – to grow its brand in China. Nike is now more focused than ever on creating product specifically tailored to the Chinese consumers' preferences and fit, and creating digital experiences that connects it more deeply to consumers through China's digital ecosystem.
Higher Profits: Nike's margins witnessed a sharp increase on a year-on-year basis, benefiting from a significant decrease in tax expense following the implementation of the Tax Cuts and Jobs Act. Additionally, margins also received a boost by higher average selling prices, favorable changes in foreign currency exchange rates, and growth in NIKE Direct, partially offset by higher product costs. For FY 2019 and FY 2020, we expect net income margin to increase to about 11% from 5.3% in FY 2018, which would in turn drive EPS growth over the next two years.
Nike's triple-double strategy – 2x innovation, 2x direct, and 2x speed – is paying off, as evidenced by solid growth across footwear and apparel, driven by innovative platforms and strong owned and partnered digital channel over the last one year. We believe that this initiative will help the company record higher growth over the next two years. Increasing focus on digital platform, upcoming global sports events and increasing partnerships would likely lead to strong sales growth with revenue expected to grow to approximately $42 billion by FY 2020. Though the stock has declined post the announcement of Q3 results, mainly due to lower than expected growth in North America, we believe that growth potential and momentum for Nike in China and other emerging markets is expected to more than offset the saturation in North America with competition from the likes of Adidas and Under Armour. Along with organic growth, Nike has renewed its focus on enhancing shareholder returns. In Q3 2019, the company completed the four-year, $12 billion program authorized by the Board of Directors in November 2015 and commenced a new four-year, $15 billion share repurchase program which was authorized in June 2018. Thus, we believe that management's focus on driving sales growth across categories and increasing profitability, coupled with steps taken to enhance shareholder returns, would help in providing support to NKE's stock price.
We have a price estimate of $89 for the company's share price, which is higher than its current market price.