Eddie Murphy's Coming to America 2 is scheduled to hit theaters in the summer of 2020. It's been 31 years since the original comedy debuted and fans have been waiting that long for a sequel to come around. Back in January, Murphy made the announcement that he was officially on board and that the sequel is finally moving forward after years of speculation. The comedian also announced that Netflix's Dolemite Is My Name director Craig Brewer has been chosen to direct the sequel.
When Eddie Murphy made the announcement, there was no release date revealed. However, Paramount Pictures has now given Coming to America 2 a release date of August 7th, 2020. The California Film Commission had previously awarded the studio a $13 million tax credit last April, but that was only if the movie was able to start within 180 days from the credit being offered. Obviously, that did not end up happening, but production will more than likely begin either this spring or summer to prepare for the summer 2020 release date.
While Eddie Murphy is attached, no other actors have been announced for Coming to America 2. When the comedian announced that he was coming on board to do the sequel, he released a statement talking about his excitement in "bringing all these classic and beloved characters back to the big screen." This has led to speculation that Arsenio Hall, Shari Headley, John Amos, and James Earl Jones will all end up reprising their roles from the 1988 original. Bringing back Hall has to happen. The story will reportedly revolve around Akeem, the pampered African prince who must return to America to find his long-lost son and true heir to the throne of Zamunda.
Former Black-ish showrunner Kenya Barris is currently rewriting the Coming to America 2 script, which was written by original writers Barry Blaustein and David Sheffield. Eddie Murphy is producing with Kevin Misher. Craig Brewer and Murphy just finished working together on Netflix's Dolemite Is My Name and the comedian is anxious to get to work with the director again. While no production start date has been revealed, we should start to get casting information within the next handful of months.
Coming to America is a 1980s comedy classic, one that will tough to follow, even 31 years later. With that being said, if the story details remain to be accurate, there's a whole lot that Akeem can experience coming into New York City in present day. A lot has changed in the world since 1988 and the character could be in for an even bigger culture shock than before. There's going to be a lot things for Eddie Murphy and crew to mock this time around, so it will be very interesting to see where the story decides to go. The Coming to America 2 release date news was first reported by Variety.
Do We Really Need Coming to America 2?


There is a need to make a crucial decision of whether to settle for new or used SUV. But, if your family is not contented with the decision to give them your old car, then you can follow this SUV guide to get them a new one. Below are some of the tips that you ought to consider when selecting a good SUV car for your family.
Checking your profile is the first aspect that you ought to consider when selecting a good profile. This can start as small as defining our needs as well as the capacity of the car that you would like to purchase. Your current location, the daily routine for your family or where you would like to go are some of the aspects that you must consider here before you finally buy the car. For instance, a single driver who intendeds to commute through perfidious and whether will require an energy efficient SUV car. The SUV car should have sufficient energy that can enable you get out of a ditch. The SUV car that you want to purchase must be able to meet your daily needs to work as well as enable you to take your family for a family outing. SUV cars can come in wide options, inclusive of the high-end customers who may be out for fun and luxury. Some of the things that give luxury SUV car a cutting edge in the market include expensive interior leather seats and an high-tech sound system. This information will therefore help you in finding the best SUV car that suits the needs of your family.
The second factor to consider when you want to buy a good SUV car for your family is cost estimates. You are supposed to make sure that the type of SUV car that you would like to purchase for your family matches with your financial capability. Quite a number of people face some challenges when it comes to financing their cars. Hence, you are supposed to reconsider your financing options before you get in the market for a SUV car. Proper financing is very crucial if you don't want to drag your family into lease issues and other debts. It is important to agree with your family on whether you can sell the old car for purposes of securing a new one. There is also quick financing for your used car. The new SUV's fuel consumption should be made in relation to your family's monthly income. Furthermore, you should not be afraid to bargain for a better price for your dream SUV car that you want to shop now for.


Shauna Keogh is about to embark on a very exciting chapter of her career, with the creation of her very own fashion label - '5428'.
The inspiration behind the name comes from 5428 standing for 'LGBT' numerically on your keypad.
Before going global (and on ASOS), the 5428 range will be available to buy exclusively in Street 66 in Dublin's Temple Bar and online at 5428apparel.com.
"Gay Pride had come around and its an amazingly brilliant time, but its heavily branded with rainbows. And as much fun as the colours are, its not reflective of me on a daily basis. So I decided to create a t-shirt line that we could wear with a subtle message, that you don't have to be gay to wear it. Its for everyone!"
Before her fashion label Shauna achieved Emmy-nominated success with the series Too Fat For Fifteen.
Her career allowed her to work on incredible shows like Teenage Vampires and The Real 40 Year Old Virgin.
She even lived with Katie Price and Peter Andre for three years in the height of their 'I'm A Celebrity' fame!


Although it might not appear so, cold winters in Lancaster present a higher risk of flooding.
Although it might not appear so, cold winters in Lancaster present a higher risk of flooding. Various reasons contribute to this added danger. If snow piles up around the property, it can release a considerable amount of water around the property some of which might flood the property when it starts to melt. Frozen plumbing systems such as gardening hoses might also fail, releasing copious amounts of water into the property. Our professional restoration services can help remove the excess water and mitigate other issues that arise when a property floods.
It is possible to minimize chances of flood damage in Lancaster by taking some precautions before winter. Making some landscaping changes around the property can help ensure water flows away from the property when the snow melts. By minimizing the amount of water around the house, you can avert flooding. Our SERVPRO technicians can inspect your property to establish how best to do such landscaping changes.
Winterizing plumbing systems if the property remains vacant during winter can help protect it from flooding because of burst pipes. In most cases, the process involves draining water from the pipes and adding antifreeze. Our SERVPRO team can inspect your property to establish where such measures are necessary. We also help you determine how much antifreeze is necessary and the non-toxic options meant for plumbing systems.
Even the best preparation effort is not a guarantee against flooding, so it helps to have a plan that ensures any water intrusion is dealt with as soon as possible. Having the emergency of contacts of a reliable restoration service such as SERVPRO ensures that mitigation services start within a few hours after the intrusion happens. We have the necessary tools to deal with different levels of water loss. For example, our truck mounted water extractors can lift up to 198.98 inches of water.
With some preparation and professional assistance, it is easier to manage flood damages. Call SERVPRO of Fitchburg-Leominster at (978) 537-1500.
Failure to find these weak points can lead to situations where you require professional restoration like SERVPRO to handle flood damages to your home.
Annual inspections of your Lancaster home can help you prevent much of the catastrophic damages it can sustain through the barrage of severe weather expected in nearly all of the seasons throughout the year. Unfortunately, this is one of the many things that homeowners in the area neglect to do, allowing their houses and families to become adversely and substantially affected by the storms yet to come.
There are many things that a home inspection can clue you in on, helping you to find vulnerable areas of your home's construction and repair them before it turns into a much larger problem. Failure to find these weak points can lead to situations where you require professional restoration like SERVPRO to handle flood damages to your Lancaster residence.
One of the focal points of inspection is the basement and foundation of your home. These areas tend to get affected by both moisture and running water underground, as well as fail when threatened by surface floodwaters, so having this blockwork is critical to preventing a later flood. SERVPRO professionals can repair small breaks and vulnerable areas with hydraulic cement upon discovery.
Another area that requires inspection on an annual basis is the siding and roof of your home. While these might not be areas of expertise for our technicians, having this assessment performed is essential all the same. This process can help you to determine if any damage has already occurred to these vital components of your exterior, and give you the opportunity to fix them before the situation becomes dire.
Any of these points of entry can allow high volumes of water into your home unabated. The subsequent damages can leave you with much irreparable damage and often a long-spanning restoration project to bring your property back to its original condition.
This understanding is why regular inspections of the stability and structural integrity of your home are so vital. If you already have flood damages affecting your home, or want to know a little more about inspections to help prevent disasters from striking your house, give our SERVPRO of Fitchburg-Leominster technicians a call today at (978) 537-1500.
When a severe storm damage hits your Fitchburg home, it is best to hire SERVPRO of Fitchburg-Leominster.
Storm damage is more commonly associated with Florida than it is Fitchburg when it comes to the average person. However, the general area of New England suffers storm damage as well; Nor'easters bring heavy rain, high winds, and they can even sometimes bring intense snow. When these storms occur, it is essential to call SERVPRO to the scene as soon as possible instead of trying to handle the water damage left behind by yourself.
Measuring moisture levels, removing excessive pools of still water, and drying out the structure of your home takes advanced and specialized equipment. The tools that this job requires, including moisture meters, extractors, pumps, air movers, dehumidifiers, and axial fans, are pricey and should be industrial-grade to get the job done right. Our storm damage professionals have been trained to use the equipment properly so that there is no damage done to your home during the remediation with the equipment.
One of the advantages of hiring a SERVPRO is that you do not have to worry about buying equipment or trying to find accurate DIY tutorials online. When you trust someone else who has been trained to do the job right, you can focus on the other important aspect of your life.
It is also vital to note that leaving water damage for extended periods of time is incredibly dangerous for the longevity of your home. Water can cause mold damage, rot, and rust inside your residence. In as little as three days of exposure, the materials inside of your home as in danger of mold growth. When an intense storm hits your city, it is best to call the experts at SERVPRO as soon as possible should you find damage inside of your residence.
When a severe storm damage hits your Fitchburg home, it is best to hire SERVPRO of Fitchburg-Leominster. Do not hesitate and allow the water to cause more damage to your property over time. If a storm damages your home, you need to contact our experts at (978) 537-1500.
Click here for more about Fitchburg.
How Does A Fast Call To SERVPRO Help With Flood Damage In Sterling?
One of the worst disasters that can befall a home in Sterling is flood damage, which can occur after any significant storm passing through the area.
One of the worst disasters that can befall a home in Sterling is flood damage, which can occur after any significant storm passing through the area. While some floods require professional water removal and damage restoration teams to clean up, it may be less evident whether or not you need help for lighter flooding. Failing to call in a professional, certified cleanup company like SERVPRO opens your home up to a range of risks and additional types of damage that can become far more severe with time. Be sure to call SERVPRO as soon as possible after a disaster to avoid many of these consequences.
Flood damage to homes in Sterling can cause irreparable destruction to the foundation and structural elements of the building, potentially tearing the place apart from the core if left unattended. Water can seep into cracks that may be so small as to be invisible to the naked eye, slowly gnawing away at materials and causing physical damage through expansion and contraction due to heat. If the flooding happens during the colder months of the year, the water may even freeze and accelerate the process.
Without fast and thorough water extraction, your home may become vulnerable to mold growth. In addition to causing permanent visual marring and giving the air a foul odor, some types of mold may also cause health effects with prolonged exposure. SERVPRO provides professional and safe mold remediation services alongside our regular flood damage procedures to ensure a smooth and stress-free process even if mold does find its way into your home.
Carpeting, drapes, furniture, and other types of fabric in your home may be much easier to salvage if you can get SERVPRO to the door quickly after a flood. Without fast action, some fabrics may begin to break down and deteriorate, forcing us to replace them rather than attempt restorations.
SERVPRO of Fitchburg-Leominster acts fast after every local disaster to provide emergency damage mitigation and restoration services to homeowners in the area. Call us 24/7 at (978) 537-1500.
Flooding can affect many homes in your area simultaneously. Contact SERVPRO to quickly come out and dry out your property.
Intense storms of significant magnitude can cause flood damage to your home swiftly. There are many ways the water can penetrate your Lancaster residence depending on the severity of the storm. Debris can break a window, or strong winds could blast a door wide open, for example. The water can get into your home swiftly, but water from storm floods is not always clean. Luckily, help is close at hand to assist with the clean up after the flood.
Storm floods in Lancaster can often carry a variety of debris and contaminants into your home. In a matter of moments, things like pesticides, petroleum products, and sewage can find its way in, and that water can damage your belongings. Not to mention it is unsafe to be in contact with the unclean water, which we classify as black water.
Skilled SERVPRO technicians can get to your house as soon as possible after your call to help with the water removal, clean up, and drying after the flood. Once we remove all of the water, we can determine what is salvageable and what is not. Unfortunately, when black water contaminates your carpets and rugs, they must be thrown away as they are unsafe to keep in your home.
At SERVPRO, we understand that you can lose some belongings to the black water and that it can be frustrating. As a result, our technicians can help you create an inventory of what you lost during the flood. Afterward, we can assist you in creating an insurance claim so that you may replace any lost belongings. After helping you with the claim, we can begin to clean up and dry out your home.
When flooding brings black water, and it damages your home, do not wait. Day or night, call SERVPRO of the Fitchburg-Leominster area at (978) 537-1500. We can get our technicians to your home swiftly to return it to its pre-flood state as soon as possible.
If heavy storms flood your home, call on SERVPRO to remediate the damage safely and quickly, we are here to help.
Heavy rainstorms can wreak havoc on your Lancaster property. When the water comes down too fast, and in too high an amount, it can quickly cause flooding, including flash floods. A situation like this leaves your home vulnerable to the rushing waters and can create a flooding issue inside your structure.
When the floodwaters have entered into your Lancaster home and left behind flood damage, it is not a pretty sight. It is overwhelming as well, and you may not know where to begin. However, SERVPRO does, and we can bring in our expertise and all the tools needed to extract the water and dry your home and possessions back out.
After we assess the damage and make a plan of action for restoring your damaged property, we can get to work. There is just one more thing that we need to think about first, though, which is the safety of you and our workers.
Floodwater can be quite nasty. Standing water leaves behind residues of biological and chemical contaminants which range from pests to cleaning chemicals, to pet waste. We treat the environment as hazardous because it is. We have you and your family remain out of the home while we are working. We also always use protective equipment and clothing to keep ourselves safe while we work and then make sure to clean our equipment and tools once the repair work is done.
Standing water can also degrade your home's structural integrity. Water is a solvent, so it breaks down all kinds of building materials. We are cautious on staircases and while working in your home after severe flood damage. Flooring and ceilings can be weakened as well if there is trapped water in them, so we test for this. If needed, small weep holes are made in the ceiling where water is trapped so it can drain out.
SERVPRO of Fitchburg-Leominster is acutely aware of the dangers of a flood-damaged home, and how to work safely while restoring your home in Lancaster, Devens, or Still River. Reach out to us right away at (978) 537-1500 when your home experiences flooding so we can get there quickly to minimize the damages.
Click here for more on the city of Lancaster.
A flood occurring on your Harvard area property can contain multiple safety and biological hazards, making the use of the proper signs, PPE, and containment procedures necessary while working. The company you choose for your restoration must be willing to follow specific guidelines to protect everyone involved and maintain a safe, secure, job site.
Recovering from flood damage to your Harvard home is a complicated, lengthy process. One best performed by IICRC certified professionals who understand what to look for and which tools to use to get things under control the first time. Never attempt to enter your flooded property without a qualified professional, you can expose yourself to contaminants, or cause significant damage that might have been avoidable.
At SERVPRO, it is our job to evaluate your property, eliminate hazards that may exist, while evaluating whether the contents, structure, and other items found on your property remain salvageable. We come up with a solid plan of action so that you understand what is happening in your home and which steps we intend to take to rectify the situation.
There are two different types of floods that can occur on your property, clean water or contaminated water, SERVPRO technicians handle each situation differently. During clean-water situations, it is crucial to get the water out and begin the drying process as quickly and efficiently as possible. While the same is also true for contaminated-water situations, some areas of your home can remain inaccessible at least until a technician performs various procedures to reduce the exposure and spread of any contaminants. Typically, black water intrusion is the result of some type of storm system.
Personal protective equipment-PPE- assists SERVPRO technicians with containing germs, allergens, and other infectious contaminants found on your property. Under most circumstances, gloves, boots, protective clothing, goggles, and respirators keep a technician safe during the initial inspection, or throughout the restoration process, which is determined by their findings.
Regarding more information for this town click here.
If your home experiences storm damage, call SERVPRO to remediate.
Our state has had a relatively quiet year for storms so far, but fall weather is on the way. As we have seen recently, a powerful storm can turn a quiet town or city into a total disaster area in just 24 hours. Restoring and repairing a home quickly once the water stops require a professional service.
Putting a Sterling home back together after flood damage is not a quick process. After decades in the business, SERVPRO has learned that the best method is to ensure that the home is free from moisture. Providing a safe, dry environment is always more important than being quick and careless.
Our technicians start with removing standing water. For any amount over two inches in depth, we bring in portable pumps to empty out the home. For water under two inches or after the pumps have done their job, we use extraction wands. These vacuum-like devices are designed to lift water from carpets and between floorboards without harming them.
Next, we remove property from the affected rooms. We do this to reduce the chance of damaging the items as we clean and to prevent fabric color and furniture finishes from staining carpets and floors. In some cases, we may remove certain items from flooded rooms before pumping or extraction if they hamper water removal efforts. Once removed, we have an inspector examine furniture and other personal property to recommend restoration or replacement.
At the same time, we examine the carpets and floors. Pumps and extraction wands remove moisture but do not dry everything completely. If left untreated, damp carpets begin to rot and floors with moisture still underneath the boards warp and twist in just a few days. If there is a pad underneath the rug, we remove and replace it. It is cheaper to replace them than attempting to dry and reattach them to the floor.
We use air movers, fans and space heaters to dry them and prevent secondary damage. The same actions we take to dry carpets and floors also reduces the chance for mold to expand and grow. At the same time, we set-up dehumidifiers to draw water from the air and lower the overall humidity (air moisture content) of the home. Lowering this also supports the other efforts to safely dry structural property like wall framing, sheetrock, and wood or plywood panels.
As a locally-owned franchise, SERVPRO of Fitchburg-Leominster understands that each job site is not just a structure, but the home of one of our neighbors. We are here to help you return to a safe, dry home, so if you need us or just have a question, call us today at (978) 537-1500.
To learn more about Sterling, click here.
Storms in the New England area can be very destructive, and over time, the wear and tear can bring about additional problems for homes that are more weather-beaten than they appear. Many building materials can give a false sense of security because they seem fine until they disintegrate or breakdown when you need them most.
The roof of a house is intended to protect the inside of the home, but when an opening erupts because of missing shingles or a physical break, flood damage in Leominster can gravely affect the home's interior. Torrential downpours can produce gallons of water that, when trapped by your exterior walls and floor, accumulate much quicker than you might have expected. When rain falls outside, it rushes away, with little or nothing to stop its flow. However, when rain falls inside your home, it quickly rises instead of channeling away from your building.
Although this kind of flooding might not carry the pathogenic load that a flood from the terrain can carry and bring into your home, contamination from stored items inside your attic is likely to occur. Also, any droppings deposited by animal pests in crawl spaces can contaminate the water invading your home's living spaces below. Training at SERVPRO includes decontamination of such catastrophes, which is needed to make a home's surroundings safe again for people.
One aspect about flooding in this manner that can make things worse is that the water came from overhead, much like a bathtub overflowing on an upper story. The walls are saturated, electrical hazards skyrocket, and the floor/ceiling in larger rooms can become extremely weak and unsafe due to saturation. We can provide the remedy for these and other situational problems, ensuring that your family home is made safe again structurally.
Flooding, no matter the source or direction from which the water comes from can result in many different types of problems. Each one must be addressed and resolved, and the sooner restorative work begins, the less time the damage has to spread and worsen. Because We're Faster To Any Size Disaster, we can help minimize any damage your home and belongings suffer.
From the external structure of your roof, all the way to the floor, we can get flood damage mitigated quickly. Then we can sanitize everything in your home, including your child's favorite toys, clean, dry, and safe once again. Call SERVPRO of Fitchburg-Leominster at (978) 537-1500 to make this happen for your family when flood damage threatens to take your home and turn it into a watery mess.
Click here for more info on this city.
5/17/2018 - How Does A Fast Call To SERVPRO Help With Flood Damage In Sterling?


The Seasalt St Gluvias sweatshirt is a beautifully soft striped jacquard design, emphasised by a lightly textured feel which gives it a soft glow of colour. Finished with a patch pocket, the sweatshirt boasts a crew neck and long sleeves, with button detail on the shoulder adding a nautical twist.
https://www.houseofbruar.com/st-gluvias-sweatshirt/ TN41036TREGURROWDARKHAY Ladies Seasalt St Gluvias Sweatshirt /images/products/medium/TN41036TREGURROWDARKHAY.jpg 49.95 GBP ladies/knitwear/cotton/ The Seasalt St Gluvias sweatshirt is a beautifully soft striped jacquard design, emphasised by a lightly textured feel which gives it a soft glow of colour. Finished with a patch pocket, the sweatshirt boasts a crew neck and long sleeves, with button detail on the shoulder adding a nautical twist.


The secret locked up in these verses is what unleashed the early church, allowing them to reach so many in such a short amount of time. This chapter is regarded by scholars as the chapter that became the plan used when entering new territory and expanding God's kingdom.
The secret was rediscovered just a few years ago by a missionary church planter. He had been successful and planted many churches in different parts of the world, so it was decided that they send him to Buddha's home town where a church had never been planted. For a few years he gave it all he had with no success. Discouraged he contemplated giving up. But then he prayed, "Lord the answers are here in this Book. Show me what to do." For the next six months he did nothing but read the Bible. He came to Luke 10 and his eyes were opened to "the man of peace" concept.
What is a man or woman of peace? It is someone who has an ability to include and welcome others into their life. They have a natural ability to connect with others and bridge relationships. People are drawn to and feel accepted and welcomed around them.
Next, they have responsiveness to spiritual things. They are willing to talk about the Bible, God, and their own need for Him. Throughout the gospel accounts we are able to see these special people. Luke 10 records the first person of peace when Martha welcomes Jesus into her house. This opened up the village of Bethany! That's what these kinds of people do, they create greater and more opportunites for the greater! Another person of peace was Legion. As shocking as this is, the reality is that this demon possessed man responded and opened his heart to Christ. He later, as a believer, opened up the entire Decapolis area. We can also see that the Samaritan woman was another person who opened up a whole city. Later in Acts we see Cornelius, Lydia, the Philippian jailer, and Aquila and Priscilla…the list goes on!
My last insight into a person of peace is that they are those who encourage and build an environment of trust. People relax and settle in and are usually willing to share very intimately with them. They are trusted. This is a crucial quality. People do not open up and share real stories if they do not trust their audience. Take our Connect Groups, the "I will" statements or applications to personal lives will never be deep and transformational if the audience (in this case the small group) is not trusted. People will not be free to give or to unselfishly serve others if they do not trust the one encouraging them to get involved. Trust opens hearts and hands! Trust built within a group will also create the freedom to invite others to come as well! Trust is what creates opportunities for many kinds of new relationships and opportunities to share the Gospel.
How do we find these people of peace? Prayer is where we start! Pray for laborers and pray for persons of peace. They will be the ones who tend to have a lot of friends or influence in their community. They may be well liked or very important to the world they work in, like a baseball coach in the community, or snack shack mom, a boss at the local deli, or even the mailman, etc… They can use their influence to open or even to close opportunities. This is the secret of why Jesus said for us to find this person and work with them and through them! They can be seen to be used to open up the hardest to reach areas of the world.
This is what the missionary I spoke about earlier found out. He went on to plant thousands of house churches in the area where there had never been a church. The same idea has been used all over India, Ethiopia, Sierra Leone, and other nations with incredible success!
What will God do here through our wise use of this insight Jesus taught? May our prayers open our eyes to see these precious people and connect with them. And may they then come with you to church or join a Bible study, or join us in building strong and thriving connect groups which… is ultimately building… the kingdom of God!
Gen 1 teaches us that God commanded the original couple to be fruitful and multiply. This desire of God is that His gift of life is expressed and continued by the process of multiplication. This command and process, this vision and desire of God, will take more than one person to fulfill. Once again we see the genius of God. We must work and connect with others effectively if there is ever to be a new generation of believers and leaders. We cannot do this alone!
Look at verse 2 closely. Paul writes to Timothy that there is generation one developing generation two. Timothy was to pass on what Paul gave to him to "faithful men", resulting in… generation three! The third generation was to pass it on to "others" who would be generation four. In one verse, 4 generations!
It is not enough to train one person and stop there. We must see that person train another who in turn trains another. The cycle must continue from one generation all the way past the fourth generation by our careful looking after it! This process does not just happen! It must be very intentional and deliberate. Paul gave illustrations of a teacher, a soldier, a farmer, and an athlete. All four of these illustrations show us the strategy involved in success. The teacher plans ahead what will be taught and how they will develop their students. The soldier focuses on the battle and knowing the orders and obeying His superiors. He knows he must be available and willing to go where it may be dangerous. War is very strategic and deliberate. So is farming. What we plant, when we plant, and where we plant is part of what we do as a farmer. The athlete is extremely strategic if he plans on winning.
What will the future be if the soldier does not think ahead? Or the teacher, or the farmer, and the athlete? Will there be a future? What about the future of God's kingdom if we are not thinking ahead?
Pause right now and see who there is in your life who needs you to develop them and encourage them to think like this in their walk with God. Every person we train must be encouraged and trained to pass on their training to another. Every group must have in their plans the desire and goal to also start another group. Every leader we develop must develop other leaders. And it doesn't just stop here in our local body… we need to think about multiplying new churches as well!
I get very excited when I consider this, for it breaths into our hearts a future and a hope for the world. If there are no new followers of Christ, then there is no hope for the future. We will all die and that will be the end of the matter. And so it is the same for us if we do not multiply new leaders, new groups, and especially…new churches! If we will multiply, just as the early Christians did, there is hope, real wonderful hope for our city, and our world!
Prayer is vital to our success. I encourage you to take today to pray and plan where you will start multiplying. If you do not know where to start, I encourage you to talk to an elder, a Connect Group leader or myself and we will help you make this a reality.
Pray this week about the future of your family, our church…our city! Pray for a multiplication movement!!
We are told in the Bible to "grow in knowledge and grace" (2 Pet 3:18). This is God's desire for our lives. The knowledge opens up our minds and heart so that we are able to receive His grace and therefore live a lavish and generous life. Reflect on how generous Jesus was. How many people did He teach and help? The answer to that question comes to so many, that the authors of the Gospels said, "He did so many things that there would not be enough space to write about it even if we filled the world with books about it". He was extremely generous as a Man! This shows us that our obedience will lead us into a resource of unimaginable power and life!
Our personal obedience is what opens up a whole new world. It unleashes God's power! It reveals to us God's wisdom! It deepens our faith! It strengthens our will and fortifies our determination! The more we obey the more we want to obey. Once we start to do God's will, we begin to know the reality that it is God's will that we are doing!
As you hear a message on Sunday morning, think to yourself, "How am I going to apply this to my life?" This type of thinking is a skill of our listening. How can we develop this skill? Take a common verse such as the one that says, "to seek first the Kingdom of God". How can we seek first God's kingdom if we do not make it a priority? For example, we begin expressing this priority by giving Him the first of our week… by being a part of the corporate worship time. Make it a priority by being on time! Do not be late! i.e. seek His kingdom first. Give Him the first hour of your day! Let it be the best hour that you use to seek Him and worship Him privately. Remember that something that is a priority is shown through our giving the first of what we earn not the leftovers! These are just a few applications to a very common verse.
Ponder John 13-14 and what it says about our obedience to His word and will. 13:17 says we will be "blessed" or fulfilled and full of joyful happiness (that is the meaning of makarios). 13:34-35 says we will love others and prove to our world that Jesus is real and the movement of Christ is worth taking seriously. 14:12-14 says we will do greater works than Jesus and see answers to prayers revealing the power of God and His activity in our lives. 14:23 is deep and reveals God will make His presence very real and powerful in our lives. Read this section and see what is says about the importance of obedience. Jesus succeeded for one reason; He did what the Father said!
Dedicate yourself today to being a person who applies what you learn within 48 hours of learning it. Why 48 hours? Research shows we are far more apt to do what we learn if we practice it within 48 hours and far less likely to remember or apply the truth after 48 hours.


I'm a little late for this giveaway, but better late than never, right?? I hit 1000 readers on my blog recently and want to show my thanks. I've purchased all of these, they are all brand new...just waiting for this day! With the exception of Sunny's Miracle Balm, which she sweetly donated. That is also brand new of course.
In the event my first winner drawn is in the U.S. that person will win all the goodies.
If the first winner is outside of legal boundaries for mailing nail polish, they will win the Miracle Balm and second winner will be drawn for the nail polishes.
Thank you for letting me know!! I wasn't sure if I got it right. There is a button on my blog page, you can follow bloglovin that way and I will work on getting the link on the rafflecopter correct.
You can just copy & paste the link!
Thanks, Victoria :) Great giveaway!!
Thank you for the chance! Amazing prizes!
This is epic! Good luck everyone!
Where do you get your bloglovin number from?
Those are so cute ...good luck everyone!
Hey Victoria, thanx for the awesome giveaway!
However I understand that us, overseas followers, will not be able to win the polishes, but only the Sunny's Miracle Balm, am I right?
I love your blog! I get it by email in addition to follow the other ways. I want to compliment you. Your nails are always impeccable. The perfect length and shape. I only wish my cuticles were that perfect. I have thyroid disease and no matter how much balm and solar oil I pile on them they still peel and get ragged. And you are a great nail artist. I am trying to learn to stamp. I ordered some large plates from Born pretty and they are too small and terrible. I am going to order some MASH or CHEEKY when money allows. And I have to work on my speed. I have always wanted to write you and tell you how much I enjoy your blog!!!! congrats!!!
Thank you SO much. It means a lot to me to hear from you like this!! Makes me even happier that I am doing this :) Sorry to hear about your health troubles and cuticle troubles :/ I have always been lucky in that regard. xoxo Take care!
I have thyroid probs too! You should look into gloves and sleep with vaseline on your cuticles.
Hi Amy, on the right column of my blog's home page you will see "follow with google friend connect". That is the gfc. Hope that helps.
Amy, It says Join this site with google friend connect. It's the one under bloglovin.
I'm sorry but its not there on my screen!! I recommended it on google and tried to find your page on google+, is that the same thing? I don't why I can't see it!! It's just blank under the bloglovin, which I downloaded too just in case!
I am having a problem wth the GFC as well! I am sure I already follow via GFC but no matter what I do you don't have a link!
So sorry! That is really frustrating to hear. Wonder if it's the browser you are using? If there is anyone who has any help, bloggers who this has happened to, feel free to offer advice. I'm not sure what I can do, if anything, about it!
google friend connect. It's one of the main ways to "follow" blogs that you like.


text:
Summer Fun and Games Are Here on ABC!
By Jim Donnelly | Jun 13th, 2019
Building on the previous success of the "Summer Fun & Games" brand, ABC is expanding its slate of game shows to three nights, adding four new exciting series to the schedule. In addition to bringing back the iconic "Press Your Luck" and "Card Sharks" to TV, ABC has two new alternative shows – "Holey Moley," an epic mini-golf competition featuring NBA superstar Stephen Curry as resident golf pro; and "Family Food Fight," hosted by renowned restaurateur and New York Times best-selling cookbook author Ayesha Curry. Get see a schedule of all the fun and games below and be sure to watch on the ABC app from your smartphone and tablet (iOS and Android), computer on ABC.com and connected devices (Roku, AppleTV and Amazon Fire TV).
Catch Chrissy Teigen on the Celebrity Family Feud Season Premiere!
8:00-9:00 p.m. "Celebrity Family Feud"
WATCH THE SEASON PREMIERE HERE
9:00-10:00 p.m. "The $100,000 Pyramid"
10:00-11:00 p.m. "To Tell the Truth"
8:00-9:00 p.m. "Press Your Luck"
WATCH THE SERIES PREMIERE HERE
9:00-10:00 p.m. "Card Sharks"
10:00-11:00 p.m. "Match Game"
8:00-9:00 p.m. "Holey Moley"
WATCH THE SERIES PREMIERE
SEE STEPHEN CURRY TAKE ON ROB RIGGLE'S ROBOT
9:00-10:00 p.m. "Family Food Fight"
News Best ABC Shows to Binge Watch This Summer!
News The WE Day Special Airs Friday, August 9 on ABC!
News Watch "Same Time, Next Christmas" starring Lea Michele This December on ABC!
ABC Updates has been added to My List.

redpajama_set_name: RedPajamaCommonCrawl


text:
Tags: Text Analytics
Attivio Platform 5.6.2 Available Today
By Dorit Zilbershot, Chief Product Officer, September 10, 2019
AI Powered Search
We're pleased to announce the release of 5.6.2 of the Attivio platform. There are several new features we think you'll be excited about!
Monthly Release Cadence
Before we talk about new features, I'm happy to announce that we're moving to a monthly release cadence. Starting with 5.6.2, we will release a new version of 5.6 every second Thursday of the month.
Text Analytics: Entity Extraction and Resolution
By Jane Zupan, August 22, 2017
Entity extraction is a core capability of text analytics, so I thought I'd step through an example of how it works.
Note: Learn about the all the different text analytics capabilities in my last post Text Analytics: A Spectrum of Enrichment Techniques.
Consider the following text that talks about Apple and Berkshire Hathaway. Entity extraction lets you pick out the entities in the text (companies, persons, locations) and then help you understand how they are related to other.
Text Analytics: A Spectrum of Enrichment Techniques
For cognitive search to work, you need text analytics, which is why it's a key component of the Attivio Cognitive Search Platform. There is a range of capabilities within text analytics to understand, so I thought I'd take you through them and explain how they work.
From Directed to Discovery
Text analytics is the process of extracting valuable information from text-based content - or unstructured content - for business purposes. It seems simple, but it's far from it.
Make Sure Your Preventive Maintenance Solution Includes Text Analytics
By Jane Zupan, August 8, 2017
These days, there's pretty much a trade show for everything — and predictive analytics is no exception. The most recent stateside edition of Predictive Analytics World™ took place in Chicago in June of this year. And predictive maintenance occupied a prominent place on the agenda. One presentation concerned failure and fault detection for Rolls Royce.
There was a time when predictive maintenance encompassed only the analysis of structured data. In 2013, a blogger on the data science website Simafore suggested four ways predictive analytics could improve equipment maintenance: trend analysis, pattern recognition, critical range and limits, and statistical process analysis. Conspicuously absent in the discussion of the tools, techniques, and data types that supported predictive analytics was unstructured information and text analytics.
Text Analytics in Cognitive Solutions
A recent study by IDC, Data Age 2025: The Evolution of Data to Life-Critical, projects that the amount of data subject to analysis will grow by a factor of 50 between now and 2025. Further, the amount of analyzed data affected by cognitive systems will grow by a factor of 100 to 1.4ZB (zettabytes).
For organizations of all sizes, cognitive systems will continue to expand their involvement in our daily business and personal lives. These systems rely heavily on machine learning, natural language processing, and text analytics.
By Jane Zupan, April 19, 2017
Remember the frustrations of key word search? If you need a refresher, just check out If Google Was a Guy. It's funny—in a way that makes you kind of squirm in your seat. Of course, in the early days of search engines, power searchers used Boolean query operators. We have George Boole, 18th-century English mathematician, to thank for that.
In fact, there are still Boolean purists out there who take Google, Bing and other modern search engines to task for no longer fully supporting Boolean queries. Nevertheless, natural language processing (NLP) evolved pretty much to relieve search users from the burden of having to memorize Boolean query operators and how to use them.
Two Benefits of Machine Learning in the Attivio Platform
By Brian Flynn, April 7, 2017
Some days, it seems that new machine learning applications are popping up everywhere you look in the news. In this author's opinion, the search market seems to have anointed machine learning as the new hotness. This is a fascinating realization, because anyone who has spent more than a couple years deploying search in the enterprise knows that machine learning has been used and applied in exciting and unique ways for years and years.
In my experience, clients tend to conflate what machine learning means when it comes to Enterprise Search. Of course, it's not their fault – machine learning is everywhere you look! But when Attivio says machine learning, we mean two things:
4 Big Data Predictions for 2017
By Jane Zupan, December 23, 2016
Big Data Search
If you've been following the Attivio blog, you'll know that we have not been shy about sharing our ideas on what we see in the Big Data market right now. But in this post, our CEO, Stephen Baker, shares our predictions for the industry in 2017.
Time will tell how accurate these predictions are, but these are the trends we see bubbling up as we talk to customers, analysts, and others in the ecosystem.
4 Hacks: Minimize Risk in Unstructured Communications
By Nate Soffio, October 28, 2016
As an Attivio Solutions Architect, I often work to help companies customize (a.k.a., hack) our Cognitive Search and Insight technology to meet their unique search demands. It's worth sharing some of the most common hacks in the risk space.
Hack #1: "I have tons of unstructured communications in my enterprise — isn't flagging all variations of a potentially risky situation time consuming and expensive?"
Forrester Wave Heralds the Future of Search
By Stephen Baker, CEO, September 25, 2015
How Enterprise Search and Big Data Find Common Purpose
Forrester's 2015 Wave on Search and Knowledge-based Discovery is out, offering a fresh perspective on the evolution of search-based applications. We are pleased that Forrester designated Attivio as a Leader in this category and that the evolution described suggests an important connection between next-generation search and the opportunities of Big Data.


Eden Hazard has rubbished reports that he has already agreed a deal with Real Madrid.
Spanish media claimed this week the Chelsea star would join the La Liga giants at the end of the season.
A fee of £98million was reported to be enough to prise him away from Stamford Bridge and he would earn £270,000 a week.
Hazard was asked about the rumours in a press conference ahead of Belgium's match with Cyprus.
The 28-year-old will make his 100th appearance for Belgium and he will receive a special cap in honour of reaching the landmark.
Hazard will receive a special cap when he makes his 100th international appearance for Belgium – but claims it will probably end up in his garage.
He will join other centurions Jan Vertonghen and Axel Witsel in receiving the commemorative cap.
"It would have been nicer to be playing in Belgium but the calendar determined otherwise," he said in Nicosia.


text:
Q: web::Payload::next() hangs when websocket connection is interrupted I write a websocket server without using Actix actors and struggle with weird hanging on web::Payload::next() when connection is aborted without sending close message from client. Here is a simplified example:
async fn handle_connection(
    req: HttpRequest,
    stream: web::Payload,
) -> ActixResult<HttpResponse> {
    let mut res = ws::handshake(req.head())?;
    let (tx, rx) =
        mpsc::channel::<Result<Bytes, ActixError>>(FRAME_BUFFER_CAPACITY);

    spawn_local(handle_frames(stream));

    res.message_body(BodyStream::new(rx).boxed())
        .map(HttpResponse::from)
        .map_err(ActixError::from)
}

async fn handle_frames(mut stream: web::Payload) -> Result<()> {
    while let Some(chunk) = stream.next().await { // Hangs here.
        ...
    }
}

How can I resolve this issue?

redpajama_set_name: RedPajamaStackExchange


› 2018 Calendars Are Available!
WOW!!! Got My calendar already. Freakin awesome! But then I might be a bit bias as there are a couple of pics of my car.
Even if YOUR car didn't get selected this year, or you didn't submit pictures, I'm suggesting BUY IT ANYWAY. LuLu have done a great job and the quality is top-notch.
Thanks!! I am very pleased with them this year!
Thats great - Thanks on Rocketfoot.
I couldn't get the discount code LULU15 to work but the good news is that LULU30 worked for a 30% discount!!
Thanks for including my car in the calendar!
40% OFF extended through November 30th, 2017 at 11:59pm!!
Get 'em now guys...that is a good deal!!
(11-28-2017, 01:56 PM)rocketfoot Wrote: 40% OFF extended through November 30th, 2017 at 11:59pm!!
Damn! got mine too soon. Oh well, worth it anyway.
I know...I bought too early too, LOL! Oh well, they did turn out nice!!


While I was printing out the various components for the hybrid layouts based on Cathy Zielske's digi template, I had a quick look at some other digi layouts I'd created and as yet done nothing with. Some of them I plan to print out just as they are, probably at Costco, but some I could try the same technique of switching off the photo layer(s) to print the background (usually removing the title, too) and then printing the photo(s) to mount on top. I particularly like the look of this when the digi layout is A4 size, so I can then mount the whole thing onto 12x12 cardstock. And if I have removed the title before printing, Thickers are definitely the best way I know to put the title back onto the layout!
And then I turned my attention to the third layout in this post - the one I'd copied scraplifted copied from Amy. This one didn't have any photos and the title was fine as it was, so all I had to do was print it and add it to a sheet of 12x12!
hybrided? no. hybridized? yes. :) and I think you did a fab job hybridizing those digital layouts and getting them off the computer and into the physical world! I need to be doing a good deal of that myself!
Even though I've started to learn PSE for altering photos, I really haven't been pulled in the direction of digi-scrapping.
I'm another of those 'don't understand the lure of digital' people, despite my love of Polyvore. It all seems a little convoluted to me - and not as socialble!
I'm right there with you Mel - I'll always be a paper scrapper, but I've played around with the digi stuff. I'm actually creating month-in-review digi layouts this year and will have them printed when I have a batch of six or so.
I love your hybrid pages, Mel. I do like the photo collages that can be done digitally, but like you, I'm still a paper scrapper. Somehow the digital layouts I make never seem to make it off the computer.
Love how these have turned out,Mel...even though I'm another one that digi doesn't really appeal to....and I think what really makes them.....especially the coco-nuts one [which I love] are the thickers....they just give them that 3 dimensional feel.
I love the layouts! I find I have fun manipulating and trying different looks on a layout with digi but it really just doesn't give me the warm fuzzy feeling of paper.
I love Digi, well I love designing my own kits I suppose that is the real attraction for me. I do sometimes do hybrids too. but I haven't thought of doing them this way before.
Looks like you've been having a wee bit of fun! The pages look great!
these look great - I tried my hand at digital scrapping while travelling in South America to amuse myself during night time/down hours... but I just couldn't - I don't know - feel it, I guess would be the right words... For me I'm definitely a papers and sticking and stitching and inking, etc girl!


text:
Joanna Brown (born November 12, 1992) is a Canadian triathlete. Brown has been part of the Canadian national team since 2011.

Career
At the 2015 Pan American Games in Toronto, Brown finished in 13th position. Brown competed at the 2018 Commonwealth Games, and won the bronze medal in the individual race, the first medal for Canada at the games. She later finished fourth in the mixed relay.

In July 2021, Brown was named to Canada's 2020 Olympic team.

References

External links
ITU Bio

1992 births
Canadian female triathletes
Living people
Triathletes at the 2018 Commonwealth Games
Commonwealth Games competitors for Canada
Pan American Games competitors for Canada
Triathletes at the 2015 Pan American Games
Commonwealth Games bronze medallists for Canada
Triathletes at the 2020 Summer Olympics
Olympic triathletes of Canada
21st-century Canadian women
Medallists at the 2018 Commonwealth Games
Commonwealth Games medallists in triathlon

redpajama_set_name: RedPajamaWikipedia


We enjoyed a taste of the snowy mountains in Crater Lake but were itching to get back to the ocean. After a night stop over in Eugene, we made the drive to Newport, OR. A quintessential seaside town in Oregon split in half by Yaquina Bay with miles of ocean beach. And just off US 101 under the shadow of the somewhat famous Yaquina Bay Bridge, was our home for the stay – the Port of Newport RV park – an ideal base camp for exploring the area.
Next stop: Lincoln City, OR!


NEW CASTLE> Dennis 'Denny' Staples, 64, of Friday's Hill Rd., New Castle (Wayne Township), died unexpectedly on Thursday, July 29, 2010, in the Emergency Room of the Ellwood City Hospital.
Born December 1, 1945 in Ellwood City, he was the son of the late Carl and Margaret Gordan Staples. He was married for 44 years to Gayle Hogue Staples who survives.
Denny retired in 2009 from Penn DOT after 17 years of service. He also formerly worked at Russell Trucking and was a self employed owner of Timber Tree Service. A 1964 graduate of Lincoln High School, he was a member and trustee of the Harmony Baptist Church. Denny was an avid outdoorsman who enjoyed hunting and walking his dogs. He loved to tell stories and being around his family and friends.
In addition to his wife, Gayle, he is survived by a daughter, Sherry (Bob) Jones, and a son, Lenny Staples, both of New Castle, and six grandchildren, Cassie, Erica, Jenna and Cameron Staples, and Bobby and Dylan Jones.
He was preceded in death by a brother in infancy.
Visiting hours will be held from 3 to 5 and 7 to 9 p.m., Sunday, August 1, 2010, at the MARSHALL FUNERAL HOME, 200 Fountain Ave., Ellwood City. Friends will also be received at the funeral home from 10 a.m. until the time of the funeral service at 11 a.m. on Monday, August 2, 2010. Rev. James Hockenberry will officiate.
Interment will follow in the Pleasant Valley Cemetery in Princeton.
Memorial contributions may be made to Harmony Baptist Church.


text:
Scopula tenuimargo is a moth of the family Geometridae. It is found in the Democratic Republic of Congo.

References

Moths described in 1916
tenuimargo
Insects of the Democratic Republic of the Congo
Moths of Africa
Endemic fauna of the Democratic Republic of the Congo


Who has time for the Monday blues this week with this kicking line up of events on around Brisbane? There are movie nights, Monday drinks, plenty of markets, treats for your skin, and literally hundreds of garage sales! Get to it!
New Farm accessories haven, Thousand Island Dressing, have just launched their brand spankin' new online store, and, starting today, you can receive 20% off when you shop online until Sunday the 27th!
The cool cats at Cobbler used to be closed on Mondays, but now they own the night! Get in to Cobbler at West End for the best boilermakers, old fashioneds and Whiskey Sours money can buy. Speaking of money, they're only $12 each, plus, you know they're made with love! Did we mention it's BYO food?
Depo are getting in on the classic movie night action, and they're kicking off with a bang tonight by airing the timeless, Pulp Fiction. $15 will get you in the door, and a special treat. Plus there will be special deals on burgers, mayo fries, and boozy milkshakes!
We have been waiting for this one. James Street's newest hot spot is opening its doors tonight, and will be serving up lunch, dinner, and drinks to eager punters. Think share plates, cocktails, and crispy wood-fired pizza. We predict this one is going to be a neighbourhood fave, so get in early.
Today marks the event of Stokehouse Q's second birthday, when head chef and sommelier of Stokehouse Melbourne will be flying north to celebrate. The best meals from both the Melbourne and Brisbane restaurants will be selected and served in a six-course degustation, with perfectly matched wines (of course).
Spend a night with the champagne dame, Kyla Kirkpatrick, as she takes you on a visual journey through the rolling vineyards of Champagne. Learn about the grape varieties, proper etiquette, and sip some of the best bubbles in the world.
Endota's most loved treatment, the Endotarama is on special until the end of this month. If you're looking for some good skin karma, then this is for you! Does a billabong footbath, organic facial and massage sound good to you? Sign up for one this month and get an extra 30-minute massage, for FREE!
The Box Monthly is a collation of single works from contemporary artists, to be displayed together, as one creative body. This show always draws a good crowd, with live music on the night. We're particularly looking forward to seeing artwork from Tom Dalmau, Dominique Elliot, and Dan Ford.
This Brisbane City Council initiative is an absolute cracker. GQ (Lord Mayor Graham Quirk) has essentially created Garage Sale Day in Brisbane, and over 320 garages have signed up to sell their knick-knacks, kids toys, baggy jeans, and other treasures. Plus there is a map you can download that tells you exactly where all the sales are on in your area! Get out there kids!
Our friends at Teneriffe Bathhouse and Dayspa have this great Spring offer we thought you just had to know about. Treat yourself to a French body polish, shellac manicure, and microdermabrasion facial for only $199. That's saving you over $100! This offer ends 31st of October.
Da Burger is a brand new burger and beer joint opening up on Brunswick Street. Years of strenuous tasting, testing, and formulating the best burgers means Da Burger have nailed the all-important bun to meat ratio. They open up today and we can't wait to get down there and give them a whirl!


text:
/*
 Fraise version 3.7 - Based on Smultron by Peter Borg

 Current Maintainer (since 2016):
 Andreas Bentele: abentele.github@icloud.com (https://github.com/abentele/Fraise)

 Maintainer before macOS Sierra (2010-2016):
 Jean-François Moy: jeanfrancois.moy@gmail.com (http://github.com/jfmoy/Fraise)

 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.
 */

#import "FRAInterfacePerformer.h"
#import "FRAGutterTextView.h"
#import "FRATextView.h"
#import "FRATextMenuController.h"
#import "FRAProjectsController.h"
#import "FRALineNumbers.h"
#import "FRALayoutManager.h"
#import "FRASingleDocumentWindowDelegate.h"
#import "FRAAdvancedFindController.h"
#import "FRABasicPerformer.h"
#import "FRAMainController.h"
#import "FRAProject.h"
#import "FRASyntaxColouring.h"

#import "ICUPattern.h"
#import "ICUMatcher.h"
#import "NSStringICUAdditions.h"

@implementation FRAInterfacePerformer

@synthesize defaultIcon, defaultUnsavedIcon;

static id sharedInstance = nil;

+ (FRAInterfacePerformer *)sharedInstance
{
	if (sharedInstance == nil) {
		sharedInstance = [[self alloc] init];
	}

	return sharedInstance;
}

- (id)init
{
    if (sharedInstance == nil) {
        sharedInstance = [super init];

		statusBarBetweenString = [[NSString alloc] initWithFormat:@"  %C  ", 0x00B7];
		statusBarLastSavedString = NSLocalizedString(@"Saved", @"Saved, in the status bar");
		statusBarDocumentLengthString = NSLocalizedString(@"Length", @"Length, in the status bar");
		statusBarSelectionLengthString = NSLocalizedString(@"Selection", @"Selection, in the status bar");
		statusBarPositionString = NSLocalizedString(@"Position", @"Position, in the status bar");
		statusBarSyntaxDefinitionString = NSLocalizedString(@"Syntax", @"Syntax, in the status bar");
		statusBarEncodingString = NSLocalizedString(@"Encoding", @"Encoding, in the status bar");

		defaultIcon = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"FRADefaultIcon" ofType:@"png"]];
		defaultUnsavedIcon = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"FRADefaultUnsavedIcon" ofType:@"png"]];
    }
    return sharedInstance;
}

- (void)goToFunctionOnLine:(id)sender
{
	NSInteger lineToGoTo = [sender tag];
	[[FRATextMenuController sharedInstance] performGoToLine:lineToGoTo];
}

- (void)createFirstViewForDocument:(id)document
{
	NSView *firstContentView = [FRACurrentProject firstContentView];
	NSScrollView *textScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect([[FRADefaults valueForKey:@"GutterWidth"] integerValue], 0, [firstContentView bounds].size.width - [[FRADefaults valueForKey:@"GutterWidth"] integerValue], [firstContentView bounds].size.height)];
	NSSize contentSize = [textScrollView contentSize];
	[textScrollView setBorderType:NSNoBorder];
	[textScrollView setHasVerticalScroller:YES];
	[textScrollView setAutohidesScrollers:YES];
	[textScrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
	[[textScrollView contentView] setAutoresizesSubviews:YES];

	FRALineNumbers *lineNumbers = [[FRALineNumbers alloc] initWithDocument:document];
	[[NSNotificationCenter defaultCenter] addObserver:lineNumbers selector:@selector(viewBoundsDidChange:) name:NSViewBoundsDidChangeNotification object:[textScrollView contentView]];
	[document setValue:lineNumbers forKey:@"lineNumbers"];

	FRATextView *textView;
	if ([[FRADefaults valueForKey:@"LineWrapNewDocuments"] boolValue] == YES) {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect([[FRADefaults valueForKey:@"GutterWidth"] integerValue], 0, contentSize.width, contentSize.height)];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:NO];
		[textView setHorizontallyResizable:YES];
		[[textView textContainer] setWidthTracksTextView:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
	} else {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect([[FRADefaults valueForKey:@"GutterWidth"] integerValue], 0, contentSize.width, contentSize.height)];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:YES];
		[textView setHorizontallyResizable:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
		[[textView textContainer] setWidthTracksTextView:NO];
	}

	[textScrollView setDocumentView:textView];

	NSScrollView *gutterScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, [[FRADefaults valueForKey:@"GutterWidth"] integerValue], contentSize.height)];
	[gutterScrollView setBorderType:NSNoBorder];
	[gutterScrollView setHasVerticalScroller:NO];
	[gutterScrollView setHasHorizontalScroller:NO];
	[gutterScrollView setAutoresizingMask:NSViewHeightSizable];
	[[gutterScrollView contentView] setAutoresizesSubviews:YES];

	FRAGutterTextView *gutterTextView = [[FRAGutterTextView alloc] initWithFrame:NSMakeRect(0, 0, [[FRADefaults valueForKey:@"GutterWidth"] integerValue], contentSize.height - 50)];
	[gutterScrollView setDocumentView:gutterTextView];

	[document setValue:textView forKey:@"firstTextView"];
	[document setValue:textScrollView forKey:@"firstTextScrollView"];
	[document setValue:gutterScrollView forKey:@"firstGutterScrollView"];
}

- (void)insertDocumentIntoSecondContentView:(id)document
{
	[FRACurrentProject setSecondDocument:document];
	NSView *secondContentView = [FRACurrentProject secondContentView];
	[self removeAllSubviewsFromView:secondContentView];

	NSTextStorage *textStorage = [[[document valueForKey:@"firstTextScrollView"] documentView] textStorage];
	FRALayoutManager *layoutManager = [[FRALayoutManager alloc] init];
	[textStorage addLayoutManager:layoutManager];
	[[document valueForKey:@"syntaxColouring"] setSecondLayoutManager:layoutManager];

	u_int16_t gutterWidth = [[document valueForKey:@"firstGutterScrollView"] bounds].size.width;

	NSView *secondContentViewNavigationBar = [FRACurrentProject secondContentViewNavigationBar];
	CGFloat secondContentViewNavigationBarHeight = [secondContentViewNavigationBar bounds].size.height;

	NSScrollView *textScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(gutterWidth, secondContentViewNavigationBarHeight, [secondContentView bounds].size.width - gutterWidth, [secondContentView bounds].size.height - secondContentViewNavigationBarHeight - secondContentViewNavigationBarHeight)];
	NSSize contentSize = [textScrollView contentSize];

	NSTextContainer *container = [[NSTextContainer alloc] initWithContainerSize:contentSize];
	[layoutManager addTextContainer:container];

	[textScrollView setBorderType:NSNoBorder];
	[textScrollView setHasVerticalScroller:YES];
	[textScrollView setAutohidesScrollers:YES];
	[textScrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
	[[textScrollView contentView] setAutoresizesSubviews:YES];

	[[NSNotificationCenter defaultCenter] addObserver:[document valueForKey:@"lineNumbers"] selector:@selector(viewBoundsDidChange:) name:NSViewBoundsDidChangeNotification object:[textScrollView contentView]];

	FRATextView *textView;
	if ([[document valueForKey:@"isLineWrapped"] boolValue] == YES) {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width - 2, contentSize.height) textContainer:container]; // - 2 to remove slight movement left and right
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:NO];
		[textView setHorizontallyResizable:NO];
		[[textView textContainer] setWidthTracksTextView:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
	} else {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width, contentSize.height) textContainer:container];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:YES];
		[textView setHorizontallyResizable:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
		[[textView textContainer] setWidthTracksTextView:NO];
	}
	[textView setDefaults];

	[textScrollView setDocumentView:textView];

	NSScrollView *gutterScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, secondContentViewNavigationBarHeight, gutterWidth, contentSize.height)];
	[gutterScrollView setBorderType:NSNoBorder];
	[gutterScrollView setHasVerticalScroller:NO];
	[gutterScrollView setHasHorizontalScroller:NO];
	[gutterScrollView setAutoresizingMask:NSViewHeightSizable];
	[[gutterScrollView contentView] setAutoresizesSubviews:YES];

	FRAGutterTextView *gutterTextView = [[FRAGutterTextView alloc] initWithFrame:NSMakeRect(0, secondContentViewNavigationBarHeight, gutterWidth, contentSize.height)];
	[gutterScrollView setDocumentView:gutterTextView];

	[secondContentView addSubview:textScrollView];

	[textView setDelegate:[document valueForKey:@"syntaxColouring"]];
	[document setValue:textView forKey:@"secondTextView"];
	[document setValue:textScrollView forKey:@"secondTextScrollView"];
	[document setValue:gutterScrollView forKey:@"secondGutterScrollView"];

	[secondContentViewNavigationBar setFrame:NSMakeRect(0, 0, [secondContentView bounds].size.width, secondContentViewNavigationBarHeight)];
	[secondContentViewNavigationBar setAutoresizingMask:NSViewWidthSizable];
	[secondContentView addSubview:secondContentViewNavigationBar];

	NSRect visibleRect = [[[[document valueForKey:@"firstTextView"] enclosingScrollView] contentView] documentVisibleRect];
	NSRange visibleRange = [[[document valueForKey:@"firstTextView"] layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[[document valueForKey:@"firstTextView"] textContainer]];
	[textView scrollRangeToVisible:visibleRange];

	[FRACurrentProject resizeViewsForDocument:document]; // To properly set the width of the line number gutter and to recolour the document
}

- (void)insertDocumentIntoThirdContentView:(id)document orderFront:(BOOL)orderFront
{
	if ([document valueForKey:@"singleDocumentWindow"] != nil) {
		[[document valueForKey:@"singleDocumentWindow"] makeKeyAndOrderFront:nil];
		return;
	}

	NSWindowController *windowController = [[NSWindowController alloc] initWithWindowNibName:@"FRASingleDocument"];

	NSWindow *window = [windowController window];

	// For some reason this code does not work, so save the frame manually in FRASingleDocumentWindowDelegate and use that
	//[windowController setShouldCascadeWindows:NO];
	//[windowController setWindowFrameAutosaveName:@"SingleDocumentWindow"];
	//[window setFrameAutosaveName:@"SingleDocumentWindow"];

	if ([FRADefaults valueForKey:@"SingleDocumentWindow"] != nil) {
		[window setFrame:NSRectFromString([FRADefaults valueForKey:@"SingleDocumentWindow"]) display:NO animate:NO];
	}

	if (orderFront == YES) {
		[window makeKeyAndOrderFront:nil];
	}

	NSView *thirdContentView = [window contentView];

	NSTextStorage *textStorage = [[[document valueForKey:@"firstTextScrollView"] documentView] textStorage];
	FRALayoutManager *layoutManager = [[FRALayoutManager alloc] init];
	[textStorage addLayoutManager:layoutManager];
	[[document valueForKey:@"syntaxColouring"] setThirdLayoutManager:layoutManager];

	u_int16_t gutterWidth = [[document valueForKey:@"firstGutterScrollView"] bounds].size.width;

	NSScrollView *textScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(gutterWidth, -1, [thirdContentView bounds].size.width - gutterWidth, [thirdContentView bounds].size.height + 2)]; // +2 and -1 to remove extra line at the top and bottom
	NSSize contentSize = [textScrollView contentSize];
	NSTextContainer *container = [[NSTextContainer alloc] initWithContainerSize:contentSize];
	[layoutManager addTextContainer:container];

	[textScrollView setBorderType:NSNoBorder];
	[textScrollView setHasVerticalScroller:YES];
	[textScrollView setAutohidesScrollers:YES];
	[textScrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
	[[textScrollView contentView] setAutoresizesSubviews:YES];

	[[NSNotificationCenter defaultCenter] addObserver:[document valueForKey:@"lineNumbers"] selector:@selector(viewBoundsDidChange:) name:NSViewBoundsDidChangeNotification object:[textScrollView contentView]];

	FRATextView *textView;
	if ([[document valueForKey:@"isLineWrapped"] boolValue] == YES) {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width, contentSize.height) textContainer:container];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:NO];
		[textView setHorizontallyResizable:NO];
		[[textView textContainer] setWidthTracksTextView:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
	} else {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width, contentSize.height) textContainer:container];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:YES];
		[textView setHorizontallyResizable:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
		[[textView textContainer] setWidthTracksTextView:NO];
	}
	[textView setDefaults];

	[textScrollView setDocumentView:textView];

	NSScrollView *gutterScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, -1, gutterWidth, contentSize.height)];
	[gutterScrollView setBorderType:NSNoBorder];
	[gutterScrollView setHasVerticalScroller:NO];
	[gutterScrollView setHasHorizontalScroller:NO];
	[gutterScrollView setAutoresizingMask:NSViewHeightSizable];
	[[gutterScrollView contentView] setAutoresizesSubviews:YES];

	FRAGutterTextView *gutterTextView = [[FRAGutterTextView alloc] initWithFrame:NSMakeRect(0, 0, gutterWidth, contentSize.height)];
	[gutterScrollView setDocumentView:gutterTextView];

	[thirdContentView addSubview:textScrollView];

	[textView setDelegate:[document valueForKey:@"syntaxColouring"]];
	[document setValue:textView forKey:@"thirdTextView"];
	[document setValue:textScrollView forKey:@"thirdTextScrollView"];
	[document setValue:gutterScrollView forKey:@"thirdGutterScrollView"];
	[document setValue:window forKey:@"singleDocumentWindow"];
	[document setValue:windowController forKey:@"singleDocumentWindowController"];

	[FRACurrentProject resizeViewsForDocument:document]; // To properly set the width of the line number gutter and to recolour the document

	[window setDelegate:[FRASingleDocumentWindowDelegate sharedInstance]];
	[window makeFirstResponder:textView];
}

- (void)insertDocumentIntoFourthContentView:(id)document
{
	NSTextStorage *textStorage = [[[document valueForKey:@"firstTextScrollView"] documentView] textStorage];
	FRALayoutManager *layoutManager = [[FRALayoutManager alloc] init];
	[textStorage addLayoutManager:layoutManager];
	[[document valueForKey:@"syntaxColouring"] setFourthLayoutManager:layoutManager];

	u_int16_t gutterWidth = [[document valueForKey:@"firstGutterScrollView"] bounds].size.width;

	NSView *fourthContentView = [[FRAAdvancedFindController sharedInstance] resultDocumentContentView];

	NSScrollView *textScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, [fourthContentView bounds].size.width - gutterWidth, [fourthContentView bounds].size.height)];
	NSSize contentSize = [textScrollView contentSize];

	NSTextContainer *container = [[NSTextContainer alloc] initWithContainerSize:contentSize];
	[layoutManager addTextContainer:container];

	[textScrollView setBorderType:NSNoBorder];
	[textScrollView setHasVerticalScroller:YES];
	[textScrollView setAutohidesScrollers:YES];
	[textScrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
	[[textScrollView contentView] setAutoresizesSubviews:YES];

	[[NSNotificationCenter defaultCenter] addObserver:[document valueForKey:@"lineNumbers"] selector:@selector(viewBoundsDidChange:) name:NSViewBoundsDidChangeNotification object:[textScrollView contentView]];

	FRATextView *textView;
	if ([[document valueForKey:@"isLineWrapped"] boolValue] == YES) {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width, contentSize.height) textContainer:container];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:NO];
		[textView setHorizontallyResizable:NO];
		[[textView textContainer] setWidthTracksTextView:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
	} else {
		textView = [[FRATextView alloc] initWithFrame:NSMakeRect(gutterWidth, 0, contentSize.width, contentSize.height) textContainer:container];
		[textView setMinSize:contentSize];
		[textScrollView setHasHorizontalScroller:YES];
		[textView setHorizontallyResizable:YES];
		[[textView textContainer] setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
		[[textView textContainer] setWidthTracksTextView:NO];
	}
	[textView setDefaults];

	[textScrollView setDocumentView:textView];

	NSScrollView *gutterScrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, gutterWidth, contentSize.height)];
	[gutterScrollView setBorderType:NSNoBorder];
	[gutterScrollView setHasVerticalScroller:NO];
	[gutterScrollView setHasHorizontalScroller:NO];
	[gutterScrollView setAutoresizingMask:NSViewHeightSizable];
	[[gutterScrollView contentView] setAutoresizesSubviews:YES];

	FRAGutterTextView *gutterTextView = [[FRAGutterTextView alloc] initWithFrame:NSMakeRect(0, 0, gutterWidth, contentSize.height)];
	[gutterScrollView setDocumentView:gutterTextView];

	[fourthContentView addSubview:textScrollView];

	[textView setDelegate:[document valueForKey:@"syntaxColouring"]];
	[document setValue:textView forKey:@"fourthTextView"];
	[document setValue:textScrollView forKey:@"fourthTextScrollView"];
	[document setValue:gutterScrollView forKey:@"fourthGutterScrollView"];
}

/**
 * Update gutter views to adjust its size to newly defined width for the specified
 * document. It refreshes every views used to display the document afterwards.
 **/
- (void) updateGutterViewForDocument:(id)document {
	NSArray *viewNumbers = @[@"first",@"second", @"third"];
	NSView *contentView = nil;
	u_int16_t gutterWidth = [[FRADefaults valueForKey:@"GutterWidth"] integerValue];
	NSRect frame;

	// Update document value first.
	[document setValue: @(gutterWidth)
                forKey:@"gutterWidth"];

	for (NSString* viewNumber in viewNumbers) {
		NSScrollView *gutterScrollView = (NSScrollView *) [document valueForKey:[NSString stringWithFormat:@"%@GutterScrollView", viewNumber]];
		NSTextView *textView = (NSTextView *)[document valueForKey:[NSString stringWithFormat:@"%@TextView", viewNumber]];
		NSScrollView *textScrollView = (NSScrollView *)[document valueForKey:[NSString stringWithFormat:@"%@TextScrollView", viewNumber]];

		if ([viewNumber isEqualToString:@"first"]) {
			contentView = [FRACurrentProject firstContentView];
		}
		else if ([viewNumber isEqualToString:@"second"]) {
			contentView = [FRACurrentProject secondContentView];
		}
		else if ([viewNumber isEqualToString:@"third"]) {
			if ([document valueForKey:@"singleDocumentWindow"] == nil) {
				continue;
			}
			contentView = [[document valueForKey:@"singleDocumentWindow"] contentView];
		}

		// Text Scroll View
		if (textScrollView != nil) {
			frame = [textScrollView frame];
			[textScrollView setFrame:NSMakeRect(gutterWidth, frame.origin.y, [contentView bounds].size.width - gutterWidth, frame.size.height)];
			[textScrollView setNeedsDisplay:YES];
		}

		// Text View
		if (textView != nil) {
			frame = [textView frame];
			[textView setFrame:NSMakeRect(gutterWidth, frame.origin.y, [contentView bounds].size.width - gutterWidth, frame.size.height)];
			[textView setNeedsDisplay:YES];
		}

		// Gutter Scroll View
		if (gutterScrollView != nil) {
			frame = [gutterScrollView frame];
			[gutterScrollView setFrame:NSMakeRect(frame.origin.x, frame.origin.y, gutterWidth, frame.size.height)];
			[gutterScrollView setNeedsDisplay:YES];
		}
	}
}

- (void) updateStatusBar
{
	if ([[FRADefaults valueForKey:@"ShowStatusBar"] boolValue] == NO) {
		return;
	}

	NSMutableString *statusBarString = [NSMutableString string];
	id document = FRACurrentDocument;
	FRATextView *textView = FRACurrentTextView;
	NSString *text = FRACurrentText;

	if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES)
		[statusBarString appendFormat:@"%@: %@", statusBarLastSavedString, [document valueForKey:@"lastSaved"]];

	if ([[FRADefaults valueForKey:@"StatusBarShowLength"] boolValue] == YES) {
		if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES) {
			[statusBarString appendString:statusBarBetweenString];
		}

		[statusBarString appendFormat:@"%@: %@", statusBarDocumentLengthString, [FRABasic thousandFormatedStringFromNumber:@([text length])]];
	}

	NSArray *array = [textView selectedRanges];
	NSInteger selection = 0;
	for (id item in array) {
		selection = selection + [item rangeValue].length;
	}
	if ([[FRADefaults valueForKey:@"StatusBarShowSelection"] boolValue] == YES && selection > 1) {
		if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES || [[FRADefaults valueForKey:@"StatusBarShowLength"] boolValue] == YES) {
			[statusBarString appendString:statusBarBetweenString];
		}
		[statusBarString appendFormat:@"%@: %@", statusBarSelectionLengthString, [FRABasic thousandFormatedStringFromNumber:@(selection)]];
	}

	if ([[FRADefaults valueForKey:@"StatusBarShowPosition"] boolValue] == YES) {
		if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES || [[FRADefaults valueForKey:@"StatusBarShowLength"] boolValue] == YES || ([[FRADefaults valueForKey:@"StatusBarShowSelection"] boolValue] == YES && selection > 1)) {
			[statusBarString appendString:statusBarBetweenString];
		}
		NSRange selectionRange;
		if (textView == nil) {
			selectionRange = NSMakeRange(0,0);
		} else {
			selectionRange = [textView selectedRange];
		}
		[statusBarString appendFormat:@"%@: %@\\%@", statusBarPositionString, [FRABasic thousandFormatedStringFromNumber: @((selectionRange.location - [text lineRangeForRange:selectionRange].location))], [FRABasic thousandFormatedStringFromNumber: @(selectionRange.location)]];
	}

	if ([[FRADefaults valueForKey:@"StatusBarShowEncoding"] boolValue] == YES) {
		if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES || [[FRADefaults valueForKey:@"StatusBarShowLength"] boolValue] == YES || ([[FRADefaults valueForKey:@"StatusBarShowSelection"] boolValue] == YES && selection > 1) || [[FRADefaults valueForKey:@"StatusBarShowPosition"] boolValue] == YES) {
			[statusBarString appendString:statusBarBetweenString];
		}
		[statusBarString appendFormat:@"%@: %@", statusBarEncodingString, [document valueForKey:@"encodingName"]];
	}

	if ([[FRADefaults valueForKey:@"StatusBarShowSyntax"] boolValue] == YES && [[document valueForKey:@"isSyntaxColoured"] boolValue]) {
		if ([[FRADefaults valueForKey:@"StatusBarShowWhenLastSaved"] boolValue] == YES || ([[FRADefaults valueForKey:@"StatusBarShowSelection"] boolValue] == YES && selection > 1) || [[FRADefaults valueForKey:@"StatusBarShowPosition"] boolValue] == YES || [[FRADefaults valueForKey:@"StatusBarShowEncoding"] boolValue] == YES) {
			[statusBarString appendString:statusBarBetweenString];
		}
		[statusBarString appendFormat:@"%@: %@", statusBarSyntaxDefinitionString, [document valueForKey:@"syntaxDefinition"]];
	}

	[[FRACurrentProject statusBarTextField] setStringValue:statusBarString];
}

- (void)clearStatusBar
{
	[[FRACurrentProject statusBarTextField] setObjectValue:@""];
}

- (NSString *)whichDirectoryForOpen
{
	NSString *directory;
	if ([[FRADefaults valueForKey:@"OpenMatrix"] integerValue] == FRAOpenSaveRemember) {
		directory = [FRADefaults valueForKey:@"LastOpenDirectory"];
	} else if ([[FRADefaults valueForKey:@"OpenMatrix"] integerValue] == FRAOpenSaveCurrent) {
		if ([FRACurrentProject areThereAnyDocuments] == YES) {
			directory = [[FRACurrentDocument valueForKey:@"path"] stringByDeletingLastPathComponent];
		} else {
			directory = NSHomeDirectory();
		}
	} else {
		directory = [FRADefaults valueForKey:@"OpenAlwaysUseTextField"];
	}

    if (directory == nil) {
        directory = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
                                                            inDomains:NSUserDomainMask] lastObject] path];
    }

	return [directory stringByExpandingTildeInPath];
}

- (NSString *)whichDirectoryForSave
{
	NSString *directory;
	if ([[FRADefaults valueForKey:@"SaveMatrix"] integerValue] == FRAOpenSaveRemember) {
		directory = [FRADefaults valueForKey:@"LastSaveAsDirectory"];
	} else if ([[FRADefaults valueForKey:@"SaveMatrix"] integerValue] == FRAOpenSaveCurrent) {
		if ([[FRACurrentDocument valueForKey:@"isNewDocument"] boolValue] == NO) {
			directory = [[FRACurrentDocument valueForKey:@"path"] stringByDeletingLastPathComponent];
		} else {
			directory = NSHomeDirectory();
		}
	} else {
		directory = [FRADefaults valueForKey:@"SaveAsAlwaysUseTextField"];
	}

	return [directory stringByExpandingTildeInPath];
}

- (void)removeAllSubviewsFromView:(NSView *)view
{
	[view setSubviews:@[]];
	//NSArray *array = [NSArray arrayWithArray:[view subviews]];
//	id item;
//	for (item in array) {
//		[item removeFromSuperview];
//		item = nil;
//	}
}

- (void)insertAllFunctionsIntoMenu:(NSMenu *)menu
{
	NSArray *allFunctions = [self allFunctions];

	if ([allFunctions count] == 0) {
		NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Not applicable", @"Not applicable in insertAllFunctionsIntoMenu") action:nil keyEquivalent:@""];
		[menuItem setState:NSOffState];
		[menu insertItem:menuItem atIndex:0];
		return;
	}

	NSEnumerator *enumerator = [allFunctions reverseObjectEnumerator];
	NSInteger index = [allFunctions count] - 1;
	NSInteger currentFunctionIndex = [self currentFunctionIndexForFunctions:allFunctions];
	NSString *spaceBetween;
	if ([allFunctions count] != 0) {
		if ([[[allFunctions lastObject] valueForKey:@"lineNumber"] integerValue] > 999) {
			spaceBetween = @"\t\t ";
		} else {
			spaceBetween = @"\t ";
		}
	} else {
		spaceBetween = @"";
	}
	for (id item in enumerator) {
		NSMenuItem *menuItem = [[NSMenuItem alloc] init];
		NSInteger lineNumber = [[item valueForKey:@"lineNumber"] integerValue];
		NSString *title = [NSString stringWithFormat:@"%ld%@%@", lineNumber, spaceBetween, [item valueForKey:@"name"]];
		[menuItem setTitle:title];
		[menuItem setTarget:FRAInterface];
		[menuItem setAction:@selector(goToFunctionOnLine:)];
		[menuItem setTag:lineNumber];
		if (index == currentFunctionIndex) {
			[menuItem setState:NSOnState];
		}
		index--;
		[menu insertItem:menuItem atIndex:0];
	}
}

- (NSArray *)allFunctions
{
	NSString *functionDefinition = [[FRACurrentDocument valueForKey:@"syntaxColouring"] functionDefinition];
	if (functionDefinition == nil || [functionDefinition isEqualToString:@""]) {
		return @[];
	}
	NSString *removeFromFunction = [[FRACurrentDocument valueForKey:@"syntaxColouring"] removeFromFunction];
	NSString *text = FRACurrentText;
	if (text == nil || [text isEqualToString:@""]) {
		return @[];
	}

	ICUPattern *pattern = [[ICUPattern alloc] initWithString:functionDefinition flags:(ICUCaseInsensitiveMatching | ICUMultiline)];
	ICUMatcher *matcher = [[ICUMatcher alloc] initWithPattern:pattern overString:text];

	NSInteger index = 0;
	NSInteger lineNumber = 0;
	NSMutableArray *returnArray = [NSMutableArray array];
	NSArray *keys = @[@"lineNumber", @"name"];
	while ([matcher findNext]) {
		NSRange matchRange = [matcher rangeOfMatch];
		while (index <= matchRange.location + 1) {
			index = NSMaxRange([text lineRangeForRange:NSMakeRange(index, 0)]);
			lineNumber++;
		}

		NSMutableString *name = [NSMutableString stringWithString:[text substringWithRange:matchRange]];
		NSInteger nameIndex = -1;
		NSInteger nameLength = [name length];
		while (++nameIndex < nameLength && ([name characterAtIndex:nameIndex] == ' ' || [name characterAtIndex:nameIndex] == '\t' || [name characterAtIndex:nameIndex] == '\n' || [name characterAtIndex:nameIndex] == '\r')) {
			[name replaceCharactersInRange:NSMakeRange(nameIndex, 1) withString:@""];
			nameLength--;
			nameIndex--; // Move it backwards as it, so to speak, has moved forwards by deleting one
		}

		while (nameLength-- && ([name characterAtIndex:nameLength] == ' ' || [name characterAtIndex:nameLength] == '\t' || [name characterAtIndex:nameLength] == '{' || [name characterAtIndex:nameIndex] == '\n' || [name characterAtIndex:nameIndex] == '\r')) {
			[name replaceCharactersInRange:NSMakeRange(nameLength, 1) withString:@""];
		}

		[name replaceOccurrencesOfString:removeFromFunction withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [name length])];

		NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:@[@(lineNumber), name] forKeys:keys];

		[returnArray addObject:dictionary];
	}

	return (NSArray *)returnArray;
}

- (NSInteger)currentLineNumber
{
	NSTextView *textView = FRACurrentTextView;
	NSString *text = [textView string];
	NSInteger textLength = [text length];
	if (textView == nil || [text isEqualToString:@""]) {
		return 0;
	}

	NSRange selectedRange = [textView selectedRange];

	NSInteger index = 0;
	NSInteger	lineNumber = 0;
	while (index <= selectedRange.location && index < textLength) {
		index = NSMaxRange([text lineRangeForRange:NSMakeRange(index, 0)]);
		lineNumber++;
	}

	return lineNumber;
}

- (NSInteger)currentFunctionIndexForFunctions:(NSArray *)functions
{
	NSInteger lineNumber = [FRAInterface currentLineNumber];

	id item;
	NSInteger index = 0;
	for (item in functions) {
		NSInteger functionLineNumber = [[item valueForKey:@"lineNumber"] integerValue];
		if (functionLineNumber == lineNumber) {
			return index;
		} else if (functionLineNumber > lineNumber) {
			return index - 1;
		}
		index++;
	}

	return -1;
}

- (void)removeAllTabBarObjectsForTabView:(NSTabView *)tabView
{
	NSArray *array = [tabView tabViewItems];
	for (id item in array) {
		[tabView removeTabViewItem:item];
	}
}

- (void)changeViewWithAnimationForWindow:(NSWindow *)window oldView:(NSView *)oldView newView:(NSView *)newView newRect:(NSRect)newRect
{
    NSDictionary *windowResize = @{NSViewAnimationTargetKey: window, NSViewAnimationEndFrameKey: [NSValue valueWithRect:newRect]};

    NSDictionary *oldFadeOut = @{NSViewAnimationTargetKey: oldView, NSViewAnimationEffectKey: NSViewAnimationFadeOutEffect};

    NSDictionary *newFadeIn = @{NSViewAnimationTargetKey: newView, NSViewAnimationEffectKey: NSViewAnimationFadeInEffect};

    NSArray *animations = @[windowResize, newFadeIn, oldFadeOut];

    NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations:animations];
    [animation setAnimationBlockingMode:NSAnimationNonblocking];
    [animation setDuration:0.32];
    [animation startAnimation];
}

@end

redpajama_set_name: RedPajamaGithub


David has been teaching at Academy of Art University since 2007. Prior to teaching for the Academy, David enjoyed 25 years of experience in the field of classical animation specializing in theatrical feature film projects as an animation artist for various studios, including a long stint at Walt Disney Feature Animation. His work has been featured in animated films such as Who Framed Roger Rabbit?, The Little Mermaid, Aladdin, The Lion King, Pocahontas, Mulan, Lilo & Stitch and Brother Bear among others.
David has said that as a teacher he still considers himself a student of animation and is constantly interested in learning new techniques about the art and craft of drawn animation. In recent years he has focused on adapting his classical pencil-on-paper animation training to digital paperless animation using a graphics tablet and is enthusiastic about inspiring his students with innovative applications of classical hand-drawn animation principles to modern production pipelines.


Ever wanted to give your office and workspace a little extra bit of geek power? Whether you're in a C-Suit office or in the basement (IT Crowd, anyone?), we found some awesome items, gadgets, and goodies for you.
Some are just decoration, some have a functionality as well, and others again are plain silly but good fun.
So, just in time for this year's Christmas shopping, check out our latest list for geek inventory to suit your office and your desks.
Update: If it's sold out, you can check for alternative sellers.
If you're dealing with international business and operations all over the world, it's always nice to have a globe or a map of the world around to check on some locations at times. If you want to push it to the next level you simply go for the unbeatable levitating globe.
A perpetuum mobile, or perpetual motion device is a machine that works only by consuming just as much energy as it generates and therefore functioning indefinitely on its own. With this kit you can almost achieve that, for as long the solar panels get daylight. Certainly a beauty in every geeky environment and good fun to build up.
The eye of Sauron sees it all. It will move from side to side, trying to find the one ring, from Lord of the Rings. As you know from the books or movies, the eye of Sauron rests on the top of the tower of Barad-dûr and this desk lamp captures it beautifully with its 21 inches height.
You're not that much into LotR, but still love fantasy geeky things? How about this LED desk lamp in the shape of a potion bottle? Definitely something for every RPG fan out there. You need some mana back? It can be a blue potion lamp. Better restore some HP before the next battle? Red potion lamp it is. Thanks to LED technology it can change colors – no problem. Lovely!
Your personal business cards are lying around? Handing over your details in a bad shape? No style? Fear not! The Star Wars carbonite business card case doesn't only store your favorite space smuggler, but also keeps your business cards in one place. This will definitely leave the right impression, but don't get cocky, kid!
Choose between the Alliance and the Horde, but choose this chair banner to make sure everybody knows who's the lvl 100 rogue in the team. Simple, but effective, and most certainly attracting some attention.
Blizzard's sound designers are doing a great job. They created iconic sounds such as the Murloc gurgle and the laugher of the treasure goblin. Next to that there was a very special sound in WoW, that played whenever your character gained enough EXP to make it to the next level. This button here allows you to play the level-up-ding-sound whenever necessary. Completed a difficult meeting or achieved other greatness? Smack that button and welcome on the next level. Grats!
You remember the Bat'leth from Star Trek? This melee weapon could have been your end, if you're unskilled in combat against Klingon warriors. This tiny version of it looks just like the real deal, but it's designed just to open your mail with style, not slay your enemies, without honor.
The Millennium Falcon? Of course! How could we fail to include you? Mostly charging cables for your smartphones and other gadgets are really boring and have no aesthetic appeal whatsoever. With this special charger cable you can change this. Charge with style and a hyperdrive!
Whether you choose to grab these for yourself or as a gift, they will certainly be a statement in your office. A statement that says, "I'm a proud geek! Fear me!" or befriend me if you're a fellow geek.
Which is your favorite item? Got any other things you like and want to share? Bought one and love it? Take a photo and share it with us. Make sure to drop a comment below!
Photo credit: ThinkGeek and owners of the respective brands.


text:
Andrew pleads the fifth at couples therapy
Denies any knowledge of boys night antics.
After Andrew's antics at boys night it was expected that there was going to be repercussions about what he said about Cheryl. But Andrew had a perfect way to avoid any responsibility. Deny all knowledge of it.
The morning after boys night, Sean spoke to Cheryl about what had been said about her, describing the conversation as "disgusting". So at couples therapy Cheryl decided to raise her concerns.
"The night's a little bit hazy, we were drinking a fair bit. I don't remember, I honestly don't remember," Andrew said nonchalantly to Cheryl and expert John Aiken.
"I just would have been honest if I did say anything about her.
"I just ramble and I am a joker, if I vented or said anything it would have been of me laughing or just joking around," he explained to a frustrated looking Cheryl.
When Aiken asked him if he thought he had Cheryl's back at boys night, Andrew artfully dodged the question: "I don't feel that that was the nature of the night, as I said I don't remember."
Aiken wasn't accepting his vague answer though, pushing him for a "yes or no".
"I don't remember a moment when I would of needed to have Cheryl's back," he said with a confused look on his face.
It didn't take long for Andrew to put two and two together and work out it was Sean who had told on him.
"I don't know if there's been an overreaction, whether I've actually said anything, I certainly didn't intend to."
For those of you whose memory is also hazy, watch the video below to refresh your memory of boys night.
Property News: Sustainable House Day 2020: The most inspiring homes to see this year - domain.com.au
Martha's Red Wine Moment
Every week we'll bring you Martha's thoughts and reactions to the drama from this year's Dinner Parties. As someone who's been through it before — she's got plenty to say…
Catch-up on Season 7
Married at First SightSee All