text:
package com.puresoltechnologies.graphs.trees;

/**
 * This is the simple interface for a tree visitor. The walker walks the tree
 * and used this interface to tell the visitor the position.
 *
 * @author Rick-Rainer Ludwig
 *
 * @param <N>
 *            is the actual tree node type.
 */
public interface TreeVisitor<N extends TreeNode<N>> {

    /**
     * This method is called for every node in the tree.
     *
     * @param tree
     *            is the {@link TreeNode} object of the current visiting node.
     * @return A {@link WalkingAction} is to be returned to tell the walker how
     *         to proceed. For details of the different options, have a look to
     *         the {@link WalkingAction} API documentation.
     */
    public WalkingAction visit(N tree);

}


Though your composing will likely not contain the exact fluff and depth as other kinds of crafting, it shouldn't be tedious or uninteresting to look over. Based relating to the importance of your paper, you can pick out to use somebody to attempt some added proofreading for you. You can find full information about wall mounted electric heater reviews here. Should you be in the position to take a relaxation from the paper for 2 or a few days, you are going to be surprised how far significantly better your proofreading classes choose a new look at the paper, as an alternative to a harried, last-minute overall look. Oxford composing design and style is among the simplest and simply comprehensible creating kinds.
Academia writers ought to recognize that federal government also to corporation website pages supply trusted details. You might come across it handy to reflect on your highly private competent ordeals for examples. The key explanation crafting behind a bibliography is always to make it easy for college students to gather examine resources and facts collectively together with the resources whereby they are going to be in a very posture to attain these info.
Our complimentary APA citation maker is just not tricky to try! The quotation is barely likely to be sorted most suitable soon after the doc is exported into the on line generator. Only embody information with regards to the format in brackets during the event the site is often a exclusive kind of document, which includes a PDF. The APA's internet site also provides an outstanding offer of illustrations and tutorials that can assistance anyone who has to unearth out a great deal more relating to the APA structure.
Finding out the proper actions when getting ready to compose a paper is vital for achievement. Such as annotations can help you a whole lot in regards to arranging your function. Right before making use of to any job, you may want to appearance at updating or tailoring your resume contingent on the application you are making. Using the APA format also permits the author to further develop their producing talents.
The writers should have about five several years practical knowledge in speech crafting as a way to present proficient products. They must be able to follow the guidelines supplied so as to stay away from revisions and ensure the clientele are pleased with the quality of labor. All our writers move a considerable process to have a look at their qualities. Most specialized writers function for the IT business.
Inside other circumstances, an APA essay formatessay should have writing of thesis a title webpage. It is possible to be certain your APA essay formatwill be good. Creating in APA Style could be an daunting enterprise, notably in the party you've got in no way penned an official homework paper beforehand. Utilizing APA references will permit you to compose an incredible bibliography.
The writers ought to have through 5 years go through in speech composing in order to present professional companies. They need to have the ability to adopt the directions given in order to prevent revisions and make sure the clients are happy with the standard of labor. All our writers move a considerable course of action to have a look at their qualities. Most technological writers function on the IT field.
You are able to style which you may be exploring for an essay case in point therefore you get relevant outcomes. Support your suggestions and assertions with concrete illustrations or brief offers for the task you happen to be speaking about or by using a short citation from a reliable source. Inside the finish, alphabetize the sources because of the rather first of all letter in all resource mainly because it's formatted effectively. Citing of sources inside of the best suited way is necessary to comprehend higher grades.
Writers really should know how to assemble important information that everybody would want to hear about. The more you explain to us regarding your demands, the better essay aid we'll be in a position to offer.
Though your composing will never provide the precise fluff and element as other sorts of crafting, it shouldn't be tedious or uninteresting to check out. Based around the importance for the paper, you may prefer to utilize an individual to perform some extra proofreading for you personally. For those who are capable to have a rest from the paper for 2 or three days, you're going to be amazed how far better your proofreading classes select a fresh consider the paper, as a substitute for a harried, last-minute visual appeal. Oxford writing design is between the only and simply comprehensible composing designs.
Apa Format Essay Example – Precisely what is It?
Academia writers should certainly are aware that federal government also to business web-sites deliver trusted facts. You may perhaps see it handy to mirror upon your highly unique certified activities for illustrations. The key factor crafting guiding a bibliography will be to help pupils to collect investigate products and details collectively along with the sources wherever they will be in a very place to realize these info.
Make confident titles in APA citations are appropriately capitalized. There are 2 kinds of citations in APA. APA Type can be described as means that to format citations. Normally, the APA model is very advised.
The creating approach moreover towards the analysis might be a good offer simpler and even more practical when you finally are making use of APA structure. There are a pair websites that present information relating to the essentials of educational creating and examples to illustrate them. Dependent on whichever level you're at, you should have the ability to determine an Essay assist websites to be able to profit you. Essay guide web-sites may perhaps also offer distinct guidelines.
There are numerous varieties of persuasive speech. When you can evidently justify the study with your terms, you then are ready to jot down about executing it. If you don't have time, willingness or inspiration to compose your essay by yourself, we're in this article to deliver allow. A student who would like to compose persuasive speech papers which can be outstanding will need to ensure that a firm exactly where he would want to resource on account of his speech has the very best traits in speech creating.
Apa Format Essay Illustration – Dead or Alive?
There are various varieties of persuasive speech. At the time you can obviously demonstrate the research inside of your phrases, you then are prepared to jot down about working on it. If you don't have time, willingness or inspiration to compose your essay by yourself, we're in this article to deliver guide. A scholar who would like to compose persuasive speech papers that are superb have to make certain that a corporation where exactly he wish to supply thanks to his speech has the perfect qualities in speech crafting.
At the time you post your choose, we initiate checking for the really most desirable author to finish your assignment dependent in your necessities https://papernow.org. The working experience the writers have determines the sort of work they're in a placement to supply you. After the author is appointed, they begin functioning on your own essay based around the specifications you've got specified in your buy. About the flip aspect, writers that have above five decades working experience are prepared to decide on the ideal subject matter and grow it primarily based for the requires of the purchaser.


In the 400 years following its composition, Hamlet has become enshrined amongst the classic plays of Western literature. Written about by luminaries from Samuel Johnson to Sigmund Freud, from Voltaire to T.S. Eliot, the study of Hamlet has engrossed great minds since its inception.
Simultaneously, the role of Hamlet is considered both the pinnacle and the challenge of an actor's career, as he strives to take his place amongst classic Hamlets of the past such as Richard Burbage, David Garrick, and Laurence Olivier. Hamlet continues to fascinate readers and audiences to this day, as each new generation discovers that, in the words of critic William Hazlitt, 'it is we who are Hamlet'.
In the wake of his father's death and his uncle's ascension to the throne, Prince Hamlet has struggled with his grief, as well as his sense of outrage over his mother Gertrude's quick remarriage to Hamlet's uncle, the new king. When Hamlet's father appears to him as a ghost to reveal that he was, in fact, murdered by Hamlet's uncle, the prince sets himself on an ultimately tragic path towards vengeance.
William Shakespeare's play emerged from the classical tradition of revenge tragedy, which enjoyed a particular popularity around the beginning of the seventeenth century, when the play was first written and performed. Its first performances were probably staged by the Lord Chamberlain's Men, Shakespeare's company at the time. Although it shares certain plot similarities with other revenge tragedies – a secret murder, a ghostly apparition, a bloody resolution – the ambiguities of Hamlet allow it to defy strict classification, enabling every actor, reader, or theatregoer to consider the play anew upon each new reading or viewing. The straightforward story of a son determined to avenge his father's murder is complicated and enhanced by the many questions that arise throughout the play regarding unanswered plot points as well as philosophical conundrums.
Due to the survival of three early, distinct versions of the text of Hamlet, the process of editing Hamlet has required its editors to consider which of the texts – known as Quarto 1 (Q1), Quarto 2 (Q2), or Folio (F) – is truly 'authoritative'. For the Arden Third Series edition of Hamlet, editors Ann Thompson and Neil Taylor chose to reject the traditions of elevating one text above the others or creating a composite text from all three versions. Instead, Arden offers clear, modernised versions of all three texts.
The second quarto (Q2), the text presented here, was printed in 1604 as The Tragicall Historie of HAMLET, Prince of Denmarke. Despite being nicknamed the 'second' quarto, scholars have argued that it is probable that Q2 actually pre-dates Q1, as it is conjectured to be based on Shakespeare's manuscript copy, his 'foul papers'. The supposed proximity of Q2 to the authorial hand has therefore led this text frequently to be chosen as the authoritative version of Hamlet. As its titlepage makes no mention of performance (unlike Q1), it has been argued that this Hamlet was a version crafted by Shakespeare's hand before the cuts required by performance were put into place: a play 'for the closet, not for the stage'. At 28,628 words, 'Newly imprinted and enlarged to almost as much againe as it was, according to the true and perfect Coppie', it is the longest extant play in the canon. Although it resembles the Folio text, both contain a number of unique lines. Even so, this is the version of Hamlet most familiar to readers in terms of language and scene structure, particularly in relation to iconic monologues such as 'To be or not to be'.


Choose Today fitness is an over 50's fitness group held at the Eagleby Community Centre. This group allows seniors to have fun working out as Louise takes you through an easy and exhilarating fitness class that caters to all fitness levels and body types. The fitness routines can vary from beginner to more experienced moves, but don't worry as Louise will give you more options to help you stay motivated and fit through her classes. So just come in, have fun, and work out a sweat in Choose Today Fitness.
For any inquiries contact Louise below.


text:
Early 2016 British Open Expert Betting Pick
Written by Jordan Walters on July 4, 2016
Golf Betting News
It's an unusual week on the PGA Tour this week because there's no tournament. That's very rare this time of year but the scheduled Greenbrier Classic in West Virginia had to be canceled because of severe flooding in that area. Greenbrier County, where The Greenbrier Resort is located, has been particularly hard-hit by torrential rains. The Greenbrier Classic was set to be the final PGA Tour event before the British Open at Royal Troon. So let's go ahead and look ahead to that tournament. And right now there's a three-way tie on betting odds to win the third major of the year between Jason Day, Jordan Spieth and Rory McIlroy, all at +800.
Closer Look at the Early 2016 British Open Expert Betting Pick
Get pumped.
The Open is almost here. https://t.co/oh2GyDcWBT — PGA TOUR (@PGATOUR) July 4, 2016
Day, the world's No. 1 player, is looking for his first British Open title. The Aussie was on track for a fourth win of the year and eighth win in 20 starts when he led the WGC-Bridgestone Invitational at Firestone Country Club on Sunday with four holes to play, only to implode. Day missed a four-foot par putt on the 15th before butchering the par five 16th with a double-bogey seven. Needing to finish birdie-birdie to force a playoff Day's effort from the fringe on the 17th came up short and then a wild drive on 18 ended any hopes of a miracle hole out. He finished tied for third with, among others, Spieth. Day says he will use that tournament as motivation for the British Open. He finished just out of a playoff last year. Dustin Johnson won the WGC-Bridgestone, his second straight tournament win after also taking the U.S. Open for his first major title. He is now up to a career-high No. 2 in the world and is +850 to win the British Open. "It's the first time I've won two tournaments in a row," Johnson said after his 1-shot victory over Scott Piercy. "I mean, that's big. I'm excited and looking forward to going over to the British with the golf game in good form." The Open Championship, or simply the British Open, is the oldest of the four major championships in professional golf. Held in the United Kingdom, it is administered by The R&A and is the only major outside the United States. This will be the 145th British Open and for the ninth time Royal Troon will be the stage. Royal Troon Golf Club dates to 1878, when it debuted with a five-hole golf course. As with many Scottish courses, Troon is the name of the club and the town where it's located. Royal Troon will play 7,190 yards for the 2016 Open at a par 71 on nines of 36-35. This is 15 yards longer than it played for the 2004 Open Championship. Todd Hamilton was the unlikely winner that year. The past six Open Champions at Royal Troon have been American. The defending champion is Zach Johnson and he's +5500 on betting lines to repeat. He beat South African Louis Oosthuizen and Australian Marc Leishman in a playoff. Johnson closed with a 6-under 66 by holing a 30-foot birdie putt on the 18th hole in regulation. Spieth fell one shot short of the playoff, which would have given him an opportunity to clinch the third leg of the Grand Slam. It was the first British Open playoff since Stewart Cink beat Tom Watson at Turnberry in 2009.
2021 Sony Open in Hawaii Expert Analysis – PGA Betting
2021 Sentry Tournament of Champions Expert Analysis
2020 Mayakoba Golf Classic Expert Analysis – PGA Betting
The Match 3: Champions for Change Expert Analysis
2020 RSM Classic Expert Analysis – PGA Betting
2020 Masters: Round 1 Rundown – PGA Tour Betting
Expert Analysis of the Top 5 Favorites to Win The 2020 Masters
Odds to Win 2020 Masters November 9th Update
2020 Houston Open Expert Analysis – PGA Betting
Updated Odds To Win The 2020 Masters – PGA Betting
2020 Masters COVID-19 News Update – PGA Tour Betting
2020 Bermuda Championship Expert Analysis – PGA Betting
2020 Masters Odds Update October 26th Edition
Top 3 Expert Analysis for The 2020 Masters – PGA Tour Betting
2020 Zozo Championship Expert Analysis – PGA Tour Betting

redpajama_set_name: RedPajamaCommonCrawl


Mobile Applications are the need of the hour for the companies to reach out to more people. The smartphones have penetrated the market and the mobile applications have reached billions of people. The business has also transformed and has become Mobile app specific. It is therefore requirement of all the clients to build a customized advanced mobile app that can be subtle for the sales, customer engagement and business prosperity.
Anwar Ali – The Webmaster, is known for the high quality mobile application development. You can leverage the cutting edge technology and vast experience of our professionals who do not only create mobile apps for any level of complex business but also maintain and support them.
We add values to business through our customized and tailored edition of mobile application.
The seamless experience of UX and UI design in the mobile application help the business to garner more customer satisfaction.
If you are looking to target the mobile market, then expect a quick result thanks to our customer friendly and interesting mobile apps coupled with innovation.
Technology is changing every day and we understand the same. Our team is equipped with cutting edge technologies and constantly upgrading as per the market demands and requirement. So, if you are looking for the best results, then you have landed at the right place.
We offer testing and automation to keep the business flawless and updated at all the time. We understand that every missed opportunity is a lost opportunity and we ensure that our partner does not lose one.
We are well aware about your plans for expansion of business and thus ensure integration is always on the card. Our team makes sure that integration between different technological platforms are always possible whenever required.
We help our partners to create the idea of the mobile application as per the market demand and business requirement. Together we formulate the strategy to ensure that Mobile Application gets its blue print.
Our expert professionals give the required designs to Mobile App. Starting from wireframes, mockups and clickable prototypes, our team ensures a captivating experience for the customers and users.
Our dedicated development team develop the mobile app and make it one of the most attractive mobile apps for different platforms i.e Android and IOS.
The QA team carries out thorough testing both functional and non-functional before the product is delivered to the market.
We help our partners to launch the Mobile App and ensure it reaches maximum number of users.
Every Mobile App needs enhancement as per the market and business demands. Our team is always ready for making those changes for better user experience.


For anyone that needs a refresher or is new to using Direct Athletics, a video tutorial and printable guide are now available. The newest tutorial is on how to register your qualifying athletes to the Fraser Valleys from your zone championships.
Please double and triple check your entries by having your assistant (if you have one) or your team do it. The students that qualified will know and will tell you if you missed them. Trust me!
Reminder the deadline to register is Wednesday, May 6th at 10:00pm. If you miss this deadline, you will be charged a $25 late fee.


We are a family run Air Conditioning business based in Peterborough, Cambridgeshire, UK. We undertake all Air Conditioning services from the design through to supply, installation, service and repair. We pride ourselves on the quality of our workmanship therefore we provide an expert and professional service with fully qualified and trusted engineers and the best equipment on the market.
EuroCool provide Air Conditioning services to a broad range of industries and customers from retail, commercial (including comms rooms), industrial, leisure and governmental premises to private homes and conservatories.
"From the request to the quote, to the completion of the project, the management and execution of the work was exceptional. The price was competitive and the engineers were a pleasure to deal with. "
Specialists in Air Conditioning installations from 1 domestic unit to large commercial projects.
We have a tried and tested team of skilled and authorised installation engineers to carry out any installation of any size or type according to your requirements. We will be on hand throughout the installation to ensure every project runs smoothly. Our Engineers are fully qualified and hold all relevant qualifications including FGAS. All Eurocool Air Con engineers continue to attend refresher courses so we are up to date with the latest methods in the Air Conditioning industry.
Well done to Martin Saidler our MD for completing the 3 Peaks Challenge to raise money for the national Autistic Society.
No need to worry about this folks- get yourself kitted out with a brand new Air Conditioning system and enjoy comfort cooling in summer and heating in winter- keeping a nice even temperature all year-round!


Want to be notified of new releases in zac-garby/cas?
A computer algebra system in Haskell. At the time of writing this it consists of only 85 lines of code.
As an example, some expansion rules are defined inside the library. Using these, the expression tan(X + Y) can be expanded into (((sin(X) * cos(Y)) + (cos(X) * sin(Y))) / ((cos(X) * cos(Y)) - (sin(X) * sin(Y)))) using the built-in trigonometry expansion rules.
Basic axioms like a + b = b + a, a + 0 = a.
Might be a good idea to transform a - b into a + (-b) and similarly a / b into a * (1/b).
Might be implemented as another set of transformation rules, constructed from some designed to simplify but also the inverses of some expansion rule sets.
Parsing of expressions, so things can be entered much more easily.


text:
School, sport and health campus go-ahead for new town near Edinburgh
Developer hails big breakthrough for Shawfair development
insider.co.uk
Artist's impression of community campus in Shawfair
Planning permission has been given for a school and community campus in the new town of Shawfair.
Midlothian Council has granted approval in principle for the facilities around 100m from Shawfair railway station, south-east of Edinburgh.
Housebuilder snaps up land to take new town development to 1000 homes
The campus is planned to open in time for the 2024/2025 school year and will provide health, leisure and sporting facilities for the entire community as well as nursery, primary and seconding schooling.
Nick Waugh, director of Shawfair LLP, said: "This is excellent news for Shawfair town centre and will provide a vibrant focal point, attracting people from all over the area.
"The town centre is really taking shape now. Dandara has become the first housebuilder to begin constructing new homes within the Shawfair 'ring road' and we plan to begin initial ground investigations for the eastern section of road shortly.
Shawfair development near Edinburgh unveils new milestone
"This will run north from the new Millerhill Village bypass – which opened earlier this year - and provide a direct connection with the new campus."
Shawfair is a joint venture between Buccleuch Property and Mactaggart & Mickel and, when completed, will be a town of 4000 sustainable homes, comparable in size to Cupar, Dunblane or Linlithgow.


text:
John Flynn Funeral Home and Crematory, Inc.
Marie Gallant, Sharpsville, PA
SHARPSVILLE, Pennsylvania (MyValleyTributes) –Loving Wife, Mother, & Grandmother
Marie Gallant, 84 of Jefferson Township, Sharpsville, Pennsylvania, died Monday, December 20, 2021 at UPMC, Farrell, Pennsylvania.
Marie was born in Erie, September 16, 1937, daughter of the late George and Mary Sima.
On November 23, 1957, she married Steve Gallant, Sr., who preceded her on July 28, 2008.
Marie and her husband owned and operated a potato farm for over 30 years in Coudersport, Pennsylvania, before retiring to Sharpsville, Pennsylvania.
She was a proud mother and grandmother, she enjoyed gardening, flowers, reading and her husky companion, Anya.
She would attend Charleston United Methodist Church in Hermitage, Pennsylvania, volunteered at the Salvation Army and at the Prince of Peace Center when her health allowed.
She was preceded in death by her parents, husband and a daughter-in-law.
She survives by a son, Steven A. Gallant, Jr. of Sharpsville; daughter, Debbie Yoest of Youngstown, Ohio; four grandchildren, Aaron, Bryant and Christie Gallant and Nickolas Yoest; two great-granddaughters, Gianna and Harper Lynn Gallant, along with several nieces and nephews.
Arrangements handled by John Flynn Funeral Home and Crematory, Inc.
To send a flower arrangement to the family of Marie Gallant, please click here to visit our Sympathy Store.
A television tribute will air Wednesday, December 22 at the following approximate times: 7:10 a.m. on FOX, 12:22 p.m. on WKBN, 5:08 p.m. on MyYTV and 7:27 p.m. on WYTV.


Wow. Elle MacPherson you have one beautiful stylish holiday home. I just had to share these images from the current Harpers Bazaar magazine of her home. We all know how beautiful she is and I just think this home celebrates all the natural, eclectic qualities that I admire about her also. She's nailed it for me.
The home is part of the development by the The Raven Group and designers yoo.
images Images via Joseph Montezinos Photography and Harpers Bazaar.


Audible's original radio drama "Die juten Sitten" is set in the harsh reality of a brothel that actually existed in 1920's Berlin. The launch campaign focuses on maximum authenticity through historical production conditions.
The protagonists of the radio play in analogue 360° snapshots.
Captured by a self-built construction of 100 pinhole cameras.
Photo production with collodion plates, a common photographic process in the 1920s.
"When whores tell the truth, clients have to swallow." Billboards on the Reeperbahn in Hamburg.
With my smile, I get everything. I learned it from the whores.
I always have to play emotions that I don't have.
I don't need a leash for a man. They run after me anyway.
I don't despise my customers. I humiliate them.


All American Wholesalers is your online trade show for all American-Made products. Keystone Wholesale Markets was created in 2002 to help our local plain businesses sell their products to wholesale buyers from all over the country. This focus on Lancaster County has blossomed into a passion for American Made products, and making those products available to you, the buyer.
We created this site to serve as a resource for wholesale buyers, giving them access to a multitude of manufacturers 24/7, all year round. With profiles showcasing each manufacturer, buyers will gain access to information and products only available at shows or wholesale malls. These profile pages are actively updated, giving you access to new products and information quicker than ever. By bridging the gap between wholesale manufacturers and buyers we hope to create great partnerships, and make these USA made products available to retail customers all over the country.
If you have any questions please contact us at the information below. We want this site to provide a great service to you, and we are very interested in hearing how we can improve the site.
Subscribe to our blog feed for regular updates!


If you randomly ask Cariocas (the suntanned natives of Rio) where is the best spot around the neighborhood to have a quick bite, chances are you will be directed to a casa de sucos. Translated into "juice houses," these are the least fancy and unpretentious corners to have a meal – and that's why locals love them. Casas de sucos are open to the street, without facades, offering a narrow space between the sidewalk and the counter.
Up on the wall they meticulously display the best fruits of the season, and never run out of the substantial bowl of açaí with granola, Rio's beloved natural boost of energy; and, you may have one of their rich sandwiches – vegetarians or not - that will certainly keep you fed for the day.
Everyone has a favorite casa de sucos, a favorite fruit mix, and oh, a favorite attendant: someone who knows you by your nickname and exactly how you love your sandwich done. Except for the few casas de suco that have seats at plastic tables spread onto the sidewalk, everything happens at the counter.
You choose (that's the hardest part), you order, and the attendant shouts the command to the back of the house – that's usually divided by a wall, except for a small window, where food travels from the kitchen to servers. Behind the scenes, cooks work nonstop bombarded by all requests, miraculously keeping all of them on top of their minds. To stop and watch this fascinating teamwork is an experience by itself.
Casually dressed, or even with sandy feet, you go there for breakfast. You go there for lunch. You go there for meetings. You go there for dates. You go there for dinner. You go there for late dinner. You just go there. And, just like every carioca, you will end up tasting the endless variety of tropical freshly squeezed, colorful, and yummy juices only to choose your all-time favorite: orange and carrot? Pineapple and mint? Acerola and strawberry? Whatever combination, it will always come with Rio's best spice: a smile.
Our favorite spots are Bibi, BB Lanches, Balada Mix and Big Polis. But if you're not in Rio, you can still find the smile and healthy eating concept shipped to Manhattan by Market Ipanema a stylish branch that mirrors the original Carioca restaurant. This hidden gem located on 66 Kenmare Street, in SoHo, brings new flavors to your mouth by wrapping crepes in tapioca, offering the so-beloved açaí bowl, and squeezing fruits into juices right on the spot. All ingredients come from local farms – and, yes, your food is, happily, prepared from scratch. Stop by at Market Ipanema and use code BRAZILJUICE for a 15% off a juice of your choice. (Discount code valid in-store only and until 08.31.17.) Just one of our Brazilian summer perks to you. Stay tuned!


text:
Last edited 07 Apr 2021
BSRIA Institute / association Website
Cyber threats to building automation and control systems
This article originally appeared as a BSRIA blog post Should Building Managers worry about scary movies? written by BSRIA's Henry Lawson and published in January 2015.
Building managers thinking of films to see this winter may give some thought to a previously little known comedy largely set in North Korea.
The successful cyber-attacks on Sony, one of the world's best known corporations, and which lives and breathes digital technology, resulted in the release of reams of sensitive information, and led Sony to delay the opening of the film. All this may on the face of it have little to do with the nuts and bolts of building automation, but it does fire another warning shot across the industry's bows.
We have known for some time that buildings are vulnerable to cyber-attack. Not only can they be major targets in themselves, but they often offer an easy "back door" into an organisation's wider IT network. The successful attack on Target stores in the USA gained access via the company's HVAC system which in turn allowed them into the more lucrative customer data records. BSRIA research shows that, in the USA for example, over 90% of all larger buildings (i.e. those with more than half a million square feet of space – or c. 50,000 m2) have some kind of building automation and control system (BACS), and many are to some degree at risk.
What is striking is that in so many successful attacks on buildings or infrastructure the problem had less to do with the cyber-protection systems in place than with the way in which they were being maintained and operated. At Target, alerts were generated but not acted on until after much of the damage was done. The earlier attack on Google's Australian offices in Sydney were linked to the fact that an older version of the Tridium platform was still in use.
Many organisations lack effective processes and procedures, which in turn is linked to the fact that, even within the same organisation, building services and IT tend still to work in separate, parallel worlds.
All of this is compounded by the fact that BACS systems increasingly have at least one foot in the Cloud, and often several. Almost all major suppliers of BACS and Building Energy Management Systems (BEMS) offer at least the option of cloud based analytics, and the ability to access and manage multiple buildings remotely is seen as almost a "must-have" – outside of industries which have traditionally been hypersensitive about security. The cloud brings huge technical, social and financial benefits, but also greatly increases risk, as does the general spread of IT based functionality through buildings and devices, a process that the 'internet of things' is set to expand exponentially.
Major suppliers of BACS systems are talking publically about ways of addressing the challenge, and companies like Lynxspring are establishing a reputation in this area. In the UK the Institute of Engineering and Technology (IET) issued a Code of Practice for Cyber Security in the Built Environment in November 2014.
Cyber-attacks tend to be motivated by political, ideological, or financial motives, or by a combination of mischief and malice. On all these scores, major buildings remain vulnerable especially when they are associated with prominent organisations, whether private or public.
In BSRIA's market briefing Threats / Opportunities for Building Automation Systems, we look further at the cyber threat and what is being done to counter it. The study also looks at other major trends that are changing the profile and prospects of building automation. These include the development of more intelligent HVAC systems, (whether Direct Expansion or VRF based), the growth of 'smart homes' solutions which are also snapping at the heels of the BACS market at the "lower end" of commercial buildings, the growing importance of building analytics and big data, and the rise of potential new global players, especially in countries like China and India.
We will be following these and other emerging trends. It should be as exciting anything that Hollywood has to offer, for rest assured: The cyber threat (and much else) is coming to a building near you soon.
--BSRIA
Artificial intelligence.
Building Automation and Control System BACS.
Building energy efficiency - is building automation the answer?
Building energy management systems.
Building energy management systems (BEMS) for data centres.
Building management systems.
Building Services Analytics - BG 75 2018.
Commercial building automation market.
Critical infrastructure is more vulnerable than ever. It doesn't have to be that way.
Cyber-security and phishing.
Cyber security and engineering.
Energy management and building controls.
Engineering resilience to human threats.
HVAC.
Infrastructure and cyber attacks.
Mitigating online risk.
PAS 1192-5:2015 Specification for security-minded building information modelling, digital built environments and smart asset management.
Security consultant.
Smart buildings.
Smart technology.
[edit] External references
Tech Crunch, Smart Building Technologies Could Expose Companies To A New Breed Of Cyber Attack. . 2014
The Institute of Engineering and Technology (IET), Code of Practice for Cyber Security in the Built Environment. 2014
BIM+_Cyber security threats trigger need for new PAS 1192-5, 12 November 2014.
Threats / Opportunities for Building Automation Systems.
Retrieved from "https://www.designingbuildings.co.uk/wiki/Cyber_threats_to_building_automation_and_control_systems"
View comments history


The Association of Textile, Apparel & Materials Professionals (AATCC) will be hosting a workshop on textile testing which will be held on 9-10 December at its headquarters in Research Triangle Park, as per a press release.
The workshop is designed for textile industry professionals who are responsible for product evaluation, specifications, and quality control for apparel and textile materials. The participants will learn to perform and interpret test results for around 20 colourfastness tests which include crocking, light, washing, and perspiration. Physical properties test methods include dimensional change, water repellence, and appearance retention and evaluation procedures.
ASTM methods like D1424 Standard Test Method for tear strength of fabrics by falling pendulum apparatus, D5034 breaking strength and elongation of textile fabrics, and D3789 Standard Test Method for bursting strength of textile fabrics will also be discussed at the workshop. Sessions on basic colour theory and measurement will also be conducted.


As most people disapprove with Joseph's Fiennes' portrayal of the late Michael Jackson, it turns out his daughter Paris Jackson feels the same way, and understandably so.
Paris, 18, is vehemently against Fiennes' casting as her father in the British comedy series Urban Myths, which is based on the alleged car ride MJ and his good friends Elizabeth Taylor and Marlon Brando took following 9/ll for fear of flying. A trailer for the upcoming series surfaced on Tuesday.
"It angers me to see how obviously intentional it was for them to be this insulting, not just towards my father, but my godmother Liz as well," Paris wrote in another post. "Where is the respect? They worked through blood sweat and tears for ages to create such profound and remarkable legacies. Shameful portrayal," she continued. "He made a point of it plenty of times to express his pride in his roots. He would never have wanted this," she concludes.
With all of the backlash, do you think they will (or should) pull that episode from the series? Sound off!


Employers who place value in their staff and let them know how much they are worth to an organisation are likely to prosper as a result, according to one specialist.
Kevin Friery, clinical director at Right Corecare, said that staff welfare is often not given the priority it deserves by employers, and as a result some organisations are find it has a detrimental affect on business.
As studies have proven that happier and healthier staff result in better productivity and, subsequently, greater profit, Mr Friery said firms can learn a lot from this.
More employers are aware of the need for staff wellbeing, but many struggle with how to achieve it. In difficult economic times it is employers who realise the value of their staff, and work to enhance it, who will prosper," he explained.
Recently, Katharine Moxham, a spokesperson for GRiD, said that in times of increased economic pressure it is important for employers to consider the wellbeing of their employees and what wider implications are suggested by high levels of stress.


text:
Browsing REDP End of Project Reports by Author
Browsing REDP End of Project Reports by Author "Behan, Jasmina"
xmlui.ArtifactBrowser.ConfigurableBrowse.view
An Examination of the contribution of off-farm income to the viability and sustainability of farm households and the productivity of farm businesses
Behan, Jasmina; Carroll, James; Hennessy, Thia; Keeney, Mary; Newman, Carol; O'Brien, Mark; Thorne, Fiona; Department of Agriculture, Food and the Marine, Ireland (Teagasc, 01/01/2007)
The number of farm households in Ireland participating in the off-farm labour market has increased significantly in the last decade. According to the National Farm Survey (NFS), the number of farm households where the spouse and/or operator is working off-farm has increased from 37 per cent in 1995 to 58 per cent in 2007. The important contribution of non-farm income to viability of farm households is highlighted in the results of the Agri-Vision 2015 report, which concluded that the number of economically viable farm businesses is in decline and that a significant proportion of farm households are sustainable only because of the presence of off-farm income. Research conducted by Hennessy (2004) demonstrated that approximately 40 percent of farm households have an off-farm income and that almost 30 percent of the farming population are only sustainable because of off-farm income. Clearly, the future viability and sustainability of a large number of farm households depends on the ability of farmers and their spouses' to secure and retain gainful off-farm employment. The Department of Agriculture, Fisheries and Food (DAFF) have recognised the importance of off-farm income to the sector and they have recommended that future policies focus on farm household viability in all its dimensions, including farm and off-farm income sources (2000).
Projections of Agricultural Land Use and the Consequent Environmental Implications
Behan, Jasmina; McQuinn, Kieran (Teagasc, 2002-12-01)
The research conducted under the project no. 4822 resulted in an extension of the FAPRI-Ireland econometric model of Irish agriculture, established by Rural Economy Research Centre, to include an environmental dimension. The original model was first extended by a forestry component. As a result, the standard output is now enhanced with the additional projections of agricultural land area allocated to forestry. In the next stage the model was developed to enable the conversion of standard agricultural and forestry output into environmental indicators associated with global warming. Therefore, the model currently provides projections of greenhouse gas emissions and carbon sequestration from Irish agriculture and forestry. The general objective is to generate projections of net greenhouse gas emissions from Irish agriculture. In order to achieve this objective we extend the existing model to generate projections of: 1. farmers' uptake of forestry on farmland 2. carbon sequestration from on-farm forests 3. greenhouse gas emissions from agricultural activities.The forestry component was added to the existing FAPRI-Ireland modelling system. An econometric technique is used to model farmers' forestry planting decision. The greenhouse gas emissions are calculated following the guidelines provided by the Intergovernmental Panel on Climate Change, which have been adjusted for Irish specific conditions. Carbon sequestration levels are generated by applying a methodology developed by COFORD, Ireland. The projections were generated under two policy scenarios. First, it was assumed that there would be no change in agricultural or forestry policy over the projection period. Second, the assumption was made that policy measures are introduced to encourage further extensification of agricultural practices. If there was no policy change, the results suggest that afforestation on farmland would exceed 10,000 ha per annum; However the uptake would not, at any point, reach the level of planting recorded in 2001. As forests planted on farmland mature, carbon sequestration levels are projected to continuously increase in the coming years. On the other hand, greenhouse gas emissions from agriculture are expected to decline as a result of the projected contraction in the national cattle herd and sheep flock. If policy was reformed to include further extensification of livestock production, it is expected that less agricultural land would be allocated to forestry. The reduction in planting, however, would not be sufficient to significantly affect the carbon uptake levels projected under the no policy change scenario. However, further extensification would lead to further contraction in livestock numbers, which would result in more pronounced reductions in greenhouse gas emissions.


What a summer we are having it is one of the hottest days of the year and I'm lucky enough to be sitting out in the sun writing this blog.
I received a fabulous recipe the other day from Cloughjordan House cookery school and the timing couldn't have been better.
It was their recipe for home made lemonade, and as my house always seems to have an endless supply of lemons in it for baking I was able to try it out straight away.
To begin add your sugar and 250mls of water to a pot and heat. Peel the zest of one of the lemon and lime without the pith with a sharp knife and pop that in the pot with the sugar syrup. Bring this to the boil and stir until sugar has dissolved.
Once that is ready take it off the heat and get on with juicing your lemons and limes. Next add this to the sugar syrup then strain it all into a large carafe, lastly add in the icecold 1.5 litres of water with some ice and maybe a few slices of lemon and bobs your uncle you have yourself an amazing summer drink.


Oh, shoot! Jersey Mikes Subs - Augusta Village is temporarily not accepting orders.
All cold subs are served Mike's way: with onions, lettuce, tomatoes, spices and "The Juice" (red wine vinegar and olive oil blend). Items are made to order! Please specify what you would prefer in each item.
Swiss, provolone, and green peppers.
Prosciutto, ham, prosciuttini, and cappacuolo.
Cooked on premises using only certified Angus USDA top choice rounds.
Turkey, ham, provolone, applewood smoked bacon and mayonnaise.
Turkey, ham, provolone, bacon, mayo and of course Mike's way!
Roast beef, turkey, swiss, bacon, mayo and of course Mike's way!
Onions, peppers, melty white American cheese and chipotle mayonnaise.
Grilled onions and peppers, chipotle mayo - Wow! You gotta have one!
Grilled onions and peppers, mushrooms, jalapenos and extra cheese!
Grilled onions, peppers, mushrooms, jalapenos, and of course, melty, white American cheese.
Grilled onions, peppers, mushrooms, jalapenos with extra cheese!
Grilled onions, and peppers, plus mushrooms, jalapenos, and extra cheese!
Swiss cheese, sauerkraut, and 1000 Island dressing.
All wraps come as stated, unless requested.
Grilled sliced chicken with lettuce, Parmesan cheese, and creamy Caesar dressing.
Grilled sliced chicken breast smothered in Frank's Red Hot Sauce with melted white American cheese with lettuce, tomato, and blue cheese dressing.
Grilled sliced chicken breast, American cheese, lettuce, salsa, and jalapenos.
Grilled green peppers and onions, melted Swiss and provolone, and homestyle ranch dressing.
Highest quality, 99% fat free turkey, lettuce, tomato, and honey mustard.
Sour cream and onion Lay's.
Baked cheddar and sour cream.
Mrs Vickie's original recipe kettle cooked potato chips.
Mrs Vickie's sea salt and malt vinegar kettle cooked potato chips.
Mrs Vickie's applewood smoked BBQ kettle cooked potato chips.
Mrs Vickie's jalapeno kettle cooked potato chips.
Mrs Vickie's BBQ kettle cooked potato chips.
Provolone and ham. Served with drink and a cookie.
Provolone and turkey. Served with drink and a cookie.
Provolone and salami. Served with drink and a cookie.


More Print this page Share this page. I have freestanding Series 8 dishwasher. It offers spectacular photo website which you could share your photos and earn from them. Related Question My keyboard and touch pad compaq presario cq40 not working i try to reinstall keyboard and touch pad but it still not working ,and then i remove to put new keyboard but it still not working at all I have tried reformating without getting it work. Once a product is retired, support, including software drivers, will no longer be available.
Go to Control panel, mouse, and you should have a submenu called Device Settings win8. Agradeciendo una vez mas la aportacion de esta gran pagina es fantastica gracias por la colaboracion.
HP will soon retire this product. Please try again shortly. Your email address will not be published.
Dec 13, Compaq Touch Pad. Email list of drivers. The small light in on the upper left hand side of the pad you wanna double tap on the light itself. The email address entered is already associated to an account.
Want Answer 0 Clicking this will make more experts see the question and we will remind you when it gets answered. Peter Mortensen 8, 16 61 IE still is the market leader and a large part of other people will miss your excellent writing due to this problem. The list of all available drivers for your product is shown above.
There is a little button over the keypad with either a red light on or a white one on. Answer questions, earn points and help others Answer questions. Asia Pacific and Oceania.
The max point reward for answering a question is You can get them here. My laptops touchpad is working fine the problem is with the sroller.
Hi, This URL help me a lot to resolve my issue. Just click that, and it will remove the red light.
If you have a Compaq Presario CQ62 and your mouse pad is locked, at the top of the keyboard there is a lock picture. The list of recommended drivers for your product has not changed since the last time you visited this page.


text:
VH Corner
2018 Read Books
Stephen King Project
My little corner of interests
Tag: nicolas cage
Drive Angry Starring: Nicolas Cage, Amber Heard, William Fichtner Directed by: Patrick Lussier Written by: Todd Farmer, Patrick Lussier Rating: R Length: 1 hour 44 min Genre: Action Release Date: February 25, 2011 I started listening to a podcast called How Did This Get Made? about big budget movies gone wrong hosted by Paul Scheer, Jason Mantzoukas...
Lord of War Directed: Andrew Niccol Starring: Nicolas Cage, Ethan Hawke An arms dealer who doesn't tell his significant other what he really does for a living, while also trying to avoid ATF. Based on true events. I never thought about switching the order of words can make them...
Matchstick Men
Matchstick Men Starring: Nicolas Cage, Alison Lohman, Sam Rockwell Directed by: Ridley Scott Written by: Eric Garcia (book), Nicholas Griffin (screenplay) Rating: PG-13 Genre: Comedy Release Date: 2003 Tic-prone Nicolas Cage and Sam Rockwell are con men planning their next big score when Cage's daughter shows up out of nowhere. It is a lighthearted movie....
A writer tries to adapt a book into a movie and writes himself into the script. Directed by Spike Jonze (Being John Malkovich). It is written by the same guy that wrote Being John Malcovich and both were directed by the same guy too. The screenwriter was actually hired...
velveetahead on The Long Walk
velveetahead on The Dead Zone (Television Series)
Andrea Hassanen on The Dead Zone (Television Series)
Adam on The Long Walk
Jeri Warren on Battle of the Sexes
Archives Select Month July 2018 (5) February 2018 (1) January 2018 (3) December 2017 (2) November 2017 (2) October 2017 (3) September 2017 (6) August 2017 (5) July 2017 (4) June 2017 (7) May 2017 (1) April 2017 (3) March 2017 (2) February 2017 (3) January 2017 (4) December 2016 (8) November 2016 (1) October 2016 (3) September 2016 (6) August 2016 (1) July 2016 (1) June 2016 (9) May 2016 (8) April 2016 (7) March 2016 (11) February 2016 (5) January 2016 (4) November 2015 (5) October 2015 (4) September 2015 (6) August 2015 (3) July 2015 (1) June 2015 (4) May 2015 (4) April 2015 (6) March 2015 (42) February 2015 (6) January 2015 (1) December 2014 (6) November 2014 (2) October 2014 (2) September 2014 (3) August 2014 (1) June 2014 (2) May 2014 (4) April 2014 (5) March 2014 (2) February 2014 (5) December 2013 (5) November 2013 (4) October 2013 (5) September 2013 (3) August 2013 (5) March 2013 (2) June 2012 (1) April 2012 (1) March 2012 (3) February 2012 (3) January 2012 (6) December 2011 (7) November 2011 (8) October 2011 (4) September 2011 (1) August 2011 (2) July 2011 (3) April 2011 (3) March 2011 (7) February 2011 (6) January 2011 (3) December 2010 (9) November 2010 (5) October 2010 (3) September 2010 (1) August 2010 (3) July 2010 (5) June 2010 (3) May 2010 (2) April 2010 (4) March 2010 (5) February 2010 (2) January 2010 (4) December 2009 (10) November 2009 (4) October 2009 (13) September 2009 (6) August 2009 (8) July 2009 (4) June 2009 (6) May 2009 (6) April 2009 (11) March 2009 (9) February 2009 (8) January 2009 (15) December 2008 (5) November 2008 (10) October 2008 (4) September 2008 (5) August 2008 (2) July 2008 (7) June 2008 (5) May 2008 (15) April 2008 (7) March 2008 (16) February 2008 (21) January 2008 (18) December 2007 (8) November 2007 (18) October 2007 (7) September 2007 (4) August 2007 (6) July 2007 (8) June 2007 (6) May 2007 (4) March 2007 (8) February 2007 (10) January 2007 (6) December 2006 (5) November 2006 (5) October 2006 (13) September 2006 (5) August 2006 (6) July 2006 (2) June 2006 (3) May 2006 (10) April 2006 (6) March 2006 (3) February 2006 (3) January 2006 (9) December 2005 (8) November 2005 (5) October 2005 (2) September 2005 (1) August 2005 (8) July 2005 (13) June 2005 (6) May 2005 (5) April 2005 (7) March 2005 (4) January 2005 (4) November 2004 (3) October 2004 (8) September 2004 (6) August 2004 (5) July 2004 (2) June 2004 (4) May 2004 (9) April 2004 (14) March 2004 (4) February 2004 (3) January 2004 (6) December 2003 (4) November 2003 (8) October 2003 (3) September 2003 (6) August 2003 (7) July 2003 (10) June 2003 (3) May 2003 (7) April 2003 (1) March 2003 (7) February 2003 (7) January 2003 (1) December 2002 (1) November 2002 (1) October 2002 (1) August 2002 (1) July 2002 (4) June 2002 (4) May 2002 (7)
© 2023 VH Corner | Powered by WordPress & Customizable Blogily


text:
Q: Swift: Multiple async requests in order. How to wait for previous request to finish? As part of the authentication process in my app, users can sign in using their Facebook account - I'm using the Facebook iOS SDK to handle this process. Once authentication is complete, I make a request to Facebook graph api to fetch the users profile data (This is the first async req). The second async request is also to Facebook graph api to request the users friends list who have the app installed.
The final and third request in this function makes a async POST request to an API I've developed to post all of the data collected from Facebook. Finally once this is complete the user is allowed in to the app. However this is not the case, it seems that the Facebook requests do not complete before the POST request to the API and it is therefor pushing up blank data. I don't mind in what order the first 2 requests to Facebook finish, however I NEED the data to be successfully posted to the API before allowing the user in to the app. I've tried using semaphores and Dispatch groups, however when looking at the console, things are not running the in the correct order and I can see from the API database that null values are being inserted.
Authentication Controller
 // Successful login, fetch faceook profile
            let group = DispatchGroup()
            group.enter()
            // Redirect to tab bar controller should not happen until fetchProfile() has finished
            // Redirect should not happen if fetchProfile() errors
            self.fetchProfile()
            group.leave()

            // Redirect to tab bar controller
            let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController
            self.present(tabBarController, animated: true, completion: nil)

Updated Facebook Fetch Profile
 // Facebook Profile Request
    func fetchProfile() {

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
    let user = appDelegate.user
    var facebookFriends = [String?]()

    do {
        let results = try managedContext?.fetch(fetchRequest)
        fetchedUser = results![0] as? NSManagedObject
    }
    catch {
        print("Error fetching User entity")
        return
    }

    let group = DispatchGroup()
    print("Starting Step 1")
    group.enter()

    // Facebook Profile
    let parameters = ["fields": "id, email, first_name, last_name, picture.width(500).height(500), birthday, gender"]
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).start { (connection, result, error) -> Void in

        if error != nil {
            print(error)
            return
        }

        let result = result as? NSDictionary

        if let providerID = result?["id"] as? String {
            user.provider_id = providerID
            self.fetchedUser!.setValue(providerID, forKey: "provider_id")
        }

        if let firstName = result?["first_name"] as? String {
            user.first_name = firstName
            self.fetchedUser!.setValue(firstName, forKey: "first_name")
        }

        if let lastName = result?["last_name"] as? String {
            user.last_name = lastName
            self.fetchedUser!.setValue(lastName, forKey: "last_name")
        }

        if let email = result?["email"] as? String {
            user.email = email
            self.fetchedUser!.setValue(email, forKey: "email")
        }

        if let picture = result?["picture"] as? NSDictionary, let data = picture["data"] as? NSDictionary, let url = data["url"] as? String {
            user.avatar = url
            self.fetchedUser!.setValue(url, forKey: "avatar")
        }

        if let birthday = result?["birthday"] as? String {
            user.birthday = birthday
            self.fetchedUser!.setValue(sqlDate, forKey: "birthday")
        }

        if var gender = result?["gender"] as? String {
            user.gender = gender
            self.fetchedUser!.setValue(gender, forKey: "gender")
        }

        group.leave()
        print("Step 1 Done")

        group.enter()
        print("Starting Step 2")

        // Facebook Friends Request
        FBSDKGraphRequest(graphPath: "me/friends", parameters: ["fields": "id, first_name, last_name, picture"]).start { (connection, result, error) -> Void in

            if error != nil {
                print(error)
                return
            }

            let result = result as! [String:AnyObject]

            for friend in result["data"] as! [[String:AnyObject]] {
                let id = friend["id"] as! String
                facebookFriends.append(id)
            }

            group.leave()
            print("Step 2 Done")

            // User POST Request
            var dictionary = self.fetchedUser?.dictionaryWithValues(forKeys: ["provider", "provider_id", "first_name", "last_name", "email", "avatar", "birthday", "gender"])

            if facebookFriends.count > 0 {
                dictionary?["friends"] = facebookFriends
            }

            let data = NSMutableDictionary()
            data.setValuesForKeys(dictionary!)

            //let semaphore = DispatchSemaphore(value: 2)
            group.enter()
            print("Starting Step 3")

            do {
                // Here "jsonData" is the dictionary encoded in JSON data
                let jsonData = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)

                // Here "decoded" is of type `Any`, decoded from JSON data
                let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])

                // Final dict
                if let dictFromJSON = decoded as? [String:String] {

                    let endpoint = "http://endpoint.com/user"
                    let url = URL(string: endpoint)
                    let session = URLSession.shared
                    var request = URLRequest(url: url!)

                    request.httpMethod = "POST"
                    request.httpBody = try JSONSerialization.data(withJSONObject: dictFromJSON, options: [])
                    request.addValue("application/json", forHTTPHeaderField: "Accept")
                    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
                    session.dataTask(with: request, completionHandler: { (data, response, error) -> Void in

                        if error != nil {
                            //semaphore.signal()
                            group.leave()
                            print(error)
                            return
                        }

                        do {
                            // Save response
                            let json = try(JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String: AnyObject])

                            if let userID = json?["user_id"] {
                                user.user_id = userID as? Int
                                self.fetchedUser!.setValue(userID, forKey: "user_id")
                            }

                            if let friends = json?["friends"] , !(friends is NSNull){
                                user.friends = friends as? [String]
                                self.fetchedUser!.setValue(friends, forKey: "friends")
                            }

                            group.leave()
                            //semaphore.signal()

                        } catch let jsonError {
                            print(jsonError)
                            return
                        }

                    }).resume()

                }
            } catch {
                print(error.localizedDescription)
            }

            // Wait to async task to finish before moving on
            //_ = semaphore.wait(timeout: DispatchTime.distantFuture)
            print("Step 3 Done")
        }
    }
}

A: Move the code after each closure inside the closure itself so that it waits until the code before it before running:
// Facebook Profile Request
func fetchProfile() {

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
    let user = appDelegate.user
    var facebookFriends = [String?]()

    do {
        let results = try managedContext?.fetch(fetchRequest)
        fetchedUser = results![0] as? NSManagedObject
    }
    catch {
        print("Error fetching User entity")
        return
    }

    let group = DispatchGroup()
    print("Starting Step 1")
    group.enter()

    // Facebook Profile
    let parameters = ["fields": "id, email, first_name, last_name, picture.width(500).height(500), birthday, gender"]
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).start { (connection, result, error) -> Void in

        if error != nil {
            print(error)
            return
        }

        let result = result as? NSDictionary

        if let providerID = result?["id"] as? String {
            user.provider_id = providerID
            self.fetchedUser!.setValue(providerID, forKey: "provider_id")
        }

        if let firstName = result?["first_name"] as? String {
            user.first_name = firstName
            self.fetchedUser!.setValue(firstName, forKey: "first_name")
        }

        if let lastName = result?["last_name"] as? String {
            user.last_name = lastName
            self.fetchedUser!.setValue(lastName, forKey: "last_name")
        }

        if let email = result?["email"] as? String {
            user.email = email
            self.fetchedUser!.setValue(email, forKey: "email")
        }

        if let picture = result?["picture"] as? NSDictionary, let data = picture["data"] as? NSDictionary, let url = data["url"] as? String {
            user.avatar = url
            self.fetchedUser!.setValue(url, forKey: "avatar")
        }

        if let birthday = result?["birthday"] as? String {
            user.birthday = birthday
            self.fetchedUser!.setValue(sqlDate, forKey: "birthday")
        }

        if var gender = result?["gender"] as? String {
            user.gender = gender
            self.fetchedUser!.setValue(gender, forKey: "gender")
        }

        group.leave()
        print("Step 1 Done")

        group.enter()
        print("Starting Step 2")

        // Facebook Friends Request
        FBSDKGraphRequest(graphPath: "me/friends", parameters: ["fields": "id, first_name, last_name, picture"]).start { (connection, result, error) -> Void in

            if error != nil {
                print(error)
                return
            }

            let result = result as! [String:AnyObject]

            for friend in result["data"] as! [[String:AnyObject]] {
                let id = friend["id"] as! String
                facebookFriends.append(id)
            }

            group.leave()
            print("Step 2 Done")

            // User POST Request
            var dictionary = self.fetchedUser?.dictionaryWithValues(forKeys: ["provider", "provider_id", "first_name", "last_name", "email", "avatar", "birthday", "gender"])

            if facebookFriends.count > 0 {
                dictionary?["friends"] = facebookFriends
            }

            let data = NSMutableDictionary()
            data.setValuesForKeys(dictionary!)

            //let semaphore = DispatchSemaphore(value: 2)
            group.enter()
            print("Starting Step 3")

            do {
                // Here "jsonData" is the dictionary encoded in JSON data
                let jsonData = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)

                // Here "decoded" is of type `Any`, decoded from JSON data
                let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])

                // Final dict
                if let dictFromJSON = decoded as? [String:String] {

                    let endpoint = "http://endpoint.com/user"
                    let url = URL(string: endpoint)
                    let session = URLSession.shared
                    var request = URLRequest(url: url!)

                    request.httpMethod = "POST"
                    request.httpBody = try JSONSerialization.data(withJSONObject: dictFromJSON, options: [])
                    request.addValue("application/json", forHTTPHeaderField: "Accept")
                    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
                    session.dataTask(with: request, completionHandler: { (data, response, error) -> Void in

                        if error != nil {
                            //semaphore.signal()
                            group.leave()
                            print(error)
                            return
                        }

                        do {
                            // Save response
                            let json = try(JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String: AnyObject])

                            if let userID = json?["user_id"] {
                                user.user_id = userID as? Int
                                self.fetchedUser!.setValue(userID, forKey: "user_id")
                            }

                            if let friends = json?["friends"] , !(friends is NSNull){
                                user.friends = friends as? [String]
                                self.fetchedUser!.setValue(friends, forKey: "friends")
                            }

                            group.leave()
                            //semaphore.signal()

                        } catch let jsonError {
                            print(jsonError)
                            return
                        }

                    }).resume()

                }
            } catch {
                print(error.localizedDescription)
            }

            // Wait to async task to finish before moving on
            //_ = semaphore.wait(timeout: DispatchTime.distantFuture)
            print("Step 3 Done")
        }
    }
}

Explanation: When you do asynchronous web requests, the closures are what's called escaping, which means they run after the function returns. For example, FBSDKGraphRequest.start takes an escaping closure, saves it, returns, and after it returns, runs the closure once the request finishes. This is intentional. Otherwise, it would be synchronous and block your code, which would cause your app to freeze (unless you use GCD to run the code asynchronously yourself).
TL;DR The closures are called after the function such as FBSDKGraphRequest.start returns, causing the next group to start before the one before it finishes. This can be fixed by placing them so that they run one after another.

redpajama_set_name: RedPajamaStackExchange


My children were quite obsessed with this art project.
"Painting" with colored sand captivated their attention for almost 3 straight hours.
And the work they produced was beautiful, interesting and smile-inducing.
A few months back, the kids and I had made colored sand bottles, where you layer colored sand on top of each other. And though it was a fun activity, once you've made the bottles and admired the pretty patterned layers there's not much to do with the bottles thereafter.
I brought out one of the colored sand bottles, glue, cardstock and trays to put the sand to a new use.
My daughter chose to use a brush to paint the glue onto the cardstock for more detailed and controlled painting, whereas my son did more abstract and free-form painting straight from the bottle. After painting a design with the glue, we placed the paper into the deep tray and sprinkled the colored sand over the glue, gently shaking the tray to make sure the sand covered all the glue. We then set the painting aside to dry.
Though my kids have their favorites, I placed the onces I found especially enchanting on m y kitchen windowsill.