text:
If you have driven around Mississauga, it's likely that you might have passed by Naan and Kabob. With its eye-catching and attractive logo, decor and beautiful patio — it's a little hard to miss.
Naan and Kabob, a family-run business nestled in a plaza on the intersection of Hurontario and Bristol, is well known for its modern Afghani cuisine. Though the restaurant has been running since 2011, it definitely got a little more attention in 2012 after their television debut. Featured on a show called "Restaurant Takeover" — Chef Massimo Capra and interior designer Alison Milne beautifully transformed the look of the restaurant and updated the menu. Combined with delicious food and two restaurant masterminds, Naan and Kabob became a well-known family restaurant — especially in the Muslim community.
Logistically speaking, Naan and Kabob is a combination between a dine-in and a self-serve restaurant. Upon entering the restaurant, taking a couple of menu brochures and deciding what you'd like to order, you then walk to the cashier and order at the front. The servers then hand you a device which lights up once your food is ready for pick-up at the serving station. Though different than a total dine-in experience, I found this system helps the food arrive much faster — decreasing wait time.
Menu-wise, they have options for everyone. From vegetarian dishes to meat (obviously!), their menu items are also healthier than most traditional restaurants that serve food from the same subcontinent. I asked them about low sodium options — which they happily accommodated as well. Their kabobs were very artfully prepared — juicy and tasteful but not extremely overpowered with spices. For those interested, I would definitely recommend the chapli kabob and the waziri kabob. Both come with a side of extremely delicious naan — a treat in itself.
I loved the textures and flavours in their signature dish as well — the Qabuli pulao. As rice topped with sweetened carrots and raisins, I wasn't too sure about it at first. However, it soon became my favourite part of the entire experience. The pulao came with a small side of chicken curry, something I wasn't too fond of at all. After eating the simpler Afghani cuisine, the sudden taste of a traditional Pakistani/Indian dish just threw my taste buds off a bit. However, the veal that came with the pulao was very well marinated and cooked to perfection.
For drinks, their new mango smoothie in particular was extremely delicious. They had a sweetened iced tea that they prepare in-house, and a soothing mint lassi drink.
The only concern I had with the restaurant was the use of disposable plastic cups for the drinks. From an environmental perspective, it would be much better if drinks were served in reusable cups. They would increase the overall great ambiance by a notch too. Sitting in a beautiful restaurant, the plastic cups made my experience feel a little more like I was in a "take-out" restaurant.
Overall, if you're looking for an aesthetically pleasing restaurant with excellent food — and great service — drop by their location. The staff is great, the ambiance is excellent and I can personally guarantee that the whole family will thoroughly enjoy the experience.
If you wish to download their full menu, please click HERE.


text:
One of the best perks of staying at our Silicon Valley hotel is the free breakfast we serve to our guests every morning. However, our hotel breakfast is not the usual fare you might find at other hotels. You can start your day off on the right side of the bed with a complimentary spread that includes a wide variety of hot and cold items. You'll have plenty to choose from no matter what you like in the morning.
Dig into a plate full of pancakes or French toast smothered in maple syrup. Add a side of tasty bacon or sausage to make it a full meal. You can also load up on the healthy side of things with an assortment of fresh fruit. We also have pastries, juices, cereal and lots of other options to make sure you have plenty of energy to get you through the day.
Help yourself and then grab a seat in our comfortable breakfast room. You can go back for seconds or just get a refill on our freshly brewed coffee. With free wireless Internet available anywhere in our hotel, you can kick off your morning on a full stomach as you check your emails and plan your schedule for the busy day ahead.

subset: commoncrawl


text:
Representing Diverse Communities in the Kootenays
BC Wildfire Service maintains an up to date map of all wildfires burning in British Columbia.
See where fires are burning by visiting the map.
If a disaster strikes in your area, be the first to know. Emergency Notifications are sent out via text mesage, email,or a call to your landline phone.
RDCK Fire and Emergency Services recommends every household or business prepare in advance for an emergency, including building a 72 Hour Emergency Kit. If you have to evacuate on short notice, you won't have to scramble for your important things at the last minute, helping to reduce stress and stay focused.
Reduce the risk of your home being damaged by wildfire by removing hazards around your house and property. Our FireSmart program will show you how!
A total campfire ban is currently in effect. Check out the details on fire bans in the Southeast Fire Centre.
Urgent updates from RDCK Fire and Emergency Services are posted to our Facebook page as soon as they are issued. Following us on Facebook is one of the fastest ways to get up to the minute information.
The content on this page was last updated July 26 2018 at 2:11 PM


text:
Westy Sports introduces:
OUR GOAL: To develop and make available to multisport race directors an efficient and cost-effective timing system for multisport events.
Jim Henderson started working on R.F. Chip timing system in the spring of 1996. Since that time the system has evolved to a very effecient timing system for small to medium large events of all types, multi-sport and single sport events. In 1998 Jim became the sole owner of Westy Sports. Currently, Westy Sports is owned and operated as the event timing divison of SPORTS CONNECTION.
Westy Sports has timed events in Colorado, Utah, Texas, South Carolina, and Californian. The system has proven accurate and effective in timing events of all types.
The R.F. Chip timing system assigns each athlete a R.F. chip to wear. Each athlete is required to interact with the system at each timing point in order for accurate times to be recorded. The chip is normally worn on the wrist of the athlete and in the case of teams the chip is passed between athletes at the start of each segment of the event. The chip acts a baton that insures that each member of the team does not start his or her segment until his or her teammate finishes the prior segment.
The advantages of this system are:
- The requirement for the size of the timing crew is reduced to 4-6 volunteers per race. At least one staff member from Westy Sports in on site to insure that timing of any event goes smoothly.
- The cost to time a race is very reasonable. The cost timing an average event starts at about $1200.00 and up depending on the race configuration, number of athletes and the number of splits being timed. Contact Westy Sports either by mail or e-mail so that we might provide you with a timing proposal for your event.
- Complete results are available within 30 minutes of the last racer crossing the finish line. Unofficial results are available as the race progresses and are provided to the race director for posting or review.
- It is possible to produce individual times at the finish line for each racer if the race director wishes to do so. Individual unofficial results are able to be produced and posted throughout the race. Again this is an option that is at the discretion of the race director.
- Westy Sports is able to produce overall results, age group results, an announcers list for giving awards, alphabetic and numerical listings of athletes. A race can be configured to give up to five (5) different split times or interval times.
- Race timing is accomplished by each athlete wearing a R.F. chip on his/her wrist and moving the chip across an antenna at each timing point. The athlete is therefore involved in helping to time himself or herself.
For more information please contact:
Jim Henderson
Grand Junction, CO 81502-2065
Phone: (970) 241-6786
E-mail: email@example.com


text:
The great impersonation I can't believe someone spent 8 bucks to try and make me look like a cheater.
Saturday, November 22, 2008
Stallion83 talk plucked from the interwebs
The great impersonation I can't believe someone spent 8 bucks to try and make me look like a cheater.
33 comments:
I know your gf. I met her in an UNO game. I can't believe she suports you in this! Well, good luck...ReplyDelete
- AnonymousNovember 24, 2008 at 9:35 PM
Holy shit Stallion. As of 8:27 PM, US Central time, Monday, November 24th, year 2008 of the Christian calendar.. you're in first place on the Universal leaderboards. There's been a mass gamesaver wipe.. remember.. Tenaci0us Dan told you first :)ReplyDelete
- AnonymousNovember 24, 2008 at 9:36 PM
Also, to my above comment, it has absolutely nothing to do with your blog post, sorry, I thought it was important though :DReplyDelete
Wait, I have a serious question.ReplyDelete
What system do you use to get all of your games, buying all the cabela hunters and avatars would cost too much.
I'm guessing you Gamefly? and how much does you gamerscore addiction cost you every month.
Thanks if you reply.
From reading your blog it looks like there's a very nice person behind this huge gamerscore. Now I'm a fan of you. And congratulation for the (finally official) first place!ReplyDelete
- Omega DeezNovember 26, 2008 at 12:08 PM
LOL Didn't know there were that many impersonator's out there. Pretty soon you'll have more than Elvis. Let me know when you find the Hindu Stallion83.ReplyDelete
I have a theory on why all these dudes talk about you, they wanna be your meatflag. Get your hand off my balls!
- AnonymousFebruary 20, 2009 at 8:20 AM
cheater much ? hahaReplyDelete
And here's the profile page for the Eurogamer "KILLASNOWMAN214" fraud (unfortunately you can't click to the linked website profile from the GamerCard page itself that's why I'm showing the profile page also as it can be difficult to find unless you know how to use site search in Google):ReplyDelete
- Killerbea3991September 5, 2009 at 6:46 PM
dude it is really interesting and weirdly fun to watch tor gamerscore go up. I wish i even had 100000. oh well dont forget to play brothers in arms hells highway on sep 17th or you will not get another cahance for a whole yearReplyDelete
Sorry, but you're not legit. It said you were last online 8 hours ago playing Star Wars the clone wars, yet you have brutal legend as your last game played with 560 GS, which is impossible even appearing offline. I won't even bother submitting it in, I don't care for leaderboards, but you need to check your stuff bro.ReplyDelete
Sorry, but you're not legit. It said you were last online 8 hours ago playing Star Wars the clone wars, yet you have brutal legend as your last game played with 560 GS, which is impossible even appearing offline. I won't even bother submitting it in, I don't care for leaderboards, but you need to check your stuff bro.ReplyDelete
hey, i have one question for you ...ReplyDelete
i was looking at your games on xbox.com and i noticed that you have 3 'wanted: weapons of fate" ... i'd just like to know why?? can you please post the answer on your next blog?
- AnonymousApril 9, 2010 at 4:11 AM
i think lot´s of gs can be achieved legally, but c´mon the dates you got your bf:bc2 achievements are just impossible to do on your own. do you use friends all the time for boosting your online games? your gamescore is pretty impressive though but you can imagine that it´s hard to believe that, all these scores are earned legally.ReplyDelete
anyway, does gaming mean fun to you? or is just work? i can hardly imagine that all this boosting is fun...
- AnonymousApril 20, 2010 at 4:41 PM
dude do you.. like you i try hard to make that gamerscore...let them talk f**K Em' no life with life...who cares get your game on!!!!ReplyDelete
- Skama DramsMay 24, 2010 at 11:28 AM
yo man your awesome f*ck the haters all day everyday. i got 10,000 gamerscore in 4 weeks so i created a new account and im about to try to go for 100,000 in 8-9 months buy anyway congrats half a mil good luck.ReplyDelete
- AnonymousAugust 13, 2010 at 7:58 AM
saw this super hot picture... check it outReplyDelete
- AnonymousSeptember 6, 2010 at 5:53 AM
what's up I am looking for men to come to my Guild Caesary come take a look. and join my army please! hawks raiders at http://www.lekool.com. Been playing Caesary game for 6 weeks. Caesary has been the best browser game in a long time!ReplyDelete
[url=http://caesary.lekool.com]browser based[/url]
- AnonymousSeptember 7, 2010 at 8:05 AM
hi-ya I am looking for men to come to my Guild Caesary come take a look. and join my army please! hawks raiders at http://www.lekool.com. Been playing Caesary game for 6 weeks. Caesary has been the best browser game in a long time!ReplyDelete
[url=http://caesary.lekool.com]browser based[/url]
- AnonymousJuly 7, 2011 at 5:19 PM
ALL THE PEOPLE THAT THINK THAT THIS JOKE OF A IDIOT IS LEGIT ARE EVEN MORE FUCKING DELUDED THAN HIM A FAKE FUCKING FRAUD THAT SHOULD BE FUCKING BANNED FROM XBOX LIVE FOR LIFE BUT NO THERES NOTHING SAID ABOUT HIM BECAUSE HES FUCKING STALLION83 YOU DONT FOOL ME DICKHEAD IV SEEN ALL THE FUCKING FLAWS ON YOUR GAMERTAG NOT TO MENTION DUPLICATE AND MULIT REGION GAMES ON YOUR FUCKING JTAG I SPIT IN YOUR STINKING CHEATSAVING FACE YOU COCKSUCKING SCUM PRICKS LIKE YOU GAME THE REAL!!! GAMERS A FUCKING BAD NAME YOU LYING LOWLIFE PIECE OF SHIT FUCK YOU AND FUCKING DIE!!!!!!ReplyDelete
- AnonymousJuly 7, 2011 at 5:29 PM
I MEAN WHO THE FUCK DO YOU THINK YOU ARE FILLING ALL YOUR STUPID IDIOT FOLLOWERS WITH STINKING FUCKING BULLSHIT LIES THAT YOUR LEGIT AND THERE EVEN THAT STUPID ENOUGH TO BUY IT WHAT THE FUCK GIVES YOU THE RIGHT TO DO THAT EH!!! FUCKING AMERICAN CHEATING PIECE OF STINKING SHIT YOUR NOTHING BUT A FUCKING JOKE GROW UP AND GET A FUCKING LIFE FUCKING CHEAT ID FUCK YOU UP IF I GOT A CHANCE FUCKING RETAREDReplyDelete
- AnonymousJuly 11, 2011 at 5:55 PM
lol your stupid thick fanbase needs to open there eyes that they have been had by a fucking cheating conman you dont fool me you wanker your account should be deleted you conman piece of shitReplyDelete
- AnonymousAugust 11, 2011 at 4:56 PM
YOU FUCKING LOWLIFE COCKSUCKING CHEATING FRAUD LYING PIECE OF STINKING SHIT I WOULD LOVE TO CAVE YOUR FACE IN AND PISS ALL OVER YOUR STINKING CHEATSAVING CORPSE FUCKING FRAUD WANKER WHO THE FUCK DO YOU THINK YOU ARE FUCKING CHEATING SCUMBAGReplyDelete
- AnonymousSeptember 8, 2011 at 9:21 AM
you can get to fuck you fucking bullshiting cheatsaver suck my fucking cock i like how microsoft says fuckall about you and yet ban the shit out of other people for doing the same thing but no not you because your stinking scum cheating stallion fucking scum piece of shitReplyDelete
- AnonymousSeptember 9, 2011 at 5:40 PM
SUCK MY FUCKING COCK YOU AMERICAN STINKING PIECE OF CHEATSAVING SHIT I KILL YOU FUCKING WANKER CHEATING HACKING BOOSTING LOWLIFE SCUM I SPIT IN YOUR STIKING DOG MUSH FACE FAGGOTReplyDelete
- AnonymousOctober 17, 2011 at 4:22 AM
WHO THE FUCK DO YOU THINK YOU ARE STINKING COCKSUCKING CHEATING MODDING FUCK YOUR NOTHING BUT A FRAUD HAVE TO LAUGH AT ALL THE IDIOTS THAT THINK YOUR LEGIT WHAT A FUCKING SAD PIECE OF WORTHLESS SHIT YOU ARE GET TO FUCK FUCKING WANKER STOP GIVING THIS IDIOT CHEATSAVER ATTENTION PEOPLE HES MAKING A FUCKING MOCK OUT OF YOU FUCKING STINKING FAGGOTReplyDelete
- AnonymousNovember 8, 2011 at 11:04 AM
WAITING ON SKYRIM FOR 5 YEARS WHY?? SO YOU CAN CHEAT THE FUCK OUT OF THAT ASWELL YOU COCK SUCKING LOWLIFE CHEATING SCUM WHO THE FUCK DO YOU THINK YOU ARE YOU LYING BULLSHITING PIECE OF STINKING SHIT GO FUCK YOURSELF FUCKING CHEATReplyDelete
- AnonymousDecember 10, 2011 at 12:57 PM
Y-O-U A-R-E A C-H-E-A-T-I-N-G F-A-G-G-O-T S-U-C-K M-Y C-O-C-KReplyDelete
- AnonymousDecember 10, 2011 at 1:46 PM
YOU ARE A LIAR A CHEAT A CONMAN A FUCKING FAGGOT GO FUCKING DIE SCUMBAG I SPIT IN YOUR FACEReplyDelete
- AnonymousDecember 12, 2011 at 2:05 AM
you sad cheating cuntReplyDelete
- AnonymousJanuary 27, 2012 at 2:56 AM
WHAT A SAD PIECE OF SCUM SHIT SUCK MY COCK YOU FILTHReplyDelete
- AnonymousFebruary 10, 2012 at 4:02 PM
FUCKING CHEATING IDIOTReplyDelete
- AnonymousFebruary 12, 2012 at 1:47 PM
TRYING TO TELL EVERYONE YOU HAVENT GOT A JTAG AND YOUR LEGIT YEAH IM SURE YOU FAKE PIECE OF STINKING SHIT YOUR A FUCKING JOKE MY FRIEND AND ARE A DISGRACE TO GAMERS ALL OVER THE WORLD YOU CHEATING LYING CONMAN PIECE OF SHITReplyDelete
- AnonymousApril 25, 2012 at 10:26 PM
Maybe he cheated, maybe not. Who cares? Doesn't anyone play for fun anymore? Look at these people. (Maybe it's just one...) YOU'RE the one who gives gamers a bad name, what with your ridiculous amount of name calling and immature babbling. It's people like you that make the rest of us not even want to go on to Xbox Live, because this is how you act. If Microsoft should ban anyone, it should be people like you...you make them lose out on potential customers. It doesn't matter to me one bit if this guy cheats. He has to live with his lies, not you. And who knows, maybe YOU'RE wrong, and he didn't. Just think about it before you reply with some idiotic name calling rant.ReplyDelete


text:
Probate and Trust Article
August, 2007
By Jim Roberts
The idea of issuing patents in the area of tax planning has stirred significant controversy and has been reported on before in eReport. As previously noted, the expansion of patents in this area has worried many practitioners for a variety of reasons, most notably the possibility that a strategy conceived for a private client later exposed (typically through a dispute process with the IRS) may be the same as or substantially similar to an existing patent, triggering an infringement claim. And from that claim, discovery could reach into the practitioner's other files, and, if part of a firm, into the files of other practitioners in the firm.
In January of this year, the State Bar of Texas Board of Directors approved a request by that bar's Tax Section to submit to the Internal Revenue Service a response to its request for comment on this area, and, in that response, offering specific legislation to prohibit enforcement of tax strategy patents. The model for the proposed legislation is the language added in 1997 to prevent patents on surgical procedures from being enforced against doctors and hospitals.
Certain members of the Texas bar's Tax Section are reported to have approached members of Congress with the proposed legislation. Others, however, had another idea in mind, and proposed simply to make tax planning methods unpatentable. Apparently winning arguments were employed, and Representatives Rick Boucher and Bob Goodlatte, both of Virgina, proposed an amendment to the patent statutes that would deny patents to tax planning methods (defined as "as a plan, strategy, technique or scheme that is designed to reduce, minimize or defer, or has, when implemented, the effect of reducing, minimizing or deferring, a taxpayer's tax liability.")
This approach appears to one that may carry the day. On July 18, 2007, the House Judiciary Committee approved their proposed amendment.


text:
|Contact Us | Company | Help
|Product Number: BISEKI-PGS-UV-ESSENCE-30
|Price: US$77.97 & FREE Shipping
|Payment methods: Credit/Debit card, PayPal
|Discontinued item
Marketing Manager: Masaharu Nemoto
Tourmaline Biseki PGS UV Essence (50ml) has been discontinued. We recommend the Tourmaline Face Skin Care Cream with UV protection (40g) as an alternative.
Marketing Manager: Masaharu Nemoto
Product summary
*1 Tourmaline is thought to produce more effects when particles are smaller because the total surface area which is in contact with a solution is larger.
*2 The higher the SPF is, the more protection it offers against UV rays. SPF 25 shows that your skin will not burn until it has been exposed to 25 times the amount of solar energy that would normally cause it to burn without UV protection. PA++ shows that it is fairly effective against UV rays.
Leaves no sticky feel or white area, spreads evenly and provides a sensational refreshing feel!
In contrast to many other UV protection products, the Tourmaline Biseki PGS UV Essence does not leave a sticky feel. It provides a sensational refreshing feel.
It spreads evenly throughout your skin, leaves no white residue or sticky feel and protects it from harmful UV rays.
Prevents liver spots and freckles caused by sunburn!
It contains ultra-fine tourmaline powder, plant extracts, gold, platinum and silver and they work gently on the skin.
"SPF 25" and "PA++" provide effective UV protection to prevent liver spots and freckles caused by exposure to the sun.
Gentle to skin!
Its capsule form absorption system soaks up harmful UV rays.
It is gentle to sensitive skin as it does not contain Paraben as a preservative.
Contains chamomilla recutita extract - Makes your skin clearer!
This essence contains chamomilla recutita extract which provides a skin brightening effect.
It makes your skin clearer as you apply it while protecting the skin from UV rays.
Works as foundation - Your make-up will stay on much longer!
It not only protects the skin from UV rays but also works as a foundation base. Works as a foundation base- Your make-up will stay on much longer!
It makes the skin surface smooth, so that make-up stays on well!
Customer Reviews - Tourmaline Biseki PGS UV Essence (50ml)
Related Keywords of Customer Reviews
>> See all
Back to Cosmetics top
· Negative Ion Generators
· Ion Counter
· Tourmaline Sheet
· Tourmaline Stones Powder
· Necklace
· Bracelet
· Bath Products
· Supporter
· Negative Ion Clothing
· Tourmaline Bedding
· Girdle
· Home remedies for stiff neck
· Negative Ion Accessories
· Cosmetics
· Tourmaline Products
What is a Negative Ion? (13)
What is Tourmaline? (7)
Tourmaline explorer (11)
Negative Ion FAQ (53)
Ideal amount of negative ions (1)
Actual negative and positive ion measurements featured in literature and media (1)
How to Choose the Best Negative Ion Generator (aka. Ionizer) (1)
How to Choose the Best Air Ion Counter (1)
How to Choose the Right Negative Ion Products (9)
Misunderstanding about negative ions (10)
Theory of Air Ion (1)
Measurement Theory of Air Ion (1)
Negative ion effects reported in medical literature (13)
Lenard effect (2)
Negative ion counter comparison chart (2)
Corporate customers (15)
Customer Reviews
Universal Plan Co., Ltd.
107 Tachikawa-Lumiere, 3-5-1, Ichiban-cho, Tachikawa-city,
Tokyo, 190-0033, Japan
Phone: +81-42-848-5311 Fax: +81-42-848-5148
|Copyright (C) Universal Plan Co., Ltd. 1993-2018 Japanese Corporate Number: 1012802002452 (National Tax Agency Japan)


text:
4+ Bedroom Sedona Vacation RentalsNarrow Your Search:
Perched up high for superb red rock views, this beautifully decorated home offers lots of super outdoor spaces to enjoy while providing spacious and comfortable Uptown Sedona accommodations. An in demand property, so reserve early!4 Bedrooms, 3 Baths
Sleeps 8
Quail Crossing
A spacious getaway retreat home nestled against the beautiful green fairway of the Oak Creek Country Club. Enjoy excellent outdoor living space and a fabulous view of House Rock. Life is good living like a local in comfortable style!4 Bedrooms, 3 Baths
Sleeps 8
Silver Box Sedona
This very private, historic red rock home offers magnificent views of Cathedral Rock and the surrounding red rocks from inside and out. You are sure to enjoy this properties' elegant yet rustic southwest interiors along with a private pool, hot tub and many outdoor patio areas. This is truly red rock country living!4 Bedrooms, 3 Baths Main & Guest House
Sleeps 8


text:
Welcome Message
We've had an event-filled and fun year! This was the international celebration of Shakespeare's 400th memorial year, and several of The English Speaking Union of New Orleans' programs revolved around this anniversary. In February, the Branch sponsored its annual, high school Shakespeare competition at Tulane and our regional winner went on to compete in New York in the Nationals.
The Branch hosted a program by Tulane University's English Department Head, Mike Kuczynski in May. He spoke about successfully bringing a touring First Folio copy to Tulane. In May, the Branch also hosted international author, Andrea Mays and she spoke about her current book, The Millionaire and the Bard.
In April, the Branch reminisced about Downton Abbey. We co-sponsored an event with WYES and featured author Carol Wallace, co-author of "To Marry an English Lord;" the book that inspired Julian Fellows to create the popular series.
The Queen's Birthday Brunch at NOCC took place in June. This yearly favorite event helps support the student and teacher scholarships that are awarded by our Branch.
A Patron members' party was held in September at the lovely home of Courtney Anne Sarpy.
Fall 2016 programs have included two English VIP speakers/writers. In early October, Oliver Everett, librarian emeritus of Windsor Castle and former personal assistant to both Prince Charles and Princess Diana spoke at Ralph's on the Park. And, in November, author Adrian Tinniswood spoke about his best-selling book, "The Long Weekend: The English Country House 1918 - 1939."
Many other programs are in the planning stages. Stay in touch with the latest news on programs and events on our website: www.esuus.org/neworleans
Many thanks to our members and Friends of ESU for their continued support of the New Orleans Branch of the ESU.
Kind regards,


text: Angela 5th March 2009 No Comments Gorgeous Big pig from Aldridge Prior on Vimeo. Isn't he beautiful?! Share this:TwitterFacebookPinterest ← Hog Heaven Change Spacing – Blog Post Date & Heading → Leave a Reply Cancel reply Your email address will not be published. Required fields are marked *Comment Name * Email * Website Notify me of follow-up comments by email. Notify me of new posts by email.


text:
You're very welcome to explore our private website. But... as you are a professional, we have adapted solutions for your needs, on our professional website.
When was the last time you topped up your Pay&Go? Do you want to know how much you've called, texted and browsed? You will find an overview in MyProximus.
Also check how much calling credit and top-up bonus you have.
View your credit


text:
HOLLAND, MICHIGAN – Egemin AGVs Profiled in Industry Today, In the current issue of Industry Today, Dan Harvey reports Automated guided vehicle systems, commonly called AGVS, once seemed like a fantasy described in an H.G. Wells novel.
In the current issue of Industry Today, Dan Harvey reports Automated guided vehicle systems, commonly called AGVS, once seemed like a fantasy described in an H.G. Wells novel. Today it's becoming commonplace, thanks to Egemin Automation Inc. For almost 40 years, the Michigan-based company pioneered development and deployment. Efficient and cost-effective, the technology bolsters a company's bottom line.
To best understand the impact that automated guided vehicle systems (AGVS) have had on material handling, you need to look at Egemin Automation Inc. and its parent company. Part of Egemin NV, a Belgium-based international organization with outposts on several continents, Egemin Automation is the leading provider of AGVS.
First, a bit of background: In its previous incarnation and as part of the global Egemi NV operation, the Holland, Michigan- based Egemin Automation has manufactured AGVs and warehouse management systems for nearly forty years (it was established in 1976).
Within the history of these two organizations resides the evolution of automated material handling vehicles. Indeed, Egemin Automation's narrative could provide a fascinating PBS documentary (a Ken Burns-style project, perhaps) and David Noble, Egemin Automation's director of marketing and communications, would be the most appropriate narrator.
The full feature article may be read http://www.industrytoday.com/article_view.aspArticleID=2727
Companies in the food, beverage, plastics, consumer goods and big box retail distribution markets purchase Egemin Hybrid Automated Guided Vehicles for flexibility, familiarity, reliability, and affordability. Combined with Egemin's Warehouse Management System (E'wms), organizations realize better than expected returns on investment.
About Dematic Egemin
Dematic Egemin (formerly Egemin Automation) manufactures, implements and services mobile automation solutions that improve warehouse, production and distribution center processes to optimize the supply chain. Product solutions include Automatic Guided Vehicles (AGVs) and in-floor towing solutions. Dematic Egemin comprises the Mobile Automation group within Dematic, with a Center of Excellence located in Holland, Michigan.
About Dematic
Dematic is a leading global supplier of integrated automated technology, software and services to optimize the supply chain. Dematic employs over 6,000 skilled logistics professionals to serve its customers globally, with engineering centers and manufacturing facilities located across the globe. Dematic, Egemin and Retrotech, now integrated under the roof of KION Group, have implemented more than 6,000 integrated systems for a customer base that includes small, medium and large companies doing business in a variety of market sectors.
Headquartered in Grand Rapids, Michigan, Dematic is a member of KION Group, a global leader in industrial trucks, related services, and supply chain solutions. Across more than 100 countries worldwide, the KION Group designs, builds and supports logistics solutions that optimize material and information flow within factories, warehouses and distribution centres. The company is the largest manufacturer of industrial trucks in Europe, the second-largest producer of forklifts globally, and a leading provider of warehouse automation.
John Clark
11818 James St.
Holland, MI 49424
616 393 0101


text:
The JAR file format provides many benefits:
- Security: You can digitally sign the contents of a JAR file. Users who recognize your signature can then optionally grant your software security privileges it wouldn't otherwise have.
- Decreased download time: If your applet is bundled in a JAR file, the applet's class files and associated resources can be downloaded to a browser in a single HTTP transaction without the need for opening a new connection for each file.
- Compression: The JAR format allows you to compress your files for efficient storage.
- Packaging for extensions: The extensions framework provides a means by which you can add functionality to the Java core platform, and the JAR file format defines the packaging for extensions. By using the JAR file format, you can turn your software into extensions as well.
- Package Sealing: Packages stored in JAR files can be optionally sealed so that the package can enforce version consistency. Sealing a package within a JAR file means that all classes defined in that package must be found in the same JAR file.
- Package Versioning: A JAR file can hold data about the files it contains, such as vendor and version information.
- Portability: The mechanism for handling JAR files is a standard part of the Java platform's core API.
This lesson has four sections
1. Using JAR Files: The Basics
JAR files are packaged with the ZIP file format, so you can use them for tasks such as lossless data compression, archiving, decompression, and archive unpacking. These tasks are among the most common uses of JAR files, and you can realize many JAR file benefits using only these basic features.
Even if you want to take advantage of advanced functionality provided by the JAR file format such as electronic signing, you'll first need to become familiar with the fundamental operations.
To perform basic tasks with JAR files, you use the Java Archive Tool provided as part of the Java Development Kit (JDK). Because the Java Archive tool is invoked by using the jar command, this tutorial refers to it as 'the Jar tool'.
As a synopsis and preview of some of the topics to be covered in this section, the following table summarizes common JAR file operations:
Common JAR file operations
|To create a JAR file
|jar cf jar-file input-file(s)
|To view the contents of a JAR file
|jar tf jar-file
|To extract the contents of a JAR file
|jar xf jar-file
|To extract specific files from a JAR file
|jar xf jar-file archived-file(s)
|To run an application packaged as a JAR file (requires the Main-class manifest header)
|java -jar app.jar
|To invoke an applet packaged as a JAR file
|<applet code=AppletClassName.class
width=width height=height>
This section shows you how to perform the most common JAR-file operations, with examples for each of the basic features:
Creating a JAR File
The basic format of the command for creating a JAR file is:
jar cf jar-file input-file(s)
The options and arguments used in this command are:
- The c option indicates that you want to create a JAR file.
- The f option indicates that you want the output to go to a file rather than to stdout.
- jar-file is the name that you want the resulting JAR file to have. You can use any filename for a JAR file. By convention, JAR filenames are given a .jar extension, though this is not required.
- The input-file(s) argument is a space-separated list of one or more files that you want to include in your JAR file. The input-file(s) argument can contain the wildcard * symbol. If any of the "input-files" are directories, the contents of those directories are added to the JAR archive recursively.
The c and f options can appear in either order, but there must not be any space between them.
This command will generate a compressed JAR file and place it in the current directory. The command will also generate a default manifest file for the JAR archive.
Note: The metadata in the JAR file, such as the entry names, comments, and contents of the manifest, must be encoded in UTF8.
You can add any of these additional options to the cf options of the basic command:
jar command options
|Produces verbose output on stdout while the JAR file is being built. The verbose output tells you the name of each file as it's added to the JAR file
|0 (zero)
|Indicates that you don't want the JAR file to be compressed.
|Indicates that the default manifest file should not be produced.
|Used to include manifest information from an existing manifest file. The format for using this option is:
jar cmf existing-manifest jar-file input-file(s)
Warning: The manifest must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
|To change directories during execution of the command. See below for an example.
When you create a JAR file, the time of creation is stored in the JAR file. Therefore, even if the contents of the JAR file do not change, when you create a JAR file multiple times, the resulting files are not exactly identical. You should be aware of this when you are using JAR files in a build environment. It is recommended that you use versioning information in the manifest file, rather than creation time, to control versions of a JAR file.
An Example
Let us look at an example. A simple TicTacToe applet. You can see the source code of this applet by downloading the JDK Demos and Samples bundle from Java SE Downloads. This demo contains class files, audio files, and images having this structure:
TicTacToe folder Hierarchy
The audio and images subdirectories contain sound files and GIF images used by the applet.
You can obtain all these files from jar/examples directory when you download the entire Tutorial online. To package this demo into a single JAR file named TicTacToe.jar, you would run this command from inside the TicTacToe directory:
jar cvf TicTacToe.jar TicTacToe.class audio images
The audio and images arguments represent directories, so the Jar tool will recursively place them and their contents in the JAR file. The generated JAR file TicTacToe.jar will be placed in the current directory. Because the command used the v option for verbose output, you would see something similar to this output when you run the command:
adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)
adding: audio/ (in=0) (out=0) (stored 0%)
adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)
adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)
adding: audio/return.au (in=6558) (out=4401) (deflated 32%)
adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)
adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)
adding: images/ (in=0) (out=0) (stored 0%)
adding: images/cross.gif (in=157) (out=160) (deflated -1%)
adding: images/not.gif (in=158) (out=161) (deflated -1%)
You can see from this output that the JAR file TicTacToe.jar is compressed. The Jar tool compresses files by default. You can turn off the compression feature by using the 0 (zero) option, so that the command would look like:
jar cvf0 TicTacToe.jar TicTacToe.class audio images
You might want to avoid compression, for example, to increase the speed with which a JAR file could be loaded by a browser. Uncompressed JAR files can generally be loaded more quickly than compressed files because the need to decompress the files during loading is eliminated. However, there is a tradeoff in that download time over a network may be longer for larger, uncompressed files.
The Jar tool will accept arguments that use the wildcard * symbol. As long as there weren't any unwanted files in the TicTacToe directory, you could have used this alternative command to construct the JAR file:
jar cvf TicTacToe.jar *
Though the verbose output doesn't indicate it, the Jar tool automatically adds a manifest file to the JAR archive with path name META-INF/MANIFEST.MF. See the Working with Manifest Files: The Basics section for information about manifest files.
In the above example, the files in the archive retained their relative path names and directory structure. The Jar tool provides the -C option that you can use to create a JAR file in which the relative paths of the archived files are not preserved. It's modeled after TAR's -C option.
As an example, suppose you wanted to put audio files and gif images used by the TicTacToe demo into a JAR file, and that you wanted all the files to be on the top level, with no directory hierarchy. You could accomplish that by issuing this command from the parent directory of the images and audio directories:
jar cf ImageAudio.jar -C images . -C audio.
The -C images part of this command directs the Jar tool to go to the images directory, and the . following -C images directs the Jar tool to archive all the contents of that directory. The -C audio . part of the command then does the same with the audio directory. The resulting JAR file would have this table of contents:
By contrast, suppose that you used a command that did not employ the -C option:
jar cf ImageAudio.jar images audio
The resulting JAR file would have this table of contents:
Viewing the Contents of a JAR File
The basic format of the command for viewing the contents of a JAR file is:
jar tf jar-file
Let's look at the options and argument used in this command:
- The t option indicates that you want to view the table of contents of the JAR file.
- The f option indicates that the JAR file whose contents are to be viewed is specified on the command line.
- The jar-file argument is the path and name of the JAR file whose contents you want to view.
The t and f options can appear in either order, but there must not be any space between them.
This command will display the JAR file's table of contents to stdout.
You can optionally add the verbose option, v, to produce additional information about file sizes and last-modified dates in the output.
An Example
Let's use the Jar tool to list the contents of the TicTacToe.jar file we created in the previous section:
jar tf TicTacToe.jar
This command displays the contents of the JAR file to stdout:
The JAR file contains the TicTacToe class file and the audio and images directory, as expected. The output also shows that the JAR file contains a default manifest file, META-INF/MANIFEST.MF, which was automatically placed in the archive by the JAR tool. For more information, see the Understanding the Default Manifest section.
All pathnames are displayed with forward slashes, regardless of the platform or operating system you're using. Paths in JAR files are always relative; you'll never see a path beginning with C:, for example.
The JAR tool will display additional information if you use the v option:
jar tvf TicTacToe.jar
For example, the verbose output for the TicTacToe JAR file would look similar to this:
68 Thu Nov 01 20:00:40 PDT 2012 META-INF/MANIFEST.MF
553 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.class
3708 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.class
9584 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.java
0 Mon Sep 24 21:57:48 PDT 2012 audio/
4032 Mon Sep 24 21:57:48 PDT 2012 audio/beep.au
2566 Mon Sep 24 21:57:48 PDT 2012 audio/ding.au
6558 Mon Sep 24 21:57:48 PDT 2012 audio/return.au
7834 Mon Sep 24 21:57:48 PDT 2012 audio/yahoo1.au
7463 Mon Sep 24 21:57:48 PDT 2012 audio/yahoo2.au
424 Mon Sep 24 21:57:48 PDT 2012 example1.html
0 Mon Sep 24 21:57:48 PDT 2012 images/
157 Mon Sep 24 21:57:48 PDT 2012 images/cross.gif
158 Mon Sep 24 21:57:48 PDT 2012 images/not.gif
Extracting the Contents of a JAR File
The basic command to use for extracting the contents of a JAR file is:
jar xf jar-file [archived-file(s)]
Let's look at the options and arguments in this command:
- The x option indicates that you want to extract files from the JAR archive.
- The f options indicates that the JAR file from which files are to be extracted is specified on the command line, rather than through stdin.
- The jar-file argument is the filename (or path and filename) of the JAR file from which to extract files.
- archived-file(s) is an optional argument consisting of a space-separated list of the files to be extracted from the archive. If this argument is not present, the Jar tool will extract all the files in the archive.
As usual, the order in which the x and f options appear in the command doesn't matter, but there must not be a space between them.
When extracting files, the Jar tool makes copies of the desired files and writes them to the current directory, reproducing the directory structure that the files have in the archive. The original JAR file remains unchanged.
Caution: When it extracts files, the Jar tool will overwrite any existing files having the same pathname as the extracted files.
An Example
Let's extract some files from the TicTacToe JAR file we've been using in previous sections. Recall that the contents of TicTacToe.jar are:
Suppose you want to extract the TicTacToe class file and the cross.gif image file. To do so, you can use this command:
jar xf TicTacToe.jar TicTacToe.class images/cross.gif
This command does two things:
- It places a copy of TicTacToe.class in the current directory.
- It creates the directory images, if it doesn't already exist, and places a copy of cross.gif within it.
The original TicTacToe JAR file remains unchanged.
As many files as desired can be extracted from the JAR file in the same way. When the command doesn't specify which files to extract, the Jar tool extracts all files in the archive. For example, you can extract all the files in the TicTacToe archive by using this command:
jar xf TicTacToe.jar
Updating a JAR File
The Jar tool provides a u option which you can use to update the contents of an existing JAR file by modifying its manifest or by adding files.
The basic command for adding files has this format:
jar uf jar-file input-file(s)
In this command:
- The u option indicates that you want to update an existing JAR file.
- The f option indicates that the JAR file to update is specified on the command line.
- jar-file is the existing JAR file that is to be updated.
- input-file(s) is a space-delimited list of one or more files that you want to add to the JAR file.
Any files already in the archive having the same pathname as a file being added will be overwritten.
When creating a new JAR file, you can optionally use the -C option to indicate a change of directory. For more information, see the Creating a JAR File section.
Recall that TicTacToe.jar has these contents:
Suppose that you want to add the file images/new.gif to the JAR file. You could accomplish that by issuing this command from the parent directory of the images directory:
jar uf TicTacToe.jar images/new.gif
The revised JAR file would have this table of contents:
You can use the -C option to "change directories" during execution of the command. For example:
jar uf TicTacToe.jar -C images new.gif
This command would change to the images directory before adding new.gif to the JAR file. The images directory would not be included in the pathname of new.gif when it's added to the archive, resulting in a table of contents that looks like this:
Running JAR-Packaged Software
Now that you have learned how to create JAR files, how do you actually run the code you packaged? Consider these scenarios:
- Your JAR file contains an applet that is to be run inside a browser.
- Your JAR file contains an application that is to be started from the command line.
- Your JAR file contains code that you want to use as an extension.
This section will cover the first two situations. A separate trail in the tutorial on the extension mechanism covers the use of JAR files as extensions.
Applets Packaged in JAR Files
To start any applet from an HTML file for running inside a browser, you use the applet tag. For more information, see the Java Applets lesson. If the applet is bundled as a JAR file, the only thing you need to do differently is to use the archive parameter to specify the relative path to the JAR file.
As an example, use the TicTacToe demo applet. The applet tag in the HTML file that displays the applet can be marked up like this:
<applet code=TicTacToe.class
width="120" height="120">
If the TicTacToe demo was packaged in a JAR file named TicTacToe.jar, you can modify the applet tag with the addition of an archive parameter:
<applet code=TicTacToe.class
width="120" height="120">
The archive parameter specifies the relative path to the JAR file that contains TicTacToe.class. For this example it is assumed that the JAR file and the HTML file are in the same directory. If they are not, you must include the JAR file's relative path in the archive parameter's value. For example, if the JAR file was one directory below the HTML file in a directory called applets, the applet tag would look like this:
<applet code=TicTacToe.class
width="120" height="120">
JAR Files as Applications
You can run JAR packaged applications with the Java launcher (java command). The basic command is:
java -jar jar-file
The -jar flag tells the launcher that the application is packaged in the JAR file format. You can only specify one JAR file, which must contain all of the application-specific code.
Before you execute this command, make sure that the runtime environment has information about which class within the JAR file is the application's entry point.
To indicate which class is the application's entry point, you must add a Main-Class header to the JAR file's manifest. The header takes the form:
Main-Class: classname
The header's value, classname, is the name of the class that is the application's entry point.
When the Main-Class is set in the manifest file, you can run the application from the command line:
java -jar app.jar
To run the application from the JAR file that is in another directory, you must specify the path of that directory: java -jar path/app.jar
2. Working with Manifest Files: The Basics
JAR files support a wide range of functionality, including electronic signing, version control, package sealing, and others. What gives a JAR file this versatility? The answer is the JAR file's manifest.
The manifest is a special file that can contain information about the files packaged in a JAR file. By tailoring this "meta" information that the manifest contains, you enable the JAR file to serve a variety of purposes.
- Understanding the Default Manifest
When you create a JAR file, it automatically receives a default manifest file. There can be only one manifest file in an archive, and it always has the pathname
When you create a JAR file, the default manifest file simply contains the following:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
These lines show that a manifest's entries take the form of "header: value" pairs. The name of a header is separated from its value by a colon. The default manifest conforms to version 1.0 of the manifest specification and was created by the 1.7.0_06 version of the JDK.
The manifest can also contain information about the other files that are packaged in the archive. Exactly what file information should be recorded in the manifest depends on how you intend to use the JAR file. The default manifest makes no assumptions about what information it should record about other files.
- Modifying a Manifest File
You use the m command-line option to add custom information to the manifest during creation of a JAR file. This section describes the m option.
The Jar tool automatically puts a default manifest with the pathname META-INF/MANIFEST.MF into any JAR file you create. You can enable special JAR file functionality, such as package sealing, by modifying the default manifest. Typically, modifying the default manifest involves adding special-purpose headers to the manifest that allow the JAR file to perform a particular desired function.
To modify the manifest, you must first prepare a text file containing the information you wish to add to the manifest. You then use the Jar tool's m option to add the information in your file to the manifest.
Warning: The text file from which you are creating the manifest must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
The basic command has this format:
jar cfm jar-file manifest-addition input-file(s)
Let's look at the options and arguments used in this command:
- The c option indicates that you want to create a JAR file.
- The m option indicates that you want to merge information from an existing file into the manifest file of the JAR file you're creating.
- The f option indicates that you want the output to go to a file (the JAR file you're creating) rather than to standard output.
- manifest-addition is the name (or path and name) of the existing text file whose contents you want to add to the contents of JAR file's manifest.
- jar-file is the name that you want the resulting JAR file to have.
- The input-file(s) argument is a space-separated list of one or more files that you want to be placed in your JAR file.
The m and f options must be in the same order as the corresponding arguments.
Note: The contents of the manifest must be encoded in UTF-8.
The remaining sections of this lesson demonstrate specific modifications you may want to make to the manifest file.
- Setting an Application's Entry Point
If you have an application bundled in a JAR file, you need some way to indicate which class within the JAR file is your application's entry point. You provide this information with the Main-Class header in the manifest, which has the general form:
Main-Class: classname
The value classname is the name of the class that is your application's entry point.
Recall that the entry point is a class having a method with signature public static void main(String[] args).
After you have set the Main-Class header in the manifest, you then run the JAR file using the following form of the java command:
java -jar JAR-name
The main method of the class specified in the Main-Class header is executed.
An Example
We want to execute the main method in the class MyClass in the package MyPackage when we run the JAR file.
We first create a text file named Manifest.txt with the following contents:
Main-Class: MyPackage.MyClass
Warning: The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
We then create a JAR file named MyJar.jar by entering the following command:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
This creates the JAR file with a manifest with the following contents:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Main-Class: MyPackage.MyClass
When you run the JAR file with the following command, the main method of MyClass executes:
java -jar MyJar.jar
Setting an Entry Point with the JAR Tool
The 'e' flag (for 'entrypoint') creates or overrides the manifest's Main-Class attribute. It can be used while creating or updating a JAR file. Use it to specify the application entry point without editing or creating the manifest file.
For example, this command creates app.jar where the Main-Class attribute value in the manifest is set to MyApp:
jar cfe app.jar MyApp MyApp.class
You can directly invoke this application by running the following command:
java -jar app.jar
If the entrypoint class name is in a package it may use a '.' (dot) character as the delimiter. For example, if Main.class is in a package called foo the entry point can be specified in the following ways:
jar cfe Main.jar foo.Main foo/Main.class
- Adding Classes to the JAR File's Classpath
You may need to reference classes in other JAR files from within a JAR file.
For example, in a typical situation an applet is bundled in a JAR file whose manifest references a different JAR file (or several different JAR files) that serves as utilities for the purposes of that applet.
You specify classes to include in the Class-Path header field in the manifest file of an applet or application. The Class-Path header takes the following form:
Class-Path: jar1-name jar2-name directory-name/jar3-name
By using the Class-Path header in the manifest, you can avoid having to specify a long -classpath flag when invoking Java to run the your application.
Note: The Class-Path header points to classes or JAR files on the local network, not JAR files within the JAR file or classes accessible over Internet protocols. To load classes in JAR files within a JAR file into the class path, you must write custom code to load those classes. For example, if MyJar.jar contains another JAR file called MyUtils.jar, you cannot use the Class-Path header in MyJar.jar's manifest to load classes in MyUtils.jar into the class path.
An Example
We want to load classes in MyUtils.jar into the class path for use in MyJar.jar. These two JAR files are in the same directory.
We first create a text file named Manifest.txt with the following contents:
Class-Path: MyUtils.jar
Warning: The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
We then create a JAR file named MyJar.jar by entering the following command:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
This creates the JAR file with a manifest with the following contents:
Manifest-Version: 1.0
Class-Path: MyUtils.jar
Created-By: 1.7.0_06 (Oracle Corporation)
The classes in MyUtils.jar are now loaded into the class path when you run MyJar.jar.
- Setting Package Version Information
You may need to include package version information in a JAR file's manifest. You provide this information with the following headers in the manifest:
Headers in a manifest
|The name of the specification.
|The title of the specification.
|The version of the specification.
|The vendor of the specification.
|The title of the implementation.
|The build number of the implementation.
|The vendor of the implementation.
One set of such headers can be assigned to each package. The versioning headers should appear directly beneath the Name header for the package. This example shows all the versioning headers:
Name: java/util/
Specification-Title: Java Utility Classes
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-Vendor: Example Tech, Inc.
An Example
We want to include the headers in the example above in the manifest of MyJar.jar.
We first create a text file named Manifest.txt with the following contents:
Name: java/util/
Specification-Title: Java Utility Classes
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-Vendor: Example Tech, Inc.
Warning: The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
We then create a JAR file named MyJar.jar by entering the following command:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
This creates the JAR file with a manifest with the following contents:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Name: java/util/
Specification-Title: Java Utility Classes
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: java.util
Implementation-Version: build57
Implementation-Vendor: Example Tech, Inc.
- Sealing Packages within a JAR File
Packages within JAR files can be optionally sealed, which means that all classes defined in that package must be archived in the same JAR file. You might want to seal a package, for example, to ensure version consistency among the classes in your software.
You seal a package in a JAR file by adding the Sealed header in the manifest, which has the general form:
Name: myCompany/myPackage/
Sealed: true
The value myCompany/myPackage/ is the name of the package to seal.
Note that the package name must end with a "/".
An Example
We want to seal two packages firstPackage and secondPackage in the JAR file MyJar.jar.
We first create a text file named Manifest.txt with the following contents:
Name: myCompany/firstPackage/
Sealed: true
Name: myCompany/secondPackage/
Sealed: true
Warning: The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
We then create a JAR file named MyJar.jar by entering the following command:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
This creates the JAR file with a manifest with the following contents:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Name: myCompany/firstPackage/
Sealed: true
Name: myCompany/secondPackage/
Sealed: true
Sealing JAR Files
If you want to guarantee that all classes in a package come from the same code source, use JAR sealing. A sealed JAR specifies that all packages defined by that JAR are sealed unless overridden on a per-package basis.
To seal a JAR file, use the Sealed manifest header with the value true. For example,
Sealed: true
specifies that all packages in this archive are sealed unless explicitly overridden for particular packages with the Sealed attribute in a manifest entry.
- Enhancing Security with Manifest Attributes
- The following JAR file manifest attributes are available to help ensure the security of your applet or Java Web Start application. Only the Permissions attribute is required.
- The Permissions attribute is used to ensure that the application requests only the level of permissions that is specified in the applet tag or JNLP file used to invoke the application. Use this attribute to help prevent someone from re-deploying an application that is signed with your certificate and running it at a different privilege level.
- This attribute is required in the manifest for the main JAR file.
- The Codebase attribute is used to ensure that the code base of the JAR file is restricted to specific domains. Use this attribute to prevent someone from re-deploying your application on another website for malicious purposes.
- The Application-Name attribute is used to provide the title that is shown in the security prompts for signed applications.
- The Application-Library-Allowable-Codebase attribute is used to identify the locations where your application is expected to be found. Use this attribute to reduce the number of locations shown in the security prompt when the JAR file is in a different location than the JNLP file or the HTML page.
- The Caller-Allowable-Codebase attribute is used to identify the domains from which JavaScript code can make calls to your application. Use this attribute to prevent unknown JavaScript code from accessing your application.
- The Entry-Point attribute is used to identify the classes that are allowed to be used as entry points to your RIA. Use this attribute to prevent unauthorized code from being run from other available entry points in the JAR file.
- The Trusted-Only attribute is used to prevent untrusted components from being loaded.
- The Trusted-Library attribute is used to allow calls between privileged Java code and sandbox Java code without prompting the user for permission.
3. Signing and Verifying JAR Files
You can optionally sign a JAR file with your electronic "signature." Users who verify your signature can grant your JAR-bundled software security privileges that it wouldn't ordinarily have. Conversely, you can verify the signatures of signed JAR files that you want to use.
This lesson shows you how to use the tools provided in the JDK to sign and verify JAR files:
- Understanding Signing and Verification
The Java™ platform enables you to digitally sign JAR files. You digitally sign a file for the same reason you might sign a paper document with pen and ink -- to let readers know that you wrote the document, or at least that the document has your approval.
When you sign a letter, for example, everyone who recognizes your signature can confirm that you wrote the letter. Similarly when you digitally sign a file, anyone who "recognizes" your digital signature knows that the file came from you. The process of "recognizing" electronic signatures is called verification.
When the JAR file is signed, you also have the option of time stamping the signature. Similar to putting a date on a paper document, time stamping the signature identifies when the JAR file was signed. The time stamp can be used to verify that the certificate used to sign the JAR file was valid at the time of signing.
The ability to sign and verify files is an important part of the Java platform's security architecture. Security is controlled by the security policy that's in force at runtime. You can configure the policy to grant security privileges to applets and to applications. For example, you could grant permission to an applet to perform normally forbidden operations such as reading and writing local files or running local executable programs. If you have downloaded some code that's signed by a trusted entity, you can use that fact as a criterion in deciding which security permissions to assign to the code.
Once you (or your browser) have verified that an applet is from a trusted source, you can have the platform relax security restrictions to let the applet perform operations that would ordinarily be forbidden. A trusted applet can have freedoms as specified by the policy file in force.
The Java platform enables signing and verification by using special numbers called public and private keys. Public keys and private keys come in pairs, and they play complementary roles.
The private key is the electronic "pen" with which you can sign a file. As its name implies, your private key is known only to you so that no one else can "forge" your signature. A file signed with your private key can be verified only by the corresponding public key.
Public and private keys alone, however, aren't enough to truly verify a signature. Even if you've verified that a signed file contains a matching key pair, you still need some way to confirm that the public key actually comes from the signer that it purports to come from.
One more element, therefore, is required to make signing and verification work. That additional element is the certificate that the signer includes in a signed JAR file. A certificate is a digitally signed statement from a recognized certification authority that indicates who owns a particular public key. Certification authorities are entities (typically firms specializing in digital security) that are trusted throughout the industry to sign and issue certificates for keys and their owners. In the case of signed JAR files, the certificate indicates who owns the public key contained in the JAR file.
When you sign a JAR file your public key is placed inside the archive along with an associated certificate so that it's easily available for use by anyone wanting to verify your signature.
To summarize digital signing:
- The signer signs the JAR file using a private key.
- The corresponding public key is placed in the JAR file, together with its certificate, so that it is available for use by anyone who wants to verify the signature.
Digests and the Signature File
When you sign a JAR file, each file in the archive is given a digest entry in the archive's manifest. Here's an example of what such an entry might look like:
Name: test/classes/ClassOne.class
SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64=
The digest values are hashes or encoded representations of the contents of the files as they were at the time of signing. A file's digest will change if and only if the file itself changes.
When a JAR file is signed, a signature file is automatically generated and placed in the JAR file's META-INF directory, the same directory that contains the archive's manifest. Signature files have filenames with an .SF extension. Here is an example of the contents of a signature file:
Signature-Version: 1.0
SHA1-Digest-Manifest: h1yS+K9T7DyHtZrtI+LxvgqaMYM=
Created-By: 1.7.0_06 (Oracle Corporation)
Name: test/classes/ClassOne.class
SHA1-Digest: fcav7ShIG6i86xPepmitOVo4vWY=
Name: test/classes/ClassTwo.class
SHA1-Digest: xrQem9snnPhLySDiZyclMlsFdtM=
Name: test/images/ImageOne.gif
SHA1-Digest: kdHbE7kL9ZHLgK7akHttYV4XIa0=
Name: test/images/ImageTwo.gif
SHA1-Digest: mF0D5zpk68R4oaxEqoS9Q7nhm60=
As you can see, the signature file contains digest entries for the archive's files that look similar to the digest-value entries in the manifest. However, while the digest values in the manifest are computed from the files themselves, the digest values in the signature file are computed from the corresponding entries in the manifest. Signature files also contain a digest value for the entire manifest (see the SHA1-Digest-Manifest header in the above example).
When a signed JAR file is being verified, the digests of each of its files are re-computed and compared with the digests recorded in the manifest to ensure that the contents of the JAR file haven't changed since it was signed. As an additional check, digest values for the manifest file itself are re-computed and compared against the values recorded in the signature file.
You can read additional information about signature files on the Manifest Format page of the JDK™ documentation.
The Signature Block File
In addition to the signature file, a signature block file is automatically placed in the META-INF directory when a JAR file is signed. Unlike the manifest file or the signature file, signature block files are not human-readable.
The signature block file contains two elements essential for verification:
- The digital signature for the JAR file that was generated with the signer's private key
- The certificate containing the signer's public key, to be used by anyone wanting to verify the signed JAR file
Signature block filenames typically will have a .DSA extension indicating that they were created by the default Digital Signature Algorithm. Other filename extensions are possible if keys associated with some other standard algorithm are used for signing.
- Signing JAR Files
You use the JAR Signing and Verification Tool to sign JAR files and time stamp the signature. You invoke the JAR Signing and Verification Tool by using the jarsigner command, so we'll refer to it as "Jarsigner" for short.
To sign a JAR file, you must first have a private key. Private keys and their associated public-key certificates are stored in password-protected databases called keystores. A keystore can hold the keys of many potential signers. Each key in the keystore can be identified by an alias which is typically the name of the signer who owns the key. The key belonging to Rita Jones might have the alias "rita", for example.
The basic form of the command for signing a JAR file is
jarsigner jar-file alias
In this command:
- jar-file is the pathname of the JAR file that's to be signed.
- alias is the alias identifying the private key that's to be used to sign the JAR file, and the key's associated certificate.
The Jarsigner tool will prompt you for the passwords for the keystore and alias.
This basic form of the command assumes that the keystore to be used is in a file named .keystore in your home directory. It will create signature and signature block files with names x.SF and x.DSA respectively, where x is the first eight letters of the alias, all converted to upper case. This basic command will overwrite the original JAR file with the signed JAR file.
In practice, you might want to use one or more of the command options that are available. For example, time stamping the signature is encouraged so that any tool used to deploy your application can verify that the certificate used to sign the JAR file was valid at the time that the file was signed. A warning is issued by the Jarsigner tool if a time stamp is not included.
Options precede the jar-file pathname. The following table describes the options that are available:
Jarsigner Command Options
|-keystore url
|Specifies a keystore to be used if you don't want to use the .keystore default database.
|-sigfile file
|Specifies the base name for the .SF and .DSA files if you don't want the base name to be taken from your alias. file must be composed only of upper case letters (A-Z), numerals (0-9), hyphen (-), and underscore (_).
|-signedjar file
|Specifies the name of the signed JAR file to be generated if you don't want the original unsigned file to be overwritten with the signed file.
|-tsa url
|Generates a time stamp for the signature using the Time Stamping Authority (TSA) identified by the URL.
|-tsacert alias
|Generates a time stamp for the signature using the TSA's public key certificate identified by alias.
|-altsigner class
|Indicates that an alternative signing mechanism be used to time stamp the signature. The fully-qualified class name identifies the class used.
|-altsignerpath classpathlist
|Provides the path to the class identified by the altsigner option and any JAR files that the class depends on.
Let's look at a couple of examples of signing a JAR file with the Jarsigner tool. In these examples, we will assume the following:
- Your alias is "johndoe".
- The keystore you want to use is in a file named "mykeys" in the current working directory.
- The TSA that you want to use to time stamp the signature is located at http://tsa.url.example.com.
Under these assumptions, you could use this command to sign a JAR file named app.jar:
jarsigner -keystore mykeys -tsa http://tsa.url.example.com app.jar johndoe
You will be prompted to enter the passwords for both the keystore and your alias. Because this command doesn't make use of the -sigfile option, the .SF and .DSA files it creates would be named JOHNDOE.SF and JOHNDOE.DSA. Because the command doesn't use the -signedjar option, the resulting signed file will overwrite the original version of app.jar.
Let's look at what would happen if you used a different combination of options:
jarsigner -keystore mykeys -sigfile SIG -signedjar SignedApp.jar
-tsacert testalias app.jar johndoe
The signature and signature block files would be named SIG.SF and SIG.DSA, respectively, and the signed JAR file SignedApp.jar would be placed in the current directory. The original unsigned JAR file would remain unchanged. Also, the signature would be time stamped with the TSA's public key certificate identified as testalias.
- Verifying Signed JAR Files
Typically, verification of signed JAR files will be the responsibility of your Java™ Runtime Environment. Your browser will verify signed applets that it downloads. Signed applications invoked with the -jar option of the interpreter will be verified by the runtime environment.
However, you can verify signed JAR files yourself by using the Jarsigner tool. You might want to do this, for example, to test a signed JAR file that you've prepared.
The basic command to use for verifying a signed JAR file is:
jarsigner -verify jar-file
This command will verify the JAR file's signature and ensure that the files in the archive haven't changed since it was signed. You'll see the following message if the verification is successful:
jar verified.
If you try to verify an unsigned JAR file, the following message results:
jar is unsigned. (signatures missing or not parsable)
If the verification fails, an appropriate message is displayed. For example, if the contents of a JAR file have changed since the JAR file was signed, a message similar to the following will result if you try to verify the file:
jarsigner: java.lang.SecurityException: invalid SHA1
signature file digest for test/classes/Manifest.class
4. Using JAR-related APIs
- The java.util.jar package
- The java.net.JarURLConnection class
- The java.net.URLClassLoader class
To give you an idea of the possibilities that are opened up by these new APIs, this lesson guides you through the inner workings of a sample application called JarRunner.
An Example - The JarRunner Application
JarRunner enables you to run an application that's bundled in a JAR file by specifying the JAR file's URL on the command line. For example, if an application called TargetApp were bundled in a JAR file at http://www.example.com/TargetApp.jar, you could run the application using this command:
java JarRunner http://www.example.com/TargetApp.jar
In order for JarRunner to work, it must be able to perform the following tasks, all of which are accomplished by using the new APIs:
- Access the remote JAR file and establish a communications link with it.
- Inspect the JAR file's manifest to see which of the classes in the archive is the main class.
- Load the classes in the JAR file.
The JarRunner application consists of two classes, JarRunner and JarClassLoader. JarRunner delegates most of the JAR-handling tasks to the JarClassLoader class. JarClassLoader extends the java.net.URLClassLoader class. You can browse the source code for the JarRunner and JarClassLoader classes before proceeding with the lesson:
- JarRunner.java
- JarClassLoader.java
This lesson has two parts:
- The JarClassLoader Class
The JarClassLoader class extends java.net.URLClassLoader. As its name implies, URLClassLoader is designed to be used for loading classes and resources that are accessed by searching a set of URLs. The URLs can refer either to directories or to JAR files.
In addition to subclassing URLClassLoader, JarClassLoader also makes use of features in two other new JAR-related APIs, the java.util.jar package and the java.net.JarURLConnection class. In this section, we'll look in detail at the constructor and two methods of JarClassLoader.
The JarClassLoader Constructor
The constructor takes an instance of java.net.URL as an argument. The URL passed to this constructor will be used elsewhere in JarClassLoader to find the JAR file from which classes are to be loaded.
public JarClassLoader(URL url) {
super(new URL[] { url });
this.url = url;
The URL object is passed to the constructor of the superclass, URLClassLoader, which takes a URL[] array, rather than a single URL instance, as an argument.
The getMainClassName Method
Once a JarClassLoader object is constructed with the URL of a JAR-bundled application, it's going to need a way to determine which class in the JAR file is the application's entry point. That's the job of the getMainClassName method:
public String getMainClassName() throws IOException {
URL u = new URL("jar", "", url + "!/");
JarURLConnection uc = (JarURLConnection)u.openConnection();
Attributes attr = uc.getMainAttributes();
return attr != null
? attr.getValue(Attributes.Name.MAIN_CLASS)
: null;
You may recall from a previous lesson that a JAR-bundled application's entry point is specified by the Main-Class header of the JAR file's manifest. To understand how getMainClassName accesses the Main-Class header value, let's look at the method in detail, paying special attention to the new JAR-handling features that it uses:
The JarURLConnection class and JAR URLs
The getMainClassName method uses the JAR URL format specified by the java.net.JarURLConnection class. The syntax for the URL of a JAR file is as in this example:
The terminating !/ separator indicates that the URL refers to an entire JAR file. Anything following the separator refers to specific JAR-file contents, as in this example:
The first line in the getMainClassName method is:
URL u = new URL("jar", "", url + "!/");
This statement constructs a new URL object representing a JAR URL, appending the !/ separator to the URL that was used in creating the JarClassLoader instance.
The java.net.JarURLConnection class
This class represents a communications link between an application and a JAR file. It has methods for accessing the JAR file's manifest. The second line of getMainClassName is:
JarURLConnection uc = (JarURLConnection)u.openConnection();
In this statement, URL instance created in the first line opens a URLConnection. The URLConnection instance is then cast to JarURLConnection so it can take advantage of JarURLConnection's JAR-handling features.
Fetching Manifest Attributes: java.util.jar.Attributes
With a JarURLConnection open to a JAR file, you can access the header information in the JAR file's manifest by using the getMainAttributes method of JarURLConnection. This method returns an instance of java.util.jar.Attributes, a class that maps header names in JAR-file manifests with their associated string values. The third line in getMainClassName creates an Attributes object:
Attributes attr = uc.getMainAttributes();
To get the value of the manifest's Main-Class header, the fourth line of getMainClassName invokes the Attributes.getValue method:
return attr != null
? attr.getValue(Attributes.Name.MAIN_CLASS)
: null;
The method's argument, Attributes.Name.MAIN_CLASS, specifies that it's the value of the Main-Class header that you want. (The Attributes.Name class also provides static fields such as MANIFEST_VERSION, CLASS_PATH, and SEALED for specifying other standard manifest headers.)
The invokeClass Method
We've seen how JarURLClassLoader can identify the main class in a JAR-bundled application. The last method to consider, JarURLClassLoader.invokeClass, enables that main class to be invoked to launch the JAR-bundled application:
public void invokeClass(String name, String[] args)
throws ClassNotFoundException,
Class c = loadClass(name);
Method m = c.getMethod("main", new Class[] { args.getClass() });
int mods = m.getModifiers();
if (m.getReturnType() != void.class || !Modifier.isStatic(mods) ||
!Modifier.isPublic(mods)) {
throw new NoSuchMethodException("main");
try {
m.invoke(null, new Object[] { args });
} catch (IllegalAccessException e) {
// This should not happen, as we have disabled access checks
The invokeClass method takes two arguments: the name of the application's entry-point class and an array of string arguments to pass to the entry-point class's main method. First, the main class is loaded:
Class c = loadClass(name);
The loadClass method is inherited from java.lang.ClassLoader.
Once the main class is loaded, the reflection API of the java.lang.reflect package is used to pass the arguments to the class and launch it. You can refer to the tutorial on The Reflection API for a review of reflection.
- The JarRunner Class
The JarRunner application is launched with a command of this form:
java JarRunner url [arguments]
In the previous section, we've seen how JarClassLoader is able to identify and load the main class of a JAR-bundled application from a given URL. To complete the JarRunner application, therefore, we need to be able to take a URL and any arguments from the command line, and pass them to an instance of JarClassLoader. These tasks belong to the JarRunner class, the entry point of the JarRunner application.
It begins by creating a java.net.URL object from the URL specified on the command line:
public static void main(String[] args) {
if (args.length < 1) {
URL url = null;
try {
url = new URL(args[0]);
} catch (MalformedURLException e) {
fatal("Invalid URL: " + args[0]);
If args.length < 1, that means no URL was specified on the command line, so a usage message is printed. If the first command-line argument is a good URL, a new URL object is created to represent it.
Next, JarRunner creates a new instance of JarClassLoader, passing to the constructor the URL that was specified on the command-line:
JarClassLoader cl = new JarClassLoader(url);
As we saw in the previous section, it's through JarClassLoader that JarRunner taps into the JAR-handling APIs.
The URL that's passed to the JarClassLoader constructor is the URL of the JAR-bundled application that you want to run. JarRunner next calls the class loader's getMainClassName method to identify the entry-point class for the application:
String name = null;
try {
name = cl.getMainClassName();
} catch (IOException e) {
System.err.println("I/O error while loading JAR file:");
if (name == null) {
fatal("Specified jar file does not contain a 'Main-Class'" +
" manifest attribute");
The key statement is highlighted in bold. The other statements are for error handling.
Once JarRunner has identified the application's entry-point class, only two steps remain: passing any arguments to the application and actually launching the application. JarRunner performs these steps with this code:
// Get arguments for the application
String[] newArgs = new String[args.length - 1];
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
// Invoke application's main class
try {
cl.invokeClass(name, newArgs);
} catch (ClassNotFoundException e) {
fatal("Class not found: " + name);
} catch (NoSuchMethodException e) {
fatal("Class does not define a 'main' method: " + name);
} catch (InvocationTargetException e) {
Recall that the first command-line argument was the URL of the JAR-bundled application. Any arguments to be passed to that application are therefore in element 1 and beyond in the args array. JarRunner takes those elements, and creates a new array called newArgs to pass to the application (bold line above). JarRunner then passes the entry-point's class name and the new argument list to the invokeClass method of JarClassLoader. As we saw in the previous section, invokeClass will load the application's entry-point class, pass it any arguments, and launch the application.
Answers to Questions and Exercises: JAR
1. Question: How do you invoke an applet that is packaged as a JAR file?
Answer: To invoke an applet packaged as a JAR file, open a page containing the applet:
<applet code=AppletClassName.class
width=320 height=240>
2. Question: What is the purpose of the -e option in a jar command?
Answer: This option is available since Java SE 6. It sets the entrypoint as the application entry point for stand-alone applications bundled into executable jar file. The use of this option creates or overrides the Main-Class attribute value in the manifest file. This option can be used during creation of jar file or while updating the jar file. This option specifies the application entry point without editing or creating the manifest file. For example, this command creates Main.jar where the Main-Class attribute value in the manifest is set to Main:
jar cfe Main.jar Main Main.class
3. Question: What is the significance of the manifest in a JAR file?
Answer: A JAR file's manifest provides meta-information about the other contents of the JAR file. The manifest itself resides in META-INF/MANIFEST.mf. The meta-information can include
- Dependencies on other jar files
- The name of a class to run when "java -jar file.jar" is invoked
- Versioning information
- Security information
4. Question: How do you modify a JAR's manifest file?
Answer: Typically, modifying the default manifest involves adding special-purpose headers to the manifest that allow the JAR file to perform a particular desired function.
To modify the manifest, you must first prepare a text file with a complete and valid manifest file. You then use the JAR tool's m option to add the information in your file to the manifest.
The manifest file your prepare must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.


text:
About us
College Newsletter
To be a part of Oman College of Management & Technology (OCMT) for helping in maintaining the educational and management quality and acting on its continuous process for the improvement of the whole College community.
The mission of the QA Department is to establish the College quality culture that will enhance and maintain its improvement for quality in achieving its main purpose.
OCMT aspires to become a leading institution of higher education nationally and regionally, where quality and excellence are
maintained in line with international standards, to produce top calibre graduates with knowledge, skills and attitude.


text:
Apollo Landing Dollar Mens Bracelet Coin Watch
Apollo Landing Coin Watch Dollar
From the Coinwatch company. The dial is a handpicked reverse side of a genuine US Susan B. Anthony Dollar, also known as the Apollo Landing Dollar. The face of the coin is enhanced with extreme precision 24K gold accents. A Swiss parts quartz movement powers each watch, which is secured within a stylish stainless steel case and bracelet. Each includes a lifetime warranty against defect from Aurista and is accompanied by a unique numbered signet and certificate of authenticity.
Model number: UC125-MAL2-2
Movement: Swiss parts
Crystal: Sapphire crystal
Dial coin: Apollo Landing Dollar
Dial finish: Silver & 24kt gold
Case material: 3 micron 18k gold over stainless-steel
Case diameter: 31mm
Band material: Solid link stainless-steel
Band finish: Bi-tone 3 micron 18k gold over stainless-steel
Band width: 18mm
Fastener: Push-button butterfly clasp
Water resistant depth: 100 ft.
Warranty type: Aurista Lifetime
Authenticity: Unique numbered signet and certificate
Gender: Male
Packaging: Aurista Presentation Box


text:
Travels in space and in timeOriginally a more serious form of poetry, limericks are now more commonly used for silly poems, with the last line generally being the punch line. This book contains a good mix of serious and silly limericks, as well as a nice balance of clever wordplay and terribly contrived puns.
In verses which end in rhyme
Don't overlook
Our limerick book
Which is raising money for MIND
In the TARDIS the Doctor has prideWhilst the limericks are not exactly Shakespeare quality, they never claim to be and that is what is so endearing about this collection. The limericks are the sort that one would come up with on a whim to make someone smile and indeed most of them achieve this. The poems have all been sent in by fans, evidenced by the writer's name accompanying each limerick. It's easy to tell from reading them that these people have a passion for Doctor Who and are enjoying expressing it in five rhyming lines. They also cover a range of themes from the show, including the Doctors, companions, villains and specific episodes.
Its beauty can't be denied
But it's always a chore
To get through the door
When the damn thing lands on its side
Susan, Vick, BarbaraThe limericks are also accompanied by a number of fan made illustrations. Again, whilst they may never hang on the wall of the Louvre, they are great pieces of fan art in their own right. They could have easily used photos to illustrate the limericks, but the author has extended the personal touch by inviting people to contribute their own drawings and sketches. This adds to the feel that it is made by the fans for the fans and encourages those of all abilities to be creative.
Polly, Zoe and Sara
Leela, Romana, Ace
Nyssa, Tegan, Grace
Rose, Amy, Martha and Clara
The only place this book does fall down a little, in my opinion, is the organisation of the poems. Although the limericks are grouped together - so all the Second Doctor poems are together, for example - there is no clearly defined structure, so the poems flit between a specific Doctor, a favourite alien or a chosen story. It would have been nice to have the different Doctors, companions, aliens and so on grouped together under headers or in different chapters. However, this doesn't detract from the enjoyment of the book and it is the sort of book that you are more likely to just open to a random page to read a few now than rather than use as a source for referencing facts, so it is not such a big deal.
Whilst visiting the Post Office Tower
The Doctor discovered a great power
It controlled Dodo's mind
So he left her behind
And he'd forgotten her within the hour
Overall, this book is a shining example of all that is great about Doctor a Who: people of all abilities from all over coming together to do something creative and do a bit of good for a very worthy cause. I think the Doctor would be proud to have this in his library.
The Unofficial Doctor Who Limerick Book is available from £8 on the Long Scarf Publishing website. If you would like to buy copy of the book or for more information their other charitable publications, visit the website here
For more information on MIND, visit the charity's website here
The Unofficial Doctor Who Limerick Book is available from £8 on the Long Scarf Publishing website. If you would like to buy copy of the book or for more information their other charitable publications, visit the website here
For more information on MIND, visit the charity's website here