text:
Now that I've broken my first bone, I've realized what its like for the many patients I see every day with fractures. It's a pain in the behind to have a part of your body not functioning, especially when it comes to your hands. I only broke my thumb but its on my dominant hand. This has made every day activities difficult like washing my hands, brushing my hair, taking a shower and getting dressed. You don't realize how much you use your thumb until you can't! Not to mention I can't get my splint wet, so doing anything around water is risky. It's gotten me out of doing the dishes on a regular basis, but that's about it. I haven't been able to cook much because my left hand isn't coordinated enough to chop, slice, flip or rotate things. An attempt at making pancakes got very messy and ended up with burnt pancakes and a very frustrated cook! I made soup last night and almost sliced through a finger on my left hand trying to cut up some carrots.
|What's black, blue and swollen all over? My thumb!
|Sporting my splint
I'm not trying to complain, just pointing out all the little things that I would normally take for granted. My experience has given me a new-found sympathy for all the patients I send home with broken arms, hands and fingers.


text:
Cheers Set of 8 White Wine Glasses
Our Price: $59.99
You Save $42.01
Special Value! Buy 8 Glasses for the Price of 6!
Item #5088564
In Stock
The fun and whimsical designs of the Cheers collection set a festive mood at any gathering. Each glass in the set of 8 is precision-etched with a different yet coordinating design. The dots, lines, and swirls are also distinctive, so each of your guests can easily identify their glass without the need for wine charms. Dishwasher safe - top rack. Special Value! Buy 6 Get 8 white wine glasses, each holds 16 ounces.
Dishwasher safe.
6.00 lbs.
8.661 in.
3.39 in.
3.39 in.
16 oz

subset: commoncrawl


text:
Kristen Stewart Covers Elle UK, Talks Being A Role Model And Becoming A Director [PHOTOS]
Kristen Stewart is at the top of her game career wise. She's headlining one of the biggest films of the summer, Snow White and the Huntsman' and her indie film On the Road is set to premiere at the 2012 Cannes Film Festival. Later this year, she'll bid farewell to the the Twilight franchise when the final installment of the series, Breaking Dawn Part 2, hits theaters. Aside from that she's rumored to be taking on a small role in the prison drama K-11, which marks the directorial debut of her mother, Jules Stewart. In addition to acting roles, Stewart is also receiving some high accolades from the fashion community.
She was just named the Best Dressed Woman by Glamour magazine. The star has emerged as a trendsetter due to her edgy red carpet looks, such as pairing sneakers with high-fashion dresses. During Paris Fashion Week this year, Stewart attended various events as part of research for her role as the new face of Balenciaga. Stewart has graced the cover of several popular style mags, including W, for which she took on a 60's glam look. This month, she graces the cover of Elle UK. After months of speculation and fictitious cover photos, the real photo-shoot has finally been released. Stewart models looks that are both retro and trendy chic.
So did the immensely private Stewart disclose any new personal details in her Elle interview? Quite a few actually. The revealed that she doesn't let her status as an influential public figure dictate her actions. She revealed: I don't apply (being a role model) to the choices I make. I feel like a role model is not necessarily somebody you want to imitate, just someone you admire.
Stewart also expressed a desire to follow in her mother's footsteps and start directing films, saying: I want to direct movies. Sometimes I think, 'God, I want to do that, I want to do that next.' But then I work with someone who's great at what they do and I think, 'I'm not there yet. Perhaps the rumors that Robert Pattinson bought her film-making equipment for her 22nd birthday are true!
Regardless of whether or not Stewart is set to work behind the camera or not, it's clear that her unique fashion sense isn't wavering anything soon. Here's a look back at the star's many colorful, fun, and stand-out looks!


text:
This is a comprehensive form and will take some time to fill in.
Please email a scan or PHOTOgraph copy of your certificates, CPD certificates, insurance policy and CRB check (if relevant) to [email protected] AND [email protected] If you need to post them, please email us and we will give you the address.
If you fill in this form, you are agreeing to our terms and conditions: when we give you your first referral you take responsibility payment of a £50 membership fee payable to StopSO. After that there will be an annual fee of £50.


text:
First time virgin amelia fingers herself
Smoking scorching dark haired angel fingers herself adorably till climax
German Brunette Fingers Herself
Is this video of this chick fingering herself,sexy?
Sasha Cane fingering herself
Young Hot Brunette Teen Fingering Herself On Webcam
Brunette glamour fingering herself
Older Bbw Strips At Her Computer And Fingers Herself
Jessica luvs to finger herself and to get orgasmic enjoyment
Sonia C Fingering Herself by CW
Nomable porn industry starlet with exceptional bum fingers herself stiff
Mature in Pantyhose Fingers Herself
Perfection Girl Isabella fingers herself
Cute blonde fingering herself from the back 3
Cute blonde fingering herself from the back 2
Blonde fingeres herself, then blows a cock
Mature Strips and Fingers Herself to Orgasm
Fit brown-haired fuckfest damsel with cock-squeezing figure fingers herself sitting on a stool
(C) Pornaga.com | DMCA | 2257 | Privacy | Terms | Contact
Pornaga is rated with RTA label. Parents, you can easily block access to this site. Please for more informations.
Pornaga is a free hosting service for your porn videos. Our pages contain absolutely no spyware/adware/trojan/etc. There is no charge (no hidden charges either) for viewing our videos.


text:
This section contains 1,808 words
(approx. 5 pages at 400 words per page)
Chapter 7, Mulch Summary
Mulch Diggums is a kleptomaniac dwarf who has given up his magic to enter Mud People's houses and steal from them. Over the years, he had built up quite a business but for the last three hundred years, he's been in and out of prison. Dwarves are able to tunnel by unhinging their jaws, allowing them to eat large quantities of earth every second.
Mulch is in a cell at LEP central, trying to look like he isn't scared even though he is quaking in his boots. The goblin-dwarf turf war is flaring up and someone has decided to put Mulch in with a gang of goblins. A goblin makes a fireball around his fist. Mulch does not like fire and he breaks out in a sweat. The goblin tries to antagonize Mulch and, inhaling the fireball, threatens to jam the...
(read more from the Chapter 7, Mulch Summary)
This section contains 1,808 words
(approx. 5 pages at 400 words per page)


text:
Depending on who runs the numbers, the percentage of beef cattle grading Choice or higher has remained static or declined. This is despite an extraordinary amount of selection pressure apparently aimed at improving carcass quality. This is at a time when Angus and Red Angus cattle — noted for their marbling ability — represent at least two-thirds of the nation's commercial cowherd.
"Conventional wisdom says we've made great progress in the genetics for beef quality, but environmental factors have limited the genetic expression of it," says Dan Moser, Kansas State University associate animal science professor. "In many cases, genetic improvement for marbling has been overstated."
Moser analyzed the genetic progress in carcass quality traits for this year's Beef Improvement Federation (BIF) research symposium. He says the genetic trend for average marbling score is increasing — about 0.015 units of marbling score/year in Angus and 0.0075/year in other major breeds. At that rate though, Moser says it would take about 60 years to achieve enough improvement to move cattle from low Choice to mid Choice, say, or from Select to low Choice.
The trend indicates selection pressure is being applied to increasing marbling score directly or indirectly through the correlated trait of intramuscular fat (IMF). Unfortunately, the correlation between those two traits means selection pressure has been applied with less accuracy than some thought.
"When EPDs are presented for ultrasound IMF instead of for carcass marbling score, the associated accuracy values are overestimated because they reflect the accuracy of selecting for the correlated trait [IMF], not the true economically relevant trait of marbling," Moser explains.
Ultrasound measures of IMF are being used by some breeds in addition to, or apart from, the actual marbling scores gleaned from carcass data.
Moreover, Moser points to the time lag between genetic pressure being exerted and phenotypic progress being made.
"It takes about five years for a generation of selection at the seedstock level, and another five years for a generation of selection at the commercial level, before we should expect to see much change," he says. In other words, the ingredients and selection pressure may have been exerted, but there hasn't been enough time for it to show up phenotypically in the nation's annual average mix of quality grades.
Drought's effect
Back to the notion that environmental factors are impeding genetic progress in carcass quality, Pete Anderson, VetLife Benchmark Performance Program vice president, explains: "There's no obvious, non-genetic trend that would result in a significant increase or decrease in quality grade, with the possible exception of drought."
The VetLife program collects live performance, carcass and financial data on about 40% of all U.S. fed cattle. Within this population, the percentage of steers and heifers grading Choice or higher has declined slightly since 1999.
It's occurred despite heavier harvest and carcass weights, and increased days on feed, Anderson says. "During this time, the percentage of carcasses receiving USDA Yield Grades of 4 or 5 has increased. All indications are that carcasses are heavier and fatter than a decade ago, yet USDA Quality Grade hasn't increased," he says.
Anderson and Justin Gleghorn, also of VetLife, examined that company's database for non-genetic reasons that might explain the dearth of Choice progress. They looked at placement factors such as cattle age, sex and weight going on feed and seasonality. They examined cattle health, nutrition and management ahead of the feedyard, everything from the impact of photoperiod and the vitamin A of pasture forage. They looked at feedlot nutrition, health and management, everything from limit-feeding implications to the differences grain processing makes in energy availability.
They looked at the use of implants in steers and heifers and the impact of feeding heifers MGA (it increases grade, actually). Finally they looked at the relationship between using more corn co-products and differences in end-point selection.
Nothing suggested there should be a significant increase or decrease in quality grade, which leaves drought as the most likely environmental reason.
"Any nutritional insult impairs the ability to marble," says Anderson, noting the drought still gripping wide sections of the nation has affected every section of cow country over the past five years.
"Since marbling deposition is a lifetime event, all segments of the industry will have to focus on quality in order to make significant progress," Anderson says. "Research shows that early weaning and diets high in concentrates will increase marbling. The health status of cattle, especially early in the feeding period, appears to have an effect on performance and carcass characteristics. Growth promotants can affect marbling, but the effects are dependent upon sex and dosage of the product. End-point selection influences quality grade, yield grade and other economically important carcass traits."
"The complexity of marbling allows some opportunity," Anderson says. "While traditional wisdom states that marbling can be reduced by negative lifetime events, but not increased, recent research indicates that opportunity exists to increase marbling."


text:
Looking for a room/apartment (Kuala Lumpur)
Hello everyone, I am moving to KL in mid of April and am yet to find the apartment that I would like to rent long...
My work place is in The gardens south tower, Mid valley city, Lingkaran syed putra. Could you please suggest me any nearby residential place and easy transport to office.
I am not a paid member, so please feel free to contact me on Protected content
Many Thanks,


text:
£ 259.99
The Alphason Chromium 1200 TV Stand offers a stylish and contemporary housing solution for the latest in audio visual technologies. This enclosed high gloss Cantilever TV Cabinet features a soft closing flip down door with IR friendly transparent glass. It has been designed to perfectly complement the latest smart super slim LED and Plasma screen televisions. This sleek modern design also features a glass top to match the deep high gloss finish of the cabinet. Complete with built in cable management, internal middle shelf, and passive ventilation.Supported on a stylish chrome base-frame, the Alphason Chromium 1200 TV Stand offers a stunning, timeless, yet contemporary look and feel. Available in five different high gloss colours, it is compatible with screen sizes up to 60" with a maximum mounting weight of 30kg


text:
By now, it's probably pretty obvious that I've got a thing for ittt, bitty dancing gadgets. (In case you've forgotten, check out the music-responsive Keepon Beat Bots doll getting his groove on here and here.) So, you can imagine my glee when I happened upon these sound-activated Hop Pop dolls. Each duck, panda, frog, rabbit, monkey, or bear pops up and down with sound (kind of like adorable little Clappers).
Buy yours today from Dynamism for $17 each, or $88 for the set of six.
Via Shiny Shiny.


text:
I know we haven't updated this blog lately but it's been pretty much business as usual until now.
We've done some low key commission selling for friends but nothing on a large scale, until now.
We have made an agreement with our newest local comic book shop to sell large quantities of vintage comic books through our Etsy shop.
We are very excited for this new step in growing our business and are confident that it will be a successful endeavor for ourselves and our new friend at The Comic Shop of Randolph, MA.
Wish us luck, check out our growing selection in our Etsy shop and if you are in the area, go see the best comic book shop on the South Shore, The Comic Shop at 500 North Main Street, Randolph, MA.
If you have a spare like hanging around, we highly recommend that you stop by Facebook and drop it off at The Comic Shop:
The Comic Shop of Randolph Facebook Page
Grrl Pickers are a small group of friends with intrests in art, upcycling,and making the world a more beautiful place (maybe even making a little profit along the way). We are hoping to make this blog an interactive experience showcasing the best upcycled and re-treasured art anywhere we might find it, along with our own adventures upcycling and selling vintage treasures. Feel free to use the links below to browse our online shops or contact us directly: firstname.lastname@example.com
Visit us on other sites, click links below
Monday, April 25, 2016
Subscribe to: Posts (Atom)


text: Trinity is a great place. They have high quality food and the cooks do it right. My favorite is the Griz! and if they've added the Buffalo Mac to the menu then you got to try it. The owner, whose root is in brewing, knows his craft and they make many great beers but he knows other guys brew great beer too. So he also offers the best beers from around the world for his customers to enjoy. I'm living in Germany for the next few years but look forward to returning home and sitting again at that funky counter.


text:
How to Spot Those Sneaky Sources of Gluten
If you have celiac disease, the smallest trace of gluten can trigger abdominal bloating and pain, diarrhoea and other symptoms associated with ongoing damage to the intestinal lining. Beyond giving up cereal for breakfast, sandwiches for lunch, and rolls for dinner, it's important to look for products labeled gluten-free.
"But avoid the urge to place a health halo over allgluten-free foods," says Brigid Titgemeier, MS, RDN, LD, a Cleveland Clinic Center for Functional Medicine dietitian. "Gluten-free processed foods are often high in sugar and are just as unhealthy as processed foods that contain gluten. The best way to promote healing in your body is to eat real food that grows naturally and is already gluten-free."
Below, we reveal some hidden — and surprising — sources of gluten, with tips on how to avoid them


text:
Thank you for visiting today. If this is your first visit, take your time and look around. We have plenty of information and resources available for you. If you are a return visitor, thank you. We would love to hear from you and tell you how we can serve all your real estate needs.
Century21-Gold Star Realty. All rights reserved.
©2016 CENTURY 21 Gold Star Realty. CENTURY 21® and the CENTURY 21 Logo are registered service marks owned by Century 21 Real Estate LLC. Equal Housing Opportunity. Each office is independently owned and operated.
As your Professional Realtors,our commitment, our business and our success is based on our desire to provide excellence in service to all of our clients.
We pride ourselves on our years of experience that creates an atmosphere where the selling process is satisfying, enjoyable and rewarding. With over twenty years in the real estate industry, CENTURY 21® Gold Star Realty has the ability to discover and address the diverse needs, wants, expectations and concerns of different home sellers and buyers.
We love what we do. Our clients never have to ask the question "What have you done for me lately?" Our clients see results every day! Our passion for the business makes it easy to make a full-time commitment to our clients. By combining both personal, one-on-one attention with dynamic web and email resources, we provide 24/7 market coverage for our clients, which makes the marketing and selling of your home and easier experience.
Our specialties include residential properties, fine homes and estates, commercial, investment, new construction, waterfront properties, land, short sales and foreclosures.
When you're ready to buy or sell, please call us for a complimentary market analysis or to find your perfect home. Thank you for putting your trust in CENTURY 21 ® Gold Star Realty!


text:
Why are we talking about corporate taxes?
Corporate taxes are a stark example of the inherent injustice of Capitalism and the war that the rich are waging against the middle class and everyone else. In 1961, corporate income taxes were over 1/3 of federal income tax revenue; today they are half that share. It is the income taxes paid by individuals and small businesses that have made up for the declining share of taxes paid by corporations.
How important are corporate taxes for the Federal government?
Corporate income taxes only make up 7% of Federal government tax revenue, while personal income taxes account for 44% and Social Security and Medicare 40%.
Have corporate taxes always been so small?
No. In the 1950s and most of the 1960s the top Federal corporate tax rate was 50%. Now it is nominally 35%. During the earlier years, corporate taxes were more than 20% of federal tax revenue.
35% is still a substantial rate. Are our corporations not making money? Are our corporations in trouble?
Not exactly. Two-thirds of U.S. corporations paid no federal income taxes between 1998 and 2005, according to a study by the Government Accountability Office issued by Congress in 2008. This was despite the fact that they were doing very well in those years. Collectively, they reported trillions of dollars in sales. A March 10th 2011 report from the Federal Reserve said that American corporations are sitting on a pile of $1.9 trillion in cash which they are unwilling to spend.
What corporations didn't pay much in taxes?
Bernie Sanders has given many examples:
- Exxon Mobil made $19 billion in profits in 2009. Exxon not only paid no federal income taxes, it actually received a $156 million rebate from the IRS, according to its SEC filings.
- Bank of America received a $1.9 billion tax refund from the IRS last year, although it made $4.4 billion in profits and received a bailout from the Federal Reserve and the Treasury Department of nearly $1 trillion.
- Over the past five years, while General Electric made $26 billion in profits in the United States, it received a $4.1 billion refund from the IRS.
- Chevron received a $19 million refund from the IRS last year after it made $10 billion in profits in 2009.
- Boeing, which received a $30 billion contract from the Pentagon to build 179 airborne tankers, got a $124 million refund from the IRS last year.
- Valero Energy, the 25th largest company in America with $68 billion in sales last year received a $157 million tax refund check from the IRS and, over the past three years, it received a $134 million tax break from the oil and gas manufacturing tax deduction.
- Goldman Sachs in 2008 only paid 1.1 percent of its income in taxes even though it earned a profit of $2.3 billion and received an almost $800 billion bailout from the Federal Reserve and U.S. Treasury Department.
- Citigroup last year made more than $4 billion in profits but paid no federal income taxes. It received a $2.5 trillion bailout from the Federal Reserve and U.S. Treasury.
- ConocoPhillips, the fifth largest oil company in the United States, made $16 billion in profits from 2007 through 2009, but received $451 million in tax breaks through the oil and gas manufacturing deduction.
- Over the past five years, Carnival Cruise Lines made more than $11 billion in profits, but its federal income tax rate during those years was just 1.1 percent.
Shouldn't there be laws against this sort of thing?
Bernie Sanders has called for closing corporate tax loopholes and eliminating tax breaks for oil and gas companies. He also introduced legislation to impose a 5.4 percent surtax on millionaires that would yield up to $50 billion a year.


text:
Previous Challenge Entry (Level 3 - Advanced)
Topic: Smell (the sense of smell) (07/29/10)
TITLE: Guilty as Spaghetti
By Timothy Klingerman
"That's an interesting question, Michael. Is there something bothering you right now that you want to talk about?"
"No . . . I mean, just the question. I tried to ask Dad, but he gave me this big talk about sin, the flesh and guilt, and a bunch of other stuff. I don't know; it just seemed too complicated. Your answers are always simpler than his."
Only a grandparent can tell you what this is like, but Joe Miller experienced an actual piece of heaven as his grandson turned to him for the wisdom needed to navigate life on earth. It is a privilege extended by our Heavenly Father to those who invest in the lives of their grandchildren—a kind of sneak peek on the real thing that serves as a final incentive to stay on course late in life.
Grandpa Joe cleared his throat while he regained his composure and answered, "Well, that is very kind of you to say, Michael. I'm sure your father's answer was right, but let me see if I can help you understand it better."
The smell of dinner cooking and a rumble in his stomach reminded him that he was indeed still mortal, and that gave him an idea. "Before we figure this out together, would you run out to the kitchen and find out what your grandmother is making for dinner?"
Michael started to jump up, but stopped and said, "Spaghetti. We're having spaghetti tonight."
"Well, that was quick. I hardly saw you move and you're back already with the answer."
"No, Grandpa Joe, I could smell it. There's nothing I love more than when Grandma makes spaghetti. The smell fills the whole house."
"So it does," Grandpa Joe agreed. "So it does. You know, a guilty conscience does the same thing."
"A guilty conscience smells like Grandma's spaghetti?" Michael joked, and he and his grandfather burst out laughing.
"No. Ha! Not your grandma's spaghetti! But I'm glad you have a sense of humor. What I meant was it stinks up the whole house. You see, sometimes we get pretty good at hiding our sins from everyone, even ourselves. If sin was something that had to be seen, then a lot of people would think they got away with most of their sins. Luckily for us, God put stink into sin, which is what we call guilt. He also put a nose on our hearts to pick up the stench of that sin and let us know it's there, and…"
"Wait a second, Grandpa Joe. A nose on our hearts? I've never heard anything like that before."
"Well, that is what we call the conscience. Without the conscience to sniff out the guilt in our lives, we'd go walking around stinking up the place."
"I think I see what you're saying. When we sin in secret we might think we got away with it, so God gave us guilt to make the sin stink up our house, and he gave us a conscience that can smell the guilty odor so we will do something to clean up the sin in our lives. Is that right?"
"Exactly! Except that I didn't say anything about cleaning it up. You figured that out yourself. What good would it do us to know we smelled bad, but then do nothing about it? You are exactly right!"
"Is that why we all need Jesus, Grandpa Joe?"
As the light of Christ ignited in the heart of his grandson, the stench of the earth faded away and a heavenly atmosphere surrounded Joe Miller. He took a full breath of that air from heaven, savored it for a short moment, and then let it out, saying, "I was hoping you would ask me that question."
The opinions expressed by authors may not necessarily reflect the opinion of FaithWriters.com.
Accept Jesus as Your Lord and Savior Right Now - CLICK HERE
JOIN US at FaithWriters for Free. Grow as a Writer and Spread the Gospel.


text:
This is who WE are
We are not just the financial service provider for Mercedes-Benz Cars, we are much more than that. We are passionate about our products and people, engaging our customers for life and we actively shape the future of mobility. What drives us as a company? Who are we and what makes us special? It's not just the numbers and figures, it's the people, our vision of the future of mobility and our core values.
From Financing to Game-changing Mobility Services
Giving Back is Part of our Culture
In order to give something back to society, Daimler Financial Services is involved in social and cultural initiatives all around the world. This commitment is an integral part of our corporate culture. We give our employees the possibility to engage in charitable social Projects.


text:
#SmoothieNumbers are quick recipes sans the story for making refreshing drinks in a blender. No expensive juicer is needed, and greens are for salads. Read more
#SmoothieNumbers are quick recipes sans the story for making refreshing drinks in a blender. No expensive juicer is needed, and greens are for salads. Read more
Some time ago, I noticed extra weight gain. A panicked call was made to Mom. In a harsh and sweet tone of a voice, she said, "You know how to eat healthy. Now eat less and exercise more," she continued with the reality of my dilemma, "…if you gain weight now, it's difficult to get it off… You're older and the weight doesn't come off like it use to. There's no excuse for being fat."
Some may view the advice as insensitive. Personally, I appreciate the seriousness of it. Why cry about it when the solution is simple: Eat less and exercise more. The following morning, I was up at 6 am for a quick two-mile run. A food diary was started to find potential problems, which revealed large portions of food and too much sugar.
"I think we make a real sharp couple of coconuts—I'm dumb, you're shy, whaddaya think, huh?" – Rocky
Round 3: Hang in there! This week's smoothie is for the lovers. Did you get a chance to vote for the White Chocolate and Peanut Butter Hibiscus Smoothie in week one and for last week's Maple Peanut Butter and Earl Grey Tea Smoothie? Here's a third chance to win two tickets to see Rocky on Broadway and a year's supply of Peanut Butter & Co. peanut butter (50 jars). Visit Knockout Peanut Butter Smoothie Sweepstakes to vote and get the recipe for your favorite peanut butter smoothie, such as my Dark Chocolate Peanut Butter and Coconut Smoothie.
Finland. Summer 2003. Lunch outside of a mild summer day. The server presented steamed salmon in a saffron creamy broth. It was simple dish, but the memory of its taste is grand. Recently, when I made Saffron Butternut Squash soup as an idea to include in a Thanksgiving menu, the first spoonful didn't have me thinking of smoked turkey. Instead, forgotten memories of Finland returned.
It was the summer of learning about organic food, becoming environmentally-conscious and riding Copenhagen's public bikes. The flavorful produce was fresh, bruised and unwaxed. Large chickens looked liked American cornish hens. Fingerling potatoes enclosed in a thin papery skin roasted into a buttery softness. I would return to occasionally trying to recreate the Saffron Creamy broth. It's a simple sauce, in which I'm surprised to not have successfully created it. Perhaps, the simpleness of the sauce is underestimated. Ten years later into today, I would unwittingly recreate the taste with different ingredients, but the memories come courtesy of saffron. It's distinct flavor beautifully infuses every dish. Read more
February is a joyous month honoring leadership, celebrating love and praising our culture. Starting the month of festivities is African Heritage & Health week. A week long celebration encouraging African-Americans to return to their roots and rediscover cooking techniques and ingredients their ancestors ate before the age of processed food.
In 2011, Oldways, an organization dedicated to teaching nutrition and good food via culture and heritage, introduced the African Heritage Diet Pyramid. It was created by experts in African American history, cuisine, nutrition, and public health. The ingredients listed are commonly found in recipes from North America, Africa, the Caribbean and South America. Dishes made with African Diaspora ingredients are generally healthier than some soul food dishes 'invented' or 'revised' within the last 60 years. Read more


text:
Travelling abroad isn't cheap, but it doesn't have to be exorbitantly expensive either. Follow a few simple travel tips and you'll not only cut the cost of your overseas holiday, but you'll get more from the money you do spend too.
First Principles
Whether it's a weekend getaway on your own or a month-long tour with the family, the golden rule of planning a holiday is it's almost always cheaper doing it yourself. Travel agents may be able to negotiate discounts with hotel groups, airlines and the like, but you're paying them to do so, and – especially in the case of package deals – end up with little or no control over the specifics.
Doing it yourself means you can plan every single aspect of your holiday exactly how you want it, and make informed decisions about where you want to save money, and where you don't mind spending a little more.
Sounds good, doesn't it? In this first part of our Travel Deal Hunting Tips guide we're going to take a look at flight bookings and hotel reservations.
Booking Flights
Your first step should always be to secure your flights, and for a few reasons: first, the closer a flight gets to being fully booked, the greater the chance that the ticket price will increase, and secondly, flight prices fluctuate from day to day anyway, so you may find flying a day earlier or later gets you a better price.
The best way to find out is by using a flight comparison site like Skyscanner.net. This allows you to check the best flight prices for any given day, week or even month, you can even search for the best prices to a country in general rather than a specific airport, which could save you money if you're planning a touring holiday and are flexible about your starting point.
Not only that, in most cases the best price for any given flight will be for a non-refundable, non-flexible ticket. In other words, you'll have to buy a whole new ticket should your plans change for any reason. Whether you go down this route is up to you, but either way it does show the wisdom of getting your flights booked first, and planning the rest of your holiday from there.
Generally speaking you can only secure the actual seat numbers on your flight within 24 hours before you fly, but this may vary depending on the airline. Another tip is to check out www.seatguru.com to have a closer look at the plane you'll be flying on. Being stuck in a bad seat can turn your holiday sour before it's even started, so it's well worth the few minutes this'll take. Colour coding makes it easy to quickly pick out the best seats on your specific flight.
Booking Hotels
Your hotel may just be where you lay your head down at night, but you still want the best value for your money and that means spending a bit of time researching your options. The good news here is that most hotels let you cancel reservations without penalty up to a few days before you're scheduled to arrive, so there's nothing to stop you booking a "banker" hotel initially, then to keep looking for something even better.
With hotel bookings, it's a good idea to use price comparison services, and not just one of them either. Check out Booking.com, Hotels.com, Expedia.com.au and HotelClub as starting points – you may be able to take advantage of specific promotions on one site that the others aren't offering. Expedia, for instance, guarantees it'll price match any better deal you might find elsewhere (or refund the difference if you've already booked), and will also give you a $50 voucher to use on your next booking.
Another great way to sniff out hotel bargains is to check out the deals other online shoppers have surfaced on bargains sites such as Buckscoop. Not only can you check out the best deals going, but your fellow Buckscoopers may also have a few tips on how to find the best deals in the first place (e.g. Trick to finding the cheapest deals with HotelClub.com).
Before booking, make sure to read reviews from other travellers and look at the amenities your desired hotel offers. That grand 5-star hotel that looks so inviting may be situated next to a building site where construction has just started on an even bigger hotel, so particularly recent feedback from other visitors can be invaluable.
Stay tuned for the next installment of our Travel Deal Hunting Tips guide over the next few days. We'll be sharing more guidance on how you can save money on transport, mobile phone bills and more while abroad.
[For other related travel deals and bargains articles, click here]


text:
SANTA CLARA, Calif. - Just back from U23 National Team camp, Morgan Marlborough has transferred to Santa Clara University to be a member of the women's soccer team. The senior-to-be has been one of the top goal-scorers in the nation with the University of Nebraska the past three seasons. Marlborough is the back-to-back Big 12 Offensive Player of the Year and All-American. She will have to sit out the 2012 season due to the NCAA's transfer rules.
"I'm very excited about Morgan joining our team," said Bronco head coach Jerry Smith. "She is one of the most dangerous attacking players in the country. Her dribbling and scoring ability ranks up there with the best I have ever worked with. The numbers don't lie. She has averaged, over her three previous college seasons, more than double the goals of our leading goal scorer this past fall. Although she will sit out the 2012 season due to NCAA transfer rules, she is training with us everyday and is already making a difference in the level of play in our training. Also, sitting out a season will allow her to become an even better player with the additional training she'll receive, as well as become more familiar with her new teammates. We are all very excited about Morgan's decision to transfer to Santa Clara University."
After just three years at Nebraska Marlborough was only 11 goals away from being the all-time leading goal-scorer for the Cornhuskers. In her three collegiate seasons she has scored 59 goals including breaking the 20 goals-scored mark twice. As a freshman in 2009 Marlborough scored a career-high four goals vs. Akron. In addition to her goals, Marlborough has also shown the ability to set-up her teammates by adding 25 assists.


text:
Gallery: Some nurses complain of burnout, but others find satisfaction in new roles
Road closures
Traffic shut downs 6 a.m.-5 p.m.
Market Street (East 12th Street to Frazier Avenue)
Frazier Avenue
Veterans Bridge (southbound lanes only)
Georgia Avenue (Veterans Bridge to MLK Boulevard)
Vine Street (Georgia Avenue to Douglas Street)
Douglas Street (500 block)
E. Fifth Street (Douglas Street to Palmetto Street)
Palmetto Street (East Fifth Street to McCallie Avenue)
McCallie Avenue/East Seventh Street (Palmetto Street to Broad Street)
East 12th Street (Market Street to Broad Street)
800 Cherry St.
MLK Boulevard (Georgia Avenue to Broad Street)
Broad Street (McCallie Avenue to Cummings Highway)
Cummings Highway (Browns Ferry Road to east of Alford Hills Drive)
Ochs Highway
Scenic Highway
On Monday morning, the doors to some local businesses will swing open hours early. Some owners will open up on a day they usually stay closed. Others will open to one-day-only sales.
The USA Cycling Road Race National Championships finally will arrive in downtown Chattanooga, pulling in an expected 30,000 spectators, closing some of the main downtown roads and giving business owners hope for a Memorial Day sales bump.
The day's events begin at 9 a.m. with the women's road race and end after the men's race, which is set to begin at 1:15 p.m. Both will start and end at the intersection of Market Street and M.L. King Jr. Boulevard.
From 6 a.m. to 5 p.m., portions of Market and Broad streets and many other roads will be closed, and the city will tow all cars parked on the closed streets.
Nearby businesses learned of the race course last month. Kelly Smith, the owner of Blacksmith's Bistro on Market Street, said her reaction was simple: "Freaking yeah. This is awesome. It's great that this is happening right outside our door."
Smith is happy to see the race emphasizing a part of downtown -- specifically, her part of downtown -- that is away from the water. She said the city offers more than what tourists usually go for.
Blacksmith's, only a few dozen yards from the starting line, will serve breakfast sandwiches Monday beginning at 9 a.m. -- two hours earlier than the pub's normal opening.
About half a mile north of Blacksmith's, at Hair of the Dog Pub at the corner of Fourth and Market streets, Courtney Wright said his bar will double its staff for the day. The bar's second floor provides a good view of Market Street, so he hopes to see a bump in sales.
"Usually it's a dead day for us," said Wright, the general manager, "so we're not sure what to expect."
Across the Tennessee River, Frazier Avenue also will be shut down as cyclists race by. But many shops along the way will remain open, hoping to pull in foot traffic.
The events there actually begin tonight, with Good Dog and Tangerinas throwing a party starting at 7:30 p.m. Mary Kathryn Cox, the manager of Good Dog, hopes the energy can spill over to Monday. At any rate, they've stocked up on beer.
"We've got Modelo," she said, "which is a big thing, I guess."
The Brewhaus will fence off its parking lot and host a tailgate party. Frankie & Julian's boutique will offer a sale in front of the store. Winder Binder Gallery and Bookstore and Chad's Records will offer something, its owner said; he just isn't sure what yet.
The store isn't usually open on Memorial Day.
"We want to see what the crowds are going to be like the first year," said David Smotherman. "But I'm optimistic."
Between the women's and men's races, Frazier Avenue will display bicycles that have been turned into works of art and will offer a section of the road for children to draw on with chalk.
Elizabeth Tate, the president of Northshore Merchants Collective, said the business owners are excited about Market and Broad streets and Frazier Avenue closing for the day.
"I've been here 20 years," she said. "That's the first time I've ever seen that happen. We really wanted to take advantage."
Some residents who live near the closed roads said last week that they didn't know about the race, or the roads being shut down. Other residents said they were aware but weren't worried. They can find ways around.
Robyn Hyde, who lives on Forest Avenue about two blocks north of Frazier Avenue, found out about the race last week. She isn't bothered by having to snake around the bicycle course.
She said, "The main traffic is just as much of an inconvenience."
Contact Tyler Jett at firstname.lastname@example.com or 423-757-6476.


text:
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Chapter summary: Load images using
vil_load. Access them using a
The vxl image library has evolved from the TargetJr and Manchester Image libraries. As with its predecessors, its primary goals is to provide flexible access to all 2D images, including those too large to fit in the address space of a single program or process, and very powerful and fast access to images in memory. In fact, both cases need similar treatment: even in-core images are assumed to be sufficiently large (say a megabyte) that special care must be taken to avoid unnecessary copying of their data. In both cases, the normal requirements of efficiency and ease-of-use apply. The system must allow:
This vil library is the second VXL image library, and is sometimes referred to as vil2. The original vxl image library vil1 is deprecated.
You can read more about the design philosophy in
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Let's look at an example of vil in use. This program makes an image from a disk file, copies it into memory, and prints the pixel at 100,100.
#include <vcl_iostream.h> #include <vxl_config.h> #include <vil/vil_rgb.h> #include <vil/vil_load.h> #include <vil/vil_image_view.h> int main() { vil_image_view<vil_rgb<vxl_byte> > img; img = vil_load("foo.ppm"); vcl_cerr << "Pixel 100,100 = " << img(100,100) << vcl_endl; }
The first interesting line declares img to be an image. vil_image_view is the basic image type. It represents an image in memory about whose structure, size and pixel type we know everything. Hence we need to specify the pixel type at this point.
Now let's skip to the end to explain the pixel access method.
This looks up the pixel at position 100,100 and returns its value. The pixel type was defined on the first line to be an rgb of bytes, and that is what will be displayed.
[255 128 128]
Where it matters (such as when loading an image in from disk) it is assumed that the image origin is at the top left of the image.
Finally lets look at the middle line. This consists of two parts.
vil_load function does a lot of work behind the scenes
to determine what the image type is, and then load that image into
memory. The second part is the assignment which has several special properties.
vil_image_view object
is really a view of some underlying data. The view understands where the
real image data is in memory and how to interpret it. When you copy
a view, you merely copy this interpretation information, not the actual
image data. This is important, because often images are very big, and
copying is expensive. The underlying image is managed with smart pointers
so when the last view to the underlying data is destroyed, the image data
will be too.
vil_load by default loads the image as 3 planes, with the pixel
type as
vxl_byte. It is trivial to reconfigure a
so that it views the same image data as one plane of rgb pixels. The
assignment will automatically do any cheap conversion necessary. You may
ask then, how is that we know that the pixel type can be viewed as RGB of bytes?
Here, we simply know that our image foo.ppm is this type. In general you can
either find out what the pixel type is before you load the image, or
you can force it to whatever pixel type you want. The latter may involve
a relatively expensive pixel by pixel conversion, so this will not happen
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Anyway, the usual next step in demonstrating an image handling library is to show thresholding, so let's have a look. This program loads an image into memory, forcing it to RGB byte format, and creates a new image where all pixels greater than a threshold value are set to 0.
#include <vxl_config.h> #include <vil/vil_rgb.h> #include <vil/vil_load.h> #include <vil/vil_save.h> #include <vil/vil_image_view.h> #include <vil/vil_convert.h> int main(int argc, char **argv) { vil_image_view<vil_rgb<vxl_byte> > img; img = vil_convert_to_component_order( vil_convert_to_n_planes(3, vil_convert_cast(vxl_byte(), vil_load(argv[1])))); for (unsigned j = 0; j < img.nj(); ++j) for (unsigned i = 0; i < img.ni(); ++i) if (img(i,j).r < 200 && img(i,j).g < 200 && img(i,j).b < 200) img(i,j) = vil_rgb<vxl_byte>(0,0,0); vil_save(img, argv[2]); return 0; }
The call to
vil_save sends the modified image in img to disk.
The choice of file format is determined automatically from the extension of
the filename. If one wants more control, a string can be appended to specify the
format, e.g.
vil_save(buf, argv[2], "jpeg");
Of course, if your user has chosen a name such as "foo.ppm", you'll have a oddly named image.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
You should know by now that copying
vil_image_view objects does not
duplicate the data they point to. This allows images to be passed into and
out of functions efficiently. It also means that modifying the data in one
vil_image_view might change that in another. Take this example
... vil_image_view<float> a( vil_convert_cast(float(), vil_load("x")) ); vil_image_view<float> b = a; b(100,100) = 12; ...
After the assignment in line 3, both a(100,100) and b(100,100)
are set to the value 12. On the other hand, if we had used
vil_copy_deep, thus:
... vil_image_view<float> a( vil_convert_cast(float(), vil_load("x")) ); vil_copy_deep(a, b); b(100,100) = 12; ...
... vil_image_view<float> a( vil_load("x") ); vil_image_view<float> b( vil_copy_deep(a) ); b(100,100) = 12; ...
then a is unchanged after the assignment to b(100,100).
Note again that the actual copying is done in
vil_copy_deep; when the
return value is assigned to b, there is an efficient view copy.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Broadly there are two sorts of image one is interested in
As we have seen the first sort of images are represented
by a
vil_image_view<T> on the data in memory.
For some very large images it is not
possible or desirable to load them into memory. In this case it is
useful to be able to load in a sub-section of the image,
manipulate it, and possible write it out again. Alternatively
you may want to pass an image about, and process it without
knowing its pixel type. vil supports these second sort of images
vil_image_resource. You cannot create an image
resource object directly, instead you use a creation function
which returns a smart pointer to the base class
vil_image_resource_sptr. When manipulating
vil_image_resources it will almost entirely be in terms of
There are several types of
image resource, with different creation functions:
vil_jpeg_image. These are created using
vil_memory_image: Representing an image in memory
This is created using
vil_new_image_resource(). Alternatively if you want to
wrap an existing view up as a vil_image_resource you can call
vil_crop_image_resource and
vil_decimate_image_resource. These
are created using the equivalent functions:
vil_decimate(), etc.
These are created using the equivalent
functions e.g.
To actually get some image pixels you call the resource's
get_view() or
get_copy_view() method.
For example, the
vil_load() function works by creating
vil_image_resource, and then calling
for the whole image.
vil_image_view_base_sptr vil_load(char const* file) { vil_image_resource_sptr data = vil_load_image_resource(file); if (!data) return 0; return data -> get_view(); }
To set image pixels, you call the resource's
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
When developing an image processing algorithm, first write your algorithm in terms of a function for
vil_image_view<T>. Then, if you need it, write the vil_image_resource_sptr version, using the
vil_image_view<T>version to do the actual pixel manipulation.
vil_image_view<T> is designed for playing with actual pixel values.
vil_image_resource derivatives are designed to handle all the other stuff
associated with images, e.g. choosing pixel types at runtime,
splitting an image into blocks so that it fits in memory,
dealing with the arbitrary and complex hassles of image IO.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
vil_memory_image to ignore pixel type.
As explained above, you should be using
vil_image_view<T> to
actually manipulate your pixels. However, in some parts of your
code, you may want to pass images around without having to decide
the pixel type at compile time. This is a role for a
vil_image_resource derivative, in particular the
vil_memory_image. You can wrap an existing
vil_image_view<T> in a
vil_memory_image by calling
vil_new_image_resource_of_view(). Reference counting keeps track
of the underlying data in memory, so you can let the original
view go out of scope without loss.
It may be tempting to use the
vil_image_view_base_sptr for this
purpose instead. That type is only intended for internal use by vil, and
it will almost certainly not behave as you want.
vil_image_resource API has been designed to allow efficient
access to
vil_memory_image. In the example
below, if the image resource passed in is really a
vil_memory_image, the
get_view() returns a view
to the underlying data, so no unneeded data copying happens.
Similarly, a call to
put_view(), can return almost immediately,
checking only to confirm that the view is still pointing to
the same underlying data.
void display_view(vil_image_resource_sptr &ir) { switch (ir->pixel_format()) { case VIL_PIXEL_FORMAT_BYTE: { vil_image_view<vxl_byte> v1 = ir->get_view(); display_byte(v1); } case ... } }
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
uses a pointer arithmetic style of indexing.
The image data is assumed to be a regularly arranged set of
pixels in memory. The view keeps a pointer to the pixel
at the origin. It also keeps the pointer difference to
get to the next pixel to the right, the next pixel down,
and the same pixel in the next plane.
In a general image representation a 2d image
consists of multiple planes each containing multiple rasters (rows)
each containing multiple pixels, and each pixel contains multiple
components. The planes and the components are used for the same
purpose, to represent different spectral or functional values (e.g. the
red, green and blue channels of an RGB image.) In vil it is usually
assumed that an image cannot have both multiple planes and multiple
components per pixel. This allows
vil_image_view to view the same a colour image data
as either a 3 plane image or a 1 plane RGB image. You can do this
explicitly by calling
vil_view_as_planes() or
vil_view_as_rgb(). So the following example will print the
same value twice.
// Assume that x.png is an rgb byte image. vil_image_view<vil_rgb<vxl_byte> > im = vil_load("x.png"); vil_image_view<vxl_byte> im2 = vil_view_as_planes(im); vcl_cout << (int) (im(3,4).r) << vcl_endl; vcl_cout << (int) (im(3,4,0)) << vcl_endl;
vil_view_as_planes() and
vil_view_as_rgb() are
actually redundant, and simple assingment will do. In the above
example the conversion can be achieved by
vil_image_view<vxl_byte> im2 = im
You should bear in mind that the component-wise and plane-wise representations are not equal. The multi-plane representation is more general than the RGB multi-component one. If the underlying data is actually stored RRRR..GGGG..BBBB.. then it is not possible to view that image as a single plane of RGB pixels. For this reason, a lot of vil prefers to view an image as multi-plane single-component. In particular, the vil_image_resource derivatives in vil, will treat all images as multi-plane, scalar component images, whether the underlying data is RGBRGBRGB... or RRRR..GGGG..BBBB.. This means if you have switch statement to deal with pixel types in an normal image resource, you need not worry about any types other than than the following
Similarly to the planes to components conversion
it is possible to perform a whole range of other manipulations. These
One further advantage of the arithmetic indexing scheme is that
it becomes easy to create a 2d slice view of a 3d image.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Several image processing functions can be found in the algo subdirectory of vil. Lets look at an example of finding the image gradient using a Sobel filter.
#include <vcl_iostream.h> #include <vxl_config.h> // for vxl_byte #include <vil/vil_image_view.h> #include <vil/vil_print.h> #include <vil/algo/vil_sobel_3x3.h> int main() { unsigned ni=8; unsigned nj=15; unsigned nplanes=1; vil_image_view<vxl_byte> image(ni,nj,nplanes); for (unsigned p=0;p<nplanes;++p) for (unsigned j=0;j<nj;++j) for (unsigned i=0;i<ni;++i) image(i,j,p) = vxl_byte(i+10*j+100*p); vcl_cout<<"Original image:"<<vcl_endl; vil_print_all(vcl_cout,image); // Objects to hold gradients vil_image_view<float> grad_i,grad_j; vil_sobel_3x3(image,grad_i,grad_j); vcl_cout<<vcl_endl <<"Sobel I Gradient:"<<vcl_endl; vil_print_all(vcl_cout,grad_i); vcl_cout<<vcl_endl <<"Sobel J Gradient:"<<vcl_endl; vil_print_all(vcl_cout,grad_j); return 0; }
There are also algorithms to perform image arithmetic, smoothing, general 1D and 2D convolution, morphological operations, interpolation, and much more.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
This section explores the major differences between using the old vil1 and using vil, and some of the implications for converting existing code.
The first and most obvious difference is that whilst there is a broad equivalent to
vil1_image, and its descendants, this class tree has been split in two. The abstract
vil1_image is now replaced with a smart pointer to a
The concrete
vil1_memory_image_of<T> is now a
Whereas previously, you might have written code in terms of
vil1_image, it now
usually makes sense to write most image manipulations in terms of
vil_image_view<T>s. With the old
vil1_image, you either had to
do a
get_section and operate on raw memory, or do a messy switch statement to cast
it to its underlying
vil_memory_image_of<T> type, or do an expensive
vil1_view_as() conversion.
Now with vil, the
vil_image_view<T> provides a powerful view directly onto
your image in memory.
vil_image_view provides such facilities
as compile-time type safety and switchable bounds checking. It also acts as a
sort of canonicaliser. A wide range of actual memory layouts can all be treated
identically and transparently while working through the
Previously, in vil1, the image loader often needed read an unblocked resource and to have several filters placed
on top of it to do such things as re-order the raster rows and re-order the
component order. vil doesn't do this, but instead uses the vil_image_view to provide
a canonical view of whatever deranged image format your loader finds most efficient to
The second important change is that vil provides full support for planes. In many cases
accessing different image planes is directly equivalent to accessing different components.
Indeed, it is often preferable to view an image as a multi-planar rather than multi-component.
If your algorithms assume a single plane, it is however trivial to provide a wrapper function
which takes a multi-planar image and passes one plane at a time to your algorithm. This
can be done with virtually no loss in efficiency, and indeed is how some of the code in
vil/algo is written.
To help convert existing code there is a script (
It converts as much code as it can. However, it can really only deal with file and identifier
name changes. There are large structural differences between vil1 and vil, with many of the
equivalent functions taking different parameters. The output of the conversion script
can best be seen as a hint on which types and classes to use and which functions to call.
You will almost certainly need to make extensive further edits to your code to get it
to compile again.
If you do not want to convert any code, but would rather use an interface to convert
between vil1 and vil types at runtime, then take a look at
which has a function for converting between
vil1_memory_image_of and
vil_image_view, and
a class that wraps a
vil1_image, and exports a
vil_image_resource interface.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
I'm trying to load a DICOM image, but it doesn't work.
vil_load.cxxprints an error message that mentions lots of image type but not
.dcm. What's wrong?
The DICOM loader in VXL is not built by default, because it is large and only medical image people want it.
You will need to rerun CMake and find Cache value called VXL_BUILD_DICOM. Turn it on, and rebuild -- it won't need to rebuild everything.
I'm having problems trying to use vil_image_view_base_sptr to process a loaded image without worrying about what type the pixels are.
The designers of vil recommend against using
explicitly -- it is unlikely to behave the way any user might want or
expect. vil never processes pixels independently of their type, and
vil_image_view_base_sptr is just a smart polymorphic pointer to a
vil_image_view<T> with some actual pixel type
If you want to convert a loaded image into pixels of a particular type,
use one of the
vil_convert functions
vil_image_view<vxl_byte> view = vil_convert_stretch_range (vxl_byte(), vil_load(my_filename));
If you want to store an image in memory without worrying about its pixel
See vil_memory_image.
What co-ordinate system does vil use?
Mostly vil does not assume that the
i and
j co-ordinates have any explicit
meaning. Instead, any external meaning to the
i and
j directions is
provided externally by the user. The choice of the letters
i and
j was an
explicit decision to discourage any assuption of a Cartesian reference frame.
However there are a few places where further assumptions need to be made.
When loading an image, the file format generally provides an explicit mapping
to up/down and left/right. In such cases, vil assumes that
image(0,0) is the
top-left-most pixel in the image, that increasing
i moves right, and that
j moves down. A similar assumption is used by
vil_rotate to provide
a direction to the rotation angle.
If you need an explicit world co-ordinate frame, within which you can embed an image,
then take a look at the vimt library in
vxl/contrib/mul/vimt. That provides
an world-to-image co-ordinates transform, that can be efficiently manipulated to
provide transforms up to projective complexity.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
The design of
vil_image_view (being more flexible than the design of vil1,)
and the state of modern optimising compilers (not as good as they
could be,) means that naive use of vil images may not be as fast as it
should be.
The following example shows the original implementation of the image fill method.
template<class T> void vil_image_view<T>::fill(T value) { for (unsigned p=0;p<nplanes_;++p) for (unsigned j=0;j<nj_;++j) for (unsigned i=0;i<ni_;++i) (*this)(i,j,p)= value; }
This implementation has the advantage of being simple, and easy to test.
In an ideal world the compiler would realise that it doesn't have to recalculate the location of each pixel each step, but instead keep a running pointer to the current pixel location. (Of course, in an ideal world we would be programming using natural language and a microphone.) We can make this optimisation explicit.
template<class T> void vil_image_view<T>::fill(T value) { T* plane = top_left_; for (unsigned p=0; p<nplanes_; ++p, plane+=planestep_) { T* row = plane; for (unsigned j=0; j<nj_; ++j, row+=jstep_) { T* p = row; for (unsigned i=0; i<ni_; ++i, p+=istep_) *p = value; } } }
This can halve the run time on some compilers.
The most important rule in code optimisation is to observe how the code
behaves in real life, and concentrate your efforts on where the code
spends most of its time. In our example, this means the inner most loop
Now, it turns out that in many cases,
istep_==1, because of the
default image layout in memory. Because of this common case it would
be worth having the compiler generate machine-code for the inner-most
loop in this special case. We can do this by explicitly testing for
such a special case.
template<class T> void vil_image_view<T>::fill(T value) { T* plane = top_left_; if (istep_==1) { for (unsigned p=0;p<nplanes_;++p,plane += planestep_) { T* row = plane-1; for (unsigned j=0;j<nj_;++j,row += jstep_) { int i = ni_ ; while (i>=0) { row[i--]=value; } } } return; } for (unsigned p=0;p<nplanes_;++p,plane += planestep_) { T* row = plane; for (unsigned j=0;j<nj_;++j,row += jstep_) { T* p = row; for (unsigned i=0;i<ni_;++i,p+=istep_) *p = value; } } }
There are two other optimisations going on here. The first is that
we are using the pointer indexing operator
[]. Most compilers
while (++i<n) { *(ptr++)=v; } differently from
while (++i<n) { ptr[i]=v; } , with the latter often
being significantly faster. This is especially true when
is a pointer to a character sized type.
The other optimisation makes use of the fact that it is faster to count down to
0 than count up to n. This is because it is faster to test against a constant, 0,
than against a variable. Sometimes a compiler figures this out itself,
but by no means always. One useful refinement that may be possible is to
decrement the index counter right at the end of the loop. This allows the
compiler to avoid issuing a separate test instruction, since this sort
of test is automatically performed by the processor after a decrement
or other arithmetic operation.
Since we are performing the same operation on every pixel independent of its absolute or relative position, there is one further optimisation that can be performed. In many cases an image will be stored as a contiguous block of memory. If this is the case, it may make sense just to operate on this block of memory as a single dimensional array. In the case of fill, this may even allow a compiler to issue a specialised single machine instruction which performs the whole fill very very fast. This gives us our final implementation.
template<class T> void vil_image_view<T>::fill(T value) { T* plane = top_left_; if (is_contiguous()) { vil_image_view<T>::iterator it = begin(); vil_image_view<T>::const_iterator end_it = end(); while (it!=end_it) { *it = value; ++it; } return; } if (istep_==1) { for (unsigned p=0;p<nplanes_;++p,plane += planestep_) { T* row = plane-1; for (unsigned j=0;j<nj_;++j,row += jstep_) { int i = ni_; while (i>=0) { row[--i]=value; } } } return; } for (unsigned p=0; p<nplanes_; ++p, plane+=planestep_) { T* row = plane; for (unsigned j=0; j<nj_; ++j, row+=jstep_) { T* p = row; for (unsigned i=0; i<ni_; ++i, p+=istep_) *p = value; } } }
This optimised version was between two and ten times faster than the original depending on the compiler, image structure, and pixel type.
It should always be born in mind that there is a trade-off in testing for special cases. Each test takes time, and this slows the function down for the non-special cases. Limit yourself to only testing for very common cases that have very significant potential speed improvements.
Finally as with all optimisation - be rigorous in comparing the actual times for your original and optimised code. Run enough experiments to measure the statistical spread to see if your improvements are significant. It is quite common for compiler or processor quirks to make your optimised code slower than the original.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
It is possible to encounter images that are much larger than available
memory. For example, a commercial satellite image can easily exceed several
gigabytes in size. The situation is even more dire in the case of
ultra high resolution video where up to 16K X 16K pixel resolutions are
feasible at two bytes per pixel. It is clearly not practical to handle
these images as an in-memory
vil_image_view. The use of a
vil_image_resource to supply small views of the image at a time
is essential, however the overhead in extracting small views from a
large image file can be substantial.
Consider the example of displaying a small image region near the center of the image where the view is zoomed in so that one pixel in the image is mapped to one pixel on the screen. The size of this image patch might be 2K X 1K pixels. In order for the image resource to supply this set of pixels it is necessary to seek past a gigabyte or more of file-resident data to the middle of the image and then pull out the several megabytes of pixels needed to construct the view for display. If the user then wants to pan over a few hundred pixels to view something just off the screen, a full seek and file read must be repeated. Under these circumstances, image viewing performance will be overwhelmingly dominated by disk io bandwidth and seek times.
To mitigate the overhead of disk access, the image can be organized as a set of contiguous rectangular blocks of pixels. Blocks may be randomly scattered within the file, but each block is a contiguous set of pixels. This way, a view can be assembled by seeking to each block in the view and then reading the block efficiently. Typical block size is 512 X 512 or 1024 X 1024 pixels, so that only a few blocks are needed to display regions of interest at full zoom. To gain even more efficiency, the blocks can be managed in a cache so the most of the pixels being displayed on the screen are already in memory. As the user pans to a new location, those blocks that are now off the screen are replaced by new blocks needed to fill in the new region. Thus, the number of blocks that have to actually be read from the file is significantly reduced.
The blocked image resource interface has the following virtual methods in addition to those already defined in the base resource class:
The block size used to store and retrive pixels.
unsigned size_block_i() const unsigned size_block_j() const
The number of blocks in column and row to contain the image.
unsigned n_block_i() const unsigned n_block_j() const
Retrieving blocks from the resource. Note that a block is a
and thus ready for use in processing and visualization operations.
vil_image_view_base_sptr get_block( unsigned block_index_i, unsigned block_index_j ) const bool get_blocks(unsigned start_block_i, unsigned end_block_i, unsigned start_block_j, unsigned end_block_j, vcl_vector< vcl_vector< vil_image_view_base_sptr > >& blocks ) const
This blocking structure is used internally to implement the basic method
get_copy_view(unsigned i0, unsigned n_i, unsigned j0, unsigned n_j)
It is possible that
i0, n_i
j0, n_j are not evenly divisible by
size_block_i and
size_block_j, respectively. In this case the blocks are trimmed
to extract pixels belonging to the specified image view bounds.
In the case of retrieving views near the boundary of the full
image, e.g.,
n_i=ni(), n_j=nj(), blocks may lie partially
outside the underlying image. In this case the pixel values in the
block locations lying outside the full image bounds are undefined.
Similar methods are defined for inserting blocked data into the image resource.
bool put_block(unsigned block_index_i, unsigned block_index_j, vil_image_view_base const& view) bool put_blocks(unsigned start_block_i, unsigned end_block_i, unsigned start_block_j, unsigned end_block_j, vcl_vector< vcl_vector< vil_image_view_base_sptr > > const& blocks)
These methods are used internally to support the virtual
put_view(vil_image_view_base const& im, unsigned i0, unsigned j0)
method. Note that current vil file-based resources do not support reading and writing on the same open resource. Therefore, a block-oriented image processing algorithm will have an input resource from which blocks are retrieved and an output resource where processed blocks are inserted.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Many of the advantages of blocking can be realized even if the
underlying image resource is not intrinsically blocked. The
vil_blocked_image_facade wraps around any image resource and
provides the
vil_blocked_image_resource class interface. That
is, the facade is a sub-class of
vil_blocked_image_resource. Internally, reading and writing
facade block data is implemented using the usual get and put view methods. In
this case the block view dimensions are those defined by the facade
blocking geometry.
One might wonder how this simulation of a blocked image structure
provides any gain in efficiency for pixel access, since the process
relies on an unblocked file format. A significant gain in performance
can be gained by the addition of a cache. The
vil_cached_image_resource is a sub-class of
vil_blocked_image_resource and provides an in-memory store for
most recently retrieved blocks. The size of the cache (in number of
blocks) is specified in the constructor:
vil_cached_image_resource(vil_blocked_image_resource_sptr bir, const unsigned cache_size)
The cache is implemented as a priority queue based on the "age" of a block. The blocks in the queue are given a timestamp as they enter the queue. If a block is retrieved from the cache, then the timestamp is reset to the current time. Otherwise, blocks age as new blocks are entered into the cache. When the cache is full, the oldest block is discarded to make room for a new block. Note that the queue does not participate in writing blocks to a resource.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
A blocking capability of a resource can be determined by examining the properties of the resource using the method
bool get_property(char const* tag, void* property_value = 0) const
Two properties are defined for blocked resources:
vil_property_size_block_i "size_block_i" vil_property_size_block_j "size_block_j"
To test if a resource supports blocking one can examine the appropriate properties of the resource:
vil_image_resource_sptr imgr = vil_load_image_resource("my_filename"); ... unsigned sbi=0, sbj=0; bool is_blocked = imgr->get_property(vil_property_size_block_i, &sbi) && imgr->get_property(vil_property_size_block_j, &sbj); ...
If the resource is blocked then
is_blocked will be true and the
sbi, sbj, contain the blocking structure for the
The following example shows how to convert an image resource resource to a blocked file resource.
vil_image_resource_sptr imgr = vil_load_image_resource("my_filename"); unsigned size_block_i = 256, size_block_j = 256; vil_blocked_image_resource_sptr bimgr = vil_new_blocked_image_resource("my_blocked_filename", imgr->ni(), imgr->nj(), imgr->nplanes(), imgr->pixel_format(), size_block_i, size_block_j, "tiff"); if (!vil_copy_deep(imgr, bimgr)) { //report trouble ... } ...
The new resource,
bimgr, will store pixels in square, 256 X
256, blocks.
vil_copy_deep automatically splits the input
resource into strips if the image is too large to fit in
memory. However, to insure proper handing of block boundaries it is
better to wrap the input resource in a facade with the same blocking
structure as the output. That is,
... vil_blocked_image_resource_sptr facr = vil_new_blocked_image_facade(imgr,sbi, sbj); if (!vil_copy_deep(facr, bimgr)) { //report trouble ... } ...
Currently, the
tiff file format and The National
Image Transmission Format (
nitf) image format provide a
vil_blocked_image_resource, however the
nitf format does not yet support writing. (NOTE THAT TIFF ONLY SUPPORTS BLOCK DIMENSIONS THAT ARE MULTIPLES OF 16.)
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
As in the previous section on blocked images, the motivation for constructing a pyramid image is to manage large images without having to keep the entire image in memory. Satellite images can easily exceed all available random access memory so it is impossible to display an overview of the image. The blocked image strategy solves the problem of panning through a large image, but it does not solve the problem of zooming between different levels of detail. Even with blocking, the display of a complete overview requires that the entire image must be in memory.
The zooming problem can be solved by constructing a
vil_pyramid_image_resource. This resource maintains a number of
file-based copies of an image at different resolution scales. The
original image is called the base image. Each reduced resolution image
resource is called a level of the pyramid. Most typically, the levels
of the pyramid differ by a factor of two in scale in each
dimension. The limit of the size of a pyramid as the number of levels
approaches infinity is 1 + 1/4 + .. =1+1/3. Thus, the worst case is
33% extra storage to represent all levels of detail.
It is not necessary to have a fixed scale difference between adjacent
levels of the
vil_pyramid_image_resource. When a user requests
vil_image_view at a particular scale, a view from the closest
scale in the pyramid is generated. The interface for getting a view
from a pyramid image is illustrated in the following code example.
In this example, the pyramid is stored as a set of image files in a directory.
#include <vil/vil_load.h> #include <vil/vil_pyramid_image_resource.h> ... { ... vil_pyramid_image_resource_sptr pir = vil_load_pyramid_resource("pyramid_dir"); float actual_scale; vil_image_view<unsigned short> level_view = pir->get_copy_view(0.25f, actual_scale); ... }
This example shows the basic use of a pyramid resource where a level
view 1/4 the scale of the base image is being retrieved. If the
pyramid doesn't contain a level with a scale factor of exactly 0.25,
the closest scale is returned and the scale of the closest level is
returned in
actual_scale. The level view only requires 1/16 the
number of pixels of the base image and can likely be held entirely in
memory. However, the user of the view has to keep in mind that the
image has been scaled down and must manipulate it appropriately.
For example, in rendering an image to the screen, the screen display scale factor must be compared to the level scale in order to determine the correct rendering scale. Suppose for example that a display screen has 1000 x 1000 elements and the base image of the pyramid is 15,000 by 15,000 pixels. The required rendering scale factor for the base image is 1/15. Suppose that the closest scale level in the pyramid is 1/16. The resulting level view is then rendered at a scale factor of 16/15 in order to fill the screen. Note however that only one million pixels are being processed instead of 225 million.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Level images are formed by subsampling the original base image. In order to do this subsampling properly, it is necessary to observe the limitations imposed by the Nyquist sampling theorem. The sample rate must be greater than twice the highest spatial frequency in the image. Otherwise aliasing will occur, which appears as interference bands in the down-sampled image. The Nyquist sampling rate constraint can be achieved by spatially smoothing the image using a low pass filter. The filter is designed to remove spatial frequencies that exceed one half the sampling rate corresponding to the scale of the pyramid level.
For example, if the base image is being sampled at a scale of 0.5 (every second pixel in each image dimension) then the image must be pre-smoothed to remove spatial frequencies greater than 1/pixel. A simple filter for achieving this requirement is to form the average of the 2x2 pixel neighborhood in the base image corresponding to each pixel in the downsampled image. This smoothing does not remove all the higher spatial frequencies but they are significantly attenuated. Another common approach is to apply a Gaussian low pass smoothing kernel recursively to each level. Gaussian suppression of higher spatial frequencies is superior to block averaging. The Gaussian is cheap to compute since it is separable and can be formed by applying two 1-d convolutions.
vil_pyramid_image_resource class provides the simple 2x2
averaging method for generating pyramid levels that are a factor of
two apart in scale. The user can apply more sophisticated sampling
schemes but this method is adequate for display purposes. Each level
is generated accordingly by applying the static method
#include <vil/vil_load.h> #include <vil/vil_pyramid_image_resource.h> ... { ... vil_image_resource_sptr image; // generate an image at 1/2 the scale image = vil_pyramid_image_resource::decimate(base_image, "level_filename", "tiff"); // the base_image resource was generated previously ... }
In the current implementation of the decimate method, the pyramid levels are generated as blocked images and so a resource file format that can support blocking must be used. This choice is primarily a matter of decimation processing efficiency and to manage level images that are still too large to fit in memory. In the example, the "tiff" file format is chosen since rectangular block structure is supported. If the input image is blocked then its native block structure is used. Otherwise a default blocking (256 x 256) structure is used.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
It is necessary to have a file format that can store the multiple
images required for the different resolution levels. The most obvious
approach is to store the images as separate files in a directory.
This format is called
vil_pyramid_image_list and is designated
by the
vil_file_format::tag(), "pyil". There is no
restriction on the format of the level files but applications of the
pyramid are generally more efficient if the base image and the level
files are blocked.
A second option for storing image pyramids is the
vil_tiff_pyramid_resource with
vil_file_format::tag(),"ptif". In this case, all the pyramid
levels are saved in a single tiff file. There is no assumed order to
the image headers in the file. The pyramid level scales are sorted by
the resource to provide the required interface. The following example
shows creating an output resource of each type and inserting the level
image resources into each pyramid.
#include <vil/vil_new.h> #include <vil/vil_image_resource.h> #include <vil/vil_pyramid_image_resource.h> ... { // a list of image resources representing the pyramid levels vcl_vector<vil_image_resource_sptr> rescs; ... // Generate a set of resources at multiple scales ... // Construct a new multiple file pyramid resource vil_pyramid_image_resource_sptr pyr_image_list = vil_new_pyramid_image_resource("pyramid_directory", "pyil"); // Construct a new single file tiff pyramid resource vil_pyramid_image_resource_sptr pyr_tiff = vil_new_pyramid_image_resource("pyramid.tif", "ptif"); // Store image_resources into the pyramids for ( vcl_vector<vil_image_resource_sptr>::iterator rit = rescs.begin(); rit != rescs.end(); ++rit) { pry_image_list.put_resource(*rit); pry_tiff.put_resource(*rit); } ... }
Two methods are provided in
vil_new that generate pyramid
images in either the image list or tiff format,
vil_new_pyramid_image_list_from_base and
vil_new_pyramid_image_from_base. The following example demonstrates
the use of each pyramid builder.
{ #include <vil/vil_new.h> #include <vil/vil_image_resource.h> #include <vil/vil_pyramid_image_resource.h> ... vil_image_resource_sptr base_image; // base_image is loaded or constructed ... unsigned number_of_levels = 7; bool copy_base = true; // Generate a pyramid as an image_list (files in a directory) vil_pyramid_image_resource_sptr pyril = vil_new_pyramid_image_list_from_base("pyramid_directory_path", base_image, number_of_levels, copy_base, "tiff", "R"); // Generate a pyramid as a multi-image tiff file vil_pyramid_image_resource_sptr pytif = vil_new_pyramid_image_from_base("pyramid_file.tif" base_image, number_of_levels, "ptif", "temporary_dir_path"); ... }
In the image list pyramid the user can specify the format of the level
image resource files. In the example the tiff format is specified. The
last argument specifies the base name of the pyramid files, e.g., R0,
R1, ... Rn-1, in the example. The variable
copy_base indicates
whether or not the base image is already in the directory. If not,
base_image is copied as a blocked image resource with
default blocking (256 x 256). If a different blocking structure is
desired, the base image can be wrapped in a
vil_blocked_image_facade resource with the new blocking structure.
For the tiff-based pyramid it is necessary to provide a temporary directory to generate pyramid levels prior to inserting them into the single tiff file. Since the pyramid level images can still be too large for memory, they are constructed as file-based resources.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
The National Imagery Transmission Format (NITF) is a highly flexible and complex format for exchanging digital imagery and its support data. Our NITF implementation includes a framework for defining the "tagged record extensions" and "data extension segments" needed by your application. A framework example, along with the capabilities and current limitations, is summarized here.
The following code demonstrates how to define a tagged record extension:
vil_nitf2_tagged_record_definition::define("HISTOA", "Softcopy History") .field("SYSTYPE", "System Type", NITF_STR(20)) .field("PC", "Prior Compression", NITF_STR(12)) .field("PE", "Prior Enhancements", NITF_ENUM(4, vil_nitf2_enum_values() .value("EH08", "Enhanced 8bpp") ... .value("DGHC", "Digitized hardcopy") .value("UNKP", "Unknown") .value("NONE", "None"))) .field("REMAP_FLAG", "System Specific Remap", NITF_INT(1)) .field("LUT_ID", "Data Mapping ID from ESD", NITF_INT(2)) .field("NEVENTS", "Number of Processing Events", NITF_INT(2)) .repeat("NEVENTS", vil_nitf2_fields_definitions() .field("PDATE", "Processing Date and Time", NITF_DAT(14)) .field("PSITE", "Processing Site", NITF_STR(10)) .field("PAS", "Softcopy Processing Application", NITF_STR(10)) .field("NIPCOM", "Number of Image Proc. Comments", NITF_INT(1)) .repeat("NIPCOM", vil_nitf2_field_definitions() .field("IPCOM", "Image Processing Comment", NITF_STR(80))) .field("IBPP", "Image Bit Depth (actual) ", NITF_INT(2)) ...)
This code enables the contents of record extension "HIST0A" to be parsed; without it, the unrecognized record would be skipped. Repeating field values, such as "IPCOM", above, are represented as vectors. Conditional and variable-length fields are also supported, and C++ functors are used to evaluate expressions involving tags that specify the length or repetition of other tags.
Currently the library can only read, but not write, NITF 2.0 and 2.1 files, and includes the following capabilities:
The following capabilities are not yet implemented:
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
VIL can be configured to support the reading of JPEG 2000 image files as well as NITF 2.1 images that are JPEG 2000 compressed. This section describes how to set up this capability.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
The decompression is handled by a third party library, ECW JPEG 2000 SDK, developed by ER Mapper. The library can be downloaded from www.ermapper.com, and is currently available under three different licensing schemes:
The VXL wrappers around this library were developed using version 3.1 beta of this SDK and have also been tested using version 3.3 RC2, the latest version available on 4 April 2006.
ER Mapper provides ECW JPEG 2000 SDK with a variety of build systems. As described in the next section, VXL has been configured to use the most common one which yields separate NCSEcw and NCSUtil libraries. Most of the testing has taken place using the dynamically linked versions of these libraries, but the static versions should work too.
|[ < ]
|[ > ]
|[ << ]
|[ Up ]
|[ >> ]
|[ ? ]
Once you have installed and built the ECW JPEG 2000 SDK, you must configure VXL to find it. Specify these three CMAKE variables:
When CMAKE creates your build files it will automatically add the appropriate source files and pre-processor definitions. Once VIL is built, test the JPEG 2000 decompression capability using the test program "test_file_format_read" in project "vil_test_all". If things are set up correctly, the test program will report that these two tests passed:
Note that if you use the dynamically linked version of the ECW JPEG 2000 SDK, your PATH environment variable must contain the /lib directory that contains NCSEcw and NCSUtil.
|[ << ]
|[ >> ]
|[ ? ]
This document was generated on July, 22 2015 using texi2html 1.76.


text:
Ramp – 0.9m
Our Ramp – 0.9m is a fun 'ground to platform' component in our Jigsaw range. Ideal for giving children access to platforms and connecting pieces, it features slip-resistant slats and a guard rail rope to help children climb safely. With a mid-level height of 0.9m, this Jigsaw Ramp is ideal for both KS1 and KS2 children.
Part of our innovative Jigsaw modular tower system range, you are in complete control as you piece together individual Jigsaw pieces to create your own custom play tower.
Combine as many, or as few, pieces as you wish and create a truly unique tower system custom-designed to meet your individual area requirements and budget.
With over 70 pieces in the range, the possibilities are truly endless!
Individual Jigsaw products cannot be combined with any other Creative Play, or external, ranges.
- Standards ComplianceBS EN 1176
- Servicing Instructions Maintenance-Instructions.pdf
- Spare Part Availability2-4 Weeks
- Minimum Required Persons2
Suitable for Ages
- Under 5
- 5 - 7
- 7 - 11
- 11 - 16
- Over 16


text:
Mid-Market ERP Add-ons to SAP Business One
Our Solution Management is responsible:
• To " verticalize " SAP solutions for SMB Companies
• Work industry by industry
• Design a "solution requirements landscape" for each vertical
• Evaluate the set of available Add-On products which service the landscape of Mid-Market ERP.
• Select a complete "Mid-Market ERP Vertical Solution" for each vertical.
Following are the add-ons offered by AbacusConsulting:
Key Features of iVend Retail Management Suite
• Easy to implement application suite
• Efficient store operations
• Improve sales experience
• More personalized service
• Speeds up checkout time
• Increases business competitiveness
• Easier track of inventory and re-ordering
• Applies to a wide range of retail businesses
• Setup and maintain a database of all the users in the company
• Replication of in-store transactions and information to the Head office
• Ease of deployment through wizards reduces the overall solution maintenance costs
• Centralized view at iVend POS allows effective inventory management
• Setup Product database for standard, serialized, batch managed, kit, assembly and non-inventory items
• Create and track the cash being disbursed and collected from each POS from the start till end of each day
Key Features of CMS (Cane Management Solution)
• Fully integrated with SAP Business One
• ACMS work in Offline Mode, Even if network
• Connection breaks.
• Data Replication Utility transfers each transaction to
• SAP Server automatically even if connection with
• SAP Server not found.
• Automated email alerts of replication of data.
• Camera controls of Weight Bridge processing, and
• Image of vehicle on CPR.
• User based access rights.
• Flexible Wizards to process multiple CPRs, and
• payments
• Grower's Family Head receiving and payment
• Control.
• Rates, Allowances, Deductions controls based on
• General, District, Tehsil, Deh, Center and Grower.
• Subsidies, Bindings controls.
CMS Modules
• Survey Management
• Rate Management
• Verities, Allowances, Deduction Management General,
• District, Tehsil, Deh, Center & Grower Wise.
• TPT Management (Work Order, Vehicle Registration)
• TPT Rates Management
• Violation & Cane Sampling
• Indent Wizard and Management
• Raw Slip Book Issuance
• Token Generation
• Weightment ( 1st & 2nd)
• CPR Management
• Loans & Advance Issuance
• Grower Payment Stop
• Outgoing Payments
• Payment Advice Wizard
• Grower, Contractor Master
For Information on Add-On, please Click Here


text:
Landscape Structures Playground Pays Homage to Atlanta
New Woodruff Park playable art structure to be unveiled during National Recreation and Park Association Congress and Exposition
Oct 26, 2011, 09:00 ET
DELANO, Minn., Oct. 26, 2011 /PRNewswire/ -- Landscape Structures Inc., the leading commercial play equipment manufacturer in the world, will unveil an innovative playable piece of art on Nov. 1. The playground was designed to be a central part of the recently rejuvenated Woodruff Park area in Atlanta, Ga. The playground will be revealed during the National Recreation and Park Association (NRPA) Congress and Exposition, which is being held Oct. 30 - Nov. 3, at Atlanta's Georgia World Congress Center.
"Landscape Structures is dedicated to creating innovative play areas," said Landscape Structures President Pat Faust. "The playground is a work of art, but it gives the children of Atlanta infinite ways to interact with the sculpture."
The original design was conceived by Jeff Santos of Coquitlam, British Columbia. Santos was the winner of the Playable 10 Contest, held in partnership by Landscape Structures, Georgia Institute of Technology, Central Atlanta Progress (CAP), Atlanta's Taskforce on Play (ATOP) and Bank of America. The playground's design pays tribute to Atlanta with a shape that mimics the letters "ATL." Built into the piece are various playable elements, including climbing walls, monkey bars and two different sizes of slides.
"I wanted the playground to have a unique shape, but also be inviting to children." Santos said. "The design really plays to kids' imagination and curiosity."
The new playground is in good company with the other improvements that have been made in the park over the last few years. CAP and the Atlanta Downtown Improvement District (ADID), since taking on operations of the park, have set their sights on making Woodruff Park the Downtown destination for healthy activity. Best known of these improvements is the Woodruff Park Recreation and Reading Room and the recently installed music system. But other new amenities like exercise and recreation equipment and Walk For Lunch programming have increased the active offerings of this urban oasis.
"Woodruff Park aims to be an amenity for visitors, employees, children and families and no park is complete without a dedicated place to play," said A.J. Robinson, president of CAP and ADID. "Through our partnership with Landscape Structures, Bank of America and ATOP, we're providing Atlanta's Downtown community with a combination of art and recreation."
The playground is slated to be installed in Woodruff Park in spring 2012. The structure is designed in the spirit of Landscape Structures that an inclusive playground is an important part of a healthy, thriving community.
For more information about Landscape Structures, please visit www.playlsi.com.
Since 1971, Landscape Structures Inc. has been the leading commercial play equipment manufacturer in the world. The employee-owned company is committed to making the world a better place with active children thriving in leading communities year after year, generation after generation. It encourages outdoor play that develops healthy kids and a sustainable world by creating innovative products that are environmentally responsible. Landscape Structures' mission from day one has been to enhance children's lives by fostering and creating inspiring play experiences while honoring the environment. Visit playlsi.com to learn more.
ABOUT CENTRAL ATLANTA PROGRESS/ATLANTA DOWNTOWN IMPROVEMENT DISTRICT: Central Atlanta Progress, Inc., is a Downtown business association with approximately 200 members. Its mission is to build a vibrant community with strong leadership and sustainable infrastructure that is safe, livable, diverse, economically viable, accessible, clean, hospitable and entertaining. The Atlanta Downtown Improvement District is a 501(c)(3) non-profit, charitable corporation created by CAP to make Downtown safer, cleaner and more hospitable.
ATLANTA TASKFORCE ON PLAY (ATOP): Atlanta Taskforce on Play (ATOP) was founded in 2007 to apply to KaBOOM!'s Playful City USA competition on behalf of the City of Atlanta. Working closely with the City's Department of Parks, Recreation and Cultural Affairs, ATOP was successful and Atlanta became one of the 31 Founding Playful Cities and went on to win first prize in the PCUSA video grant competition. Check out ATOP's winning video. ATOP is a fiscal partner of the local 501(c)(3) nonprofit Park Pride. More can be found at playatlanta.org.
ABOUT BANK OF AMERICA: Bank of America is one of the world's largest financial institutions, serving individual consumers, small- and middle-market businesses and large corporations with a full range of banking, investing, asset management and other financial and risk management products and services. The company provides unmatched convenience in the United States, serving approximately 57 million consumer and small business relationships with approximately 5,900 retail banking offices and approximately 18,000 ATMs and award-winning online banking with 29 million active users. Bank of America is among the world's leading wealth management companies and is a global leader in corporate and investment banking and trading across a broad range of asset classes, serving corporations, governments, institutions and individuals around the world. Bank of America offers industry-leading support to approximately 4 million small business owners through a suite of innovative, easy-to-use online products and services. The company serves clients through operations in more than 40 countries. Bank of America Corporation stock (NYSE : BAC ) is a component of the Dow Jones Industrial Average and is listed on the New York Stock Exchange.
ABOUT THE WOODRUFF PARK MASTER PLAN: The Woodruff Park Master Plan presents a detailed vision of the future of Downtown's most distinctive green space. The authority for the Master Plan is the Memorandum of Understanding (MOU) between the City of Atlanta Department of Parks, Recreation and Cultural Affairs (DPRCA) and Atlanta Downtown Improvement District, Inc. (ADID), as approved by the City Council and Mayor in 2007. Woodruff Park's designer, Nimrod Long and Associates, was hired by CAP/ADID to spearhead all redesign and repair projects. The Master Plan will be executed in two phases, and will be funded largely through a comprehensive fund-raising program, developed by CAP, targeting support from private sources.
SOURCE Landscape Structures


text:
By Chesney Hearst, Contributing Reporter
RIO DE JANEIRO, BRAZIL – Established in 1988, G.R.E.S. Acadêmicos do Grande Rio is one of the younger samba schools competing in the Grupo Especial (Special Group) but they are also often among the highest ranked. Best known simply as Grande Rio, they will enter the Sambódromo as the fourth school to parade on February, 11th, the second night of the Carnival championship competition.
Grande Rio first earned a place in the Grupo Especial in 1990 when they presented the Enredo (Theme), "Why I am Carioca [a Rio native]." However the following year they finished sixteenth place and were demoted back to the Access group.
In 1992 with their presentation of the Enredo of "Clear Waters for a Black King", they again won the Access Group regaining a position in the Grupo Especial, which they have maintained since.
In 2001, the famous Joãosinho Trinta took on the position of Grande Rio's Carnavalesco (Carnival Designer) and lead the school for four years.
Unfortunately, Trinta failed to reproduce the same success for the school as he had with G.R.E.S. Salgueiro and G.R.E.S. Beija-Flor in the 1970s and 1980s. Grande Rio's highest placement during Trinta's term was third place in 2003.
In 2004, Roberto Szaniecki took over the position of Carnavalesco and lead the school to third place finishes twice and then to two back-to-back Vice-championships (second place) in 2006 and 2007. Vice-champion is the closest the school has come to championship thus far in their short history.
This year Roberto Szaniecki returns, as Grande Rio will present the theme, "I love Rio and I will Fight: Black Gold [Oil] without dispute… Against injustice in defense of Rio."
The theme addresses the new law for distributing oil royalties received in Rio de Janeiro state, amongst all Brazilian states. The debate over the legislation saw the city streets of Rio fill with protesters on several occasions in recent years.
The school's website explains the intent of the theme by saying "G.R.E.S. Acadêmicos do Grande Rio inspired by their love of Rio de Janeiro comes together to create their own manifesto in favor of the popular debate which focuses on Rio's rights to benefit from oil production in our state. Rio de Janeiro produces 83 percent of all existing oil in the nation. We deserve the bonus!"
Grande Rio's procession this year will begin with the Comissão de Frente (Front Commission) paying homage to the off-shore deep water oil platform. The theme will then go on to address the products that come from oil and then on to the labor in the oil industry.
The parade will also address the environmental concerns that come with will deep watering drilling during the exploration for and extraction of oil from the pre-sal. The theme ends with the argument that royalties gained in state should be kept in Rio.
This year the school will feature model and stage assistant of the show 'Domingão Faustão', Carla Prata, as the Rainha da Bateria (Queen of the Drums). Headquartered on Almirante Barroso street, Grande Rio is a representative of Rio's satellite city of Duque de Caxias, the third most populated area in Rio state.
The school will also host "Feijoadíssima da Grande Rio 2013", a feijoada to benefit the school that will feature special guests, Preta Gil and Arlindo Cruz. Tickets are R$200 and can be purchased at the school's barracão (Carnival industrial workshop). They hold their normal weekly rehearsals there on Tuesdays at 9PM, see the website below for more details.
G.R.E.S. Acadêmicos do Grande Rio
Rehearsals: Tuesdays 9PM
Rua Wallace Soares, 5 and 6, Centro – Duque de Caxias, Rio de Janeiro
Tel: (21) 2671-3585