text:
Quick Links
Shop All Jewelry
*Select UPS 2 DAY at Checkout
FW10168 In Stock
*Select UPS 2 DAY at Checkout
If you're looking for a classic yet stylish new fashion watch, you'll love this classic style silver tone roman numeral fashion watch! This 7 inch silvertone watch has a foldover clasp and is made of beautiful silver links. The square face features stylized roman numerals and is outlined in silver. This watch goes well with any of our styles of silver jewelry and makes the perfect everyday accessory!
Eve's Addiction.com wants you to be a happy customer. We want you to be completely satisfied with the sterling silver jewelry that you receive from us, as we only sell high quality silver and cubic zirconia cz jewelry. We do understand that you may not like your purchase for some reason.
You may return or exchange your jewelry within 60 days of purchase if you are not satisfied with it. The jewelry must be returned in its original condition for a refund or exchange. Engraved, personalized, photo, monogram, name and initial, and clearance items are not returnable or exchangeable. To return jewelry to EvesAddiction.com, please follow the steps at the following link.


text:
- Tuner: ATSC/QAM/NTSC
- Resolution: 1920x1080 (1080p)
- Refresh Rate: 60Hz
- Connectors:
- 2x HDMI
- 1x Composite
- 1x Component
- 1x USB
- 1x Audio
We've heard your feedback and are continuing to build a better Slickdeals. Click here to check out the updated site.
Frontpage Deal
Buydig via Ebay has 60" Panasonic Viera TC-P60U50 600Hz Plasma HDTV for $798 with free shipping. Thanks DJ3xclusive
Original Post
DJ3xclusive ( ) Jan. 27, 2013 at 8:55am
Crisp, Clear Moving Picture: 600Hz Sub-field Drive
View Forum Thread
111 Comments
savemybucks ( ) Jan. 27, 2013 at 9:21am
can one tell if screen is matte or glossy?
derek533 ( ) Jan. 27, 2013 at 9:26am
Excellent tv for the money. I bought one right after black friday from Amazon and couldn't be happier. Just make sure you can control room lighting as it is a glossy screen. Also, be aware that this is a "dumb" tv with no apps, no 3D, or other costly gadgets. It's just a basic tv with a gorgeous picture. It has two HDMI ports and one set of component inputs as well as a digital optical and that's it. If you need more ports, you'll have to use a cheap hdmi switcher (check monoprice).
You won't find a better picture for the price.
The thumbnail picture of the tv is WRONG. The pedestal is no longer a duck foot style pedestal and looks more like a Samsung or LG. Also, the tv has a clear piece trim plastic all around the bezel giving it a modernized look. Amazon has the same picture as the thumbnail but if you can go to Sam's to check it out in person, you'll see what I mean. The model at Sam's is the P60U54 but it's the exact same set, just a differentiating model number. This set has the same pedestal as the ST and GT series do
Baddogdaddy ( ) Jan. 27, 2013 at 9:27am
Now this is what I've been waiting for! Time to bite
EddieLasVegas ( ) Jan. 27, 2013 at 9:28am
Certainly a decent deal, but I would caution anyone buying a large TV to look at the return policy for defective merchandise.
For Buydig, the onus is on the buyer and I can't imagine what it cost to ship a large TV any distance. plus there's the bother of actually keeping the original shipping materials to package it properly for return.
tennis8363 ( ) Jan. 27, 2013 at 9:29am
Good review of the TV here:
tennis8363 ( ) Jan. 27, 2013 at 9:31am
"Television Returns
If you aren't 100% satisfied with your TV purchase, you may return any factory-sealed new or open like-new Television within 45 days from the shipping date. We'll gladly exchange it or give you a refund, whichever you prefer. All returned or exchanged items must be in their original box and include all the original packing material, manuals, and accessories. When you receive your order, we recommend that you keep all packing materials in case you need to return the TV.
If you just don't like it - we will accept your return; we just ask that you pay for return shipping and processing fees. You'll also need to pack the TV in its original box with all original packing material, and accessories. We'll arrange for a special shipping carrier to pick up TV (over 41 inches) from your home. We will provide you with the return shipping and processing fee prior to arranging the TV pick up or exchange.
If your TV was damaged in shipping - It is important that you inspect the TV (not only the box it came in) prior to signing for it. If the TV is damaged (not the carton), please refuse the delivery and contact us at 1.800.572.3224. All damage related claims must be reported within 48 hours after delivery. A replacement will be sent immediately after we are notified about the damage.
If your TV does not seem to function properly - we'll help troubleshoot and determine how to solve the problem; if we can't, we'll arrange for service to assess the television. If the service doesn't resolve the issue, we can arrange for a refund or exchange."
codeyf ( ) Jan. 27, 2013 at 9:51am
I bought this TV on Thursday when it was on 2-day special at Fry's for the same price. The stand is square. The pictures on Pansonic's own site [panasonic.com] also show the square pedestal. Researching on the differences between the U50 and U54, I also found reports that the U54 is missing some of the picture adjustment settings that are on the U50.
Also confirming that the screen is glossy.
Great set though, at a great price. I'm very happy with mine.
audiokingman ( ) Jan. 27, 2013 at 9:53am
We should also point out that it runs on 120 volts.
markzabin ( ) Jan. 27, 2013 at 9:57am
No tax either, finally pulled the trigger on this. This was pretty much TV of the year for dumb budget 60" TVs. Hoping the return policy doesn't bite me in the ass. Frys has had this at $700 before though. EPP had this at $765 with tax prior to selling out.
haydeecm ( ) Jan. 27, 2013 at 9:57am
Seriously debating this or the P55UT50 that will be at costco starting on 1/31 for $749. That one will be about $20 more after taxes, and ease of mind of dealing with costco, but I would really rather have the 5 extra inches than the smart TV/3D which I'll probably never use.
derek533 ( ) Jan. 27, 2013 at 9:58am
codeyf ( ) Jan. 27, 2013 at 10:05am
If that doesn't sway you, the actual screen area of a 60" is 20% more than that of a 55"
Popular Deals (By Votes)
Use Coupon Code: HOLIDAZE
at American Eagle Outfitters

subset: commoncrawl


text:
San Francisco 49ers Apparel & 49ers Merchandise at the Official 49ers Online Store
San Francisco 49ers Gear and Apparel at the Official 49ers Fan Shop
Shop for all the latest and most popular 49ers gear, apparel and merchandise here at the Official Online Store of the San Francisco 49ers! Browse our huge collection of 49ers items and find everything you need to show your 49ers pride all year round. Gear up for the next Niners game with the latest San Francisco 49ers jerseys, t-shirts, jackets, hats, and much more. But don't stop at just apparel! You can also show your support with great merchandise like 49ers keychains, jewelry, car accessories, and 49ers iPhone Cases! Our collection of 49ers gear comes from some of the most recognized and popular brands like Nike, '47 Brand, and New Era. Shop49ers.com is the official online retailer of the San Francisco 49ers and your #1 source for all 49ers clothing for men, women, and kids!
The holiday season is almost here! Start your search for Christmas gifts with new 49ers apparel and merchandise! Also, be sure to deck your halls appropriately with great 49ers holiday items, including decorations like Christmas tree ornaments and much more! For any 49ers holiday products you need this Christmas season, Shop49ers.com is your number one source!
Popular Collections: Salute to Service Gear | Levi's Stadium Inaugural Season | Cold Weather Gear | Gloves | Jackets
Popular Players: Colin Kaepernick | Patrick Willis | Aldon Smith | Frank Gore | Vernon Davis | Anquan Boldin | Michael Crabtree


text:
Wood Buddha Face Wall Hanging 18 18
So beautiful! This is such a lovely piece. It looks like it would cost several hundred more than it does. It was shipped with amazing speed too. If you are looking for a large piece to create a feeling of warmth and serenity this is well worth it. February 12, 2013
THE GREATEST I HAVENT BEEN SO HAPPY TO OWN A PIECE IN A LONG TIME....LOVE THIS PIECE SOOO MUCH August 30, 2011
LOVE this! I love this piece!! I actually purchased this as a Christmas gift for my father. I can't wait to give it to him!!! When I brought it home, I found a perfect place for it in our home and want one for myself!! December 22, 2010
Gorgeous piece! I absolutely love this piece! It's in my bedroom, above my dresser, flanked by wrought iron sconces. It really makes a statement and creates a atmosphere of peace. December 22, 2010
beautiful I put this piece above my bed in my bedroom. The first thing I see before I go to bed at night and again when I wake up in the morning is the buddha's reflection in the mirror above my dresser. It reminds me to keep peace in my heart all day long. It is a great purchase and it could have EASILY been priced well above what it was. I recommend it to anyone!!! December 22, 2010
Buy it! Im so happy with this! It seemed a bit pricey so I bought it when I recieved a coupon. If I knew how great it was going to be I would have totally bought it at full price. It seemed smaller in the store- at home its quite large and a stunning wall hanging. Initially I was going to have it out on our patio to set the mood- but I loved it so much I ended up putting it in our entranceway. It looks amazing and actually a great deal for the price. December 21, 2010
OHM-AZING I looooooove this! Its hanging above my bed and it makes my room look soo lovely. I love the wood, if you have any doubt about getting it. Just do it, best purchase and such a great price1 November 18, 2010
Buddha is even better in person This Buddha wall art is absolutely gorgeous. It looks like an antique but very modern as well - a truly timeless piece. The wood grain is beautiful and looks very high end. A friend saw it and priced it at $500, much more than the actual price. November 14, 2010
Related Products
We've discovered an assortment of luxury Wall Hanging ...
We've discovered an assortment of luxury Wall Hanging ...
We've discovered an assortment of luxury Wall Hanging ...
Recently Viewed Items


text:
Congratulations! Our 40th Reunion was truly a memorable occasion. It was wonderful to see so many classmates come back to Rochester for this celebration.
We couldn't have asked for a better weekend! It was full of world-class entertainment, first-rate programs that delighted our senses and stimulated our minds, and lots of opportunities to reminisce with classmates.
Whether you were able to join us in person or in spirit, congratulations on our 40 years!
MD Class of 1972 Reunion Committee


text:
- Home /
- Single Deionization Canister
Dual Inline TDS Meter DM-1 - HM Digital$29.99 As low as: $28.99
Clear Refillable Cartridge for DI Resin
Starting at: $7.99
BRS Bulk Deionization Resin - Color Changing
Starting at: $12.99
Reverse Osmosis Float Valve
Starting at: $11.99
No down side By Frag Shark on 12/16/2014Frag Shark would recommend this product to a friendThis is a simple effective upgrade for an RO system. It extends the life of your DI resin by allowing the first DI to be completely depleted before being replaced. It is also an easy way to add a DI stage to a RO unite that doesn't have one.
Great way to get TDS to 0 By Nanoman28g on 12/11/2014Nanoman28g would recommend this product to a friendI had been using a three stage RO unit for years with a TDS reading of 10, but most people say that is not ideal for reef tanks, so I went ahead and installed this DI unit, which brought my TDS down to 0. Great product and very easy to install.
It's great! By Steve on 12/7/2014Steve would recommend this product to a friendI had a BRS 5 stage system already, but added this canister to get the most from my DI resin. Even when the resin has changed color, it still has a little bit of life in it, so this way I can stretch my DI dollars a little bit. It's identical to the canisters I already have and as an added bonus - it came already full of resin! Bonus!
good deal By chillermike on 11/15/2014chillermike would recommend this product to a friendI purchased this because I wanted to get the most out of my resin. I added it to my existing 5 stage system. When the 1st di changes all the way to brown the second one is picking up the slack. At that point simply change the cartilage and add new resin to the depleted one. No waste I get the most out of the resin for a 40.00 dollar investment and by the way you get 13.00 dollars worth or resin with the canister kind of a no brainer you are only paying 26.00 for the canister such a great deal.
Easy to install By Bob on 11/9/2014Bob would recommend this product to a friendEasy to install. This 2nd unit will prevent producing TDS water greater than 0 for my reef tank when the first unit is exhausted.
A must have for your R.O. unit. By Michael on 9/2/2014Michael would recommend this product to a friendInstantly solved my TDS problem. I had been struggling with TDS readings from 3-10 for several months. New filters did not solve my problem. I installed the BRS DI Canister and my TDS went to zero. As usual with BRS, the item was top quality and shipping was fast.
Works great! By Van on 6/1/2014Van would recommend this product to a friendI have an RO filtration system at home for drinking water. It's a great system but not good enough for tank water IMO so I decided to add this canister. Installation was a breeze - I tee'd off the final output of the RO system to this DI canister and so far, it works great! TDS went from 15-20 to a solid 0 and has remained this for months now. Very happy with it and my fish/corals are having a blast as well.
DI By Rich on 3/31/2014Rich would recommend this product to a friendA great purchase well constructed can be installed in minutes and really removes TDS a must have for the water quality you need in the tank
perfect! By matt on 3/5/2014matt would recommend this product to a friendAfter my RO unit it was still at 70 TDS. This unit pulled it down to 0 and has made over 100 gallons so far keeping my fish and coral very happy!
Works Great. By Red7Xero on 1/21/2014Red7Xero would recommend this product to a friendMy old DI resin was 1 year old and still had an output of 0ppm, I decided to change it out with my carbon and sediment filters. And because I wanted to add another carbon to the mix, I bought this to add another stage and with it including the DI made it an easy purchase.
After installing the sediment, 2 carbons, and the new DI units, taking around 10mins, thanks to BRS TV series, it worked like a charm.
Thanks again BRS.
update on earlier review By Aquaticfan on 1/7/2014Aquaticfan would recommend this product to a friendI am sad to report that the system can not handle the high TDS still coming from my existing Water softener system. I thought it could but after a 5 gallon fill, the TDS is rising. I will have to get an RO system to connect it too. I still love the product though.
Excellent canister By Aquaticfan on 12/18/2013Aquaticfan would recommend this product to a friendI am so happy with this canister. I had a TDS of 178 before and now its Zero. I currently had a Pelican Water system on the entire house but needed that extra DI stage for the tank. This worked perfectly, I had to go to Home Depot to buy a few more parts to be able to hook it up to the spikit that has filtered water but I am very happy. Would definitely recommend. No more buying water and lugging those 5 gallon jugs. Yippee
There are no videos related to this product.
Previously Asked Questions
by Brian on January 31, 2014, @9:03 AM
At which point do i add the DI to my existing RO filters. Is it after the membrain, or after the third canister?
Bulk Reef Supply Hi Brian,
A DI resin filter would be the last filter in the set, so after the membrane the last stop before your water goes to your storage container.
by Nathan on February 27, 2014, @5:16 PM
Hi every one is telling me i should run a dual di. Set up my ? Is what will i benafit from adding another di. To my system if im allready at 0ppm tds no one has been able to tell me. Thanks in advance for the advice
Bulk Reef Supply Hi Nathan,
Running a dual DI will not make your water any cleaner as a single DI will bring it down to 0 TDS. What the second DI chamber does is allow you to get a bit more out of your DI resin.
For example, if you have 5 tds going into your DI resin you should have 0 coming out. When that goes up to 1, its time to change your DI resin out even though technically its not fully exhausted (its still removing 4 of the 5 TDS). A dual DI allows you to fully exhaust that resin and the second DI filters out the 1-5 TDS that gets through. That way your still putting 0 TDS in the tank while fully exhausting your first cartridge.
by Kelly on October 19, 2013, @11:46 AM
Does this come with the color changing DI resin or normal resin?
Bulk Reef Supply Hey Kelly,
All of our DI's come with the color changing resin.
by Matt on January 27, 2014, @11:52 AM
Is it normal for the canister to be filled with air instead of water once up and running?
Bulk Reef Supply Hi Matt,
Perfectly normal and the way it should be. DI canisters work on an upflow principle compared to the radial flow of the other filters so the air is just a bubble that can't escape, nothing to worry about!
Deal of the Day!
Easy Blade Algae ScraperEnds in
Regular Price: $12.99
Special Price: $10.9900:00:00:00
- Rock & Sand
- Auto Top Off
- Cal, Alk & Trace
- Controllers & Testing
- Filter Media
- Fish & Coral Foods
- Fragging Supplies
- Heaters & Chillers
- Lighting
Pumps & Plumbing
- Powerheads
- Submersible Pumps
- External Pumps
- Plumbing
- Dosing Pumps
- Air Pumps & Accessories
- Salt & Maintenance
- Skimmers, Reactors & Filtration
- Sumps, Tanks & Refugiums
- Specials, New & BRS Gear
Send us your feedback
Let us know.
Company Info
Main: 763-432-9691
Fax: 763-710-4777
Phone Hours: 7am - 7pm CST M-Th
10am-4pm CST Friday
Email: email@example.com
6325 Sandburg Road, Suite 400
Golden Valley, MN 55427 Map
View Larger Map 6325 Sandburg Road, Suite 400, Golden Valley, MN 55427


text:
Boston bombing suspect's hearing rescheduled againBoston bombing suspect's hearing rescheduled again
5 of 25
Investigators work near the location where the previous night a suspect in the Boston Marathon bombings was arrested, Saturday, April 20, 2013, in Watertown, Mass. Police captured Dzhokhar Tsarnaev, 19, the surviving Boston Marathon bombing suspect, in a backyard boat after a wild car chase and gun battle earlier in the day left his older brother dead. (AP Photo/Matt Rourke)
Photo by Matt Rourke
Photo by Matt Rourke
5 of 25
Most popular
In the community


text:
Welcome to Osaka Japanese Hibachi Steakhouse and Sushi Bar, north Florida's #1 hibachi steakhouse.
Here at Osaka we use the freshest of items with ingenious creativity and expect the highest of quality in our products.
Come visit us for a memorable dining experience where dishes are prepared at your table by our Expert Chefs, with only the finest in steak, chicken and seafood delights.
With your dinner we offer a full service bar as well as sushi and sashimi from our exclusive sushi bar. We specialize in Birthdays, Anniversaries and all party affairs. Banquet facilities are also available. Osaka Japanese Hibachi Steakhouse and Sushi Bar is conveniently located on the north-east side of Tallahassee Florida.
If you have any questions about any of our items please ask the Head Chef for assistance. Thank you once more for being a part of the Osaka Family.
View our lunch menu


text:
Wedding DJs near morris,in
Other Wedding Vendors near morris,in:
|Wedding Band (81)
|Wedding Beauty & Health (239)
|Wedding Catering (179)
|Wedding Ceremony Music (78)
|Wedding DJ (281)
|Wedding Dress & Attire (179)
|Wedding Event Rentals (82)
|Wedding Favors & Gifts (67)
|Wedding Flowers (263)
|Wedding Invitations (154)
|Wedding Jewelry (127)
|Wedding Lighting & Decor (22)
|Wedding Officiant (174)
|Wedding Photography (731)
|Wedding Planning (160)
|Wedding Rehearsal Dinner (45)
|Wedding Transportation (54)
|Wedding Travel Agents (31)
|Wedding Venue (544)
|Wedding Videography (94)
You've chosen the maximum (5) items in this category. Compare your items or remove and replace with another.Compare Now
0 Vendors Selected. Select up to 5 vendors to compare in one of the following categories: Venues, Bands, Catering, Photography or Videographers.
Absolute-DJs: Wedding DJ Specialist's31 Reviews
Discover The Secret To A Stress Free Wedding!
Discover The Secret To A Stress-Free Wedding! Absolute-DJs offers only the best DJ/MC's in the area but can also provide additional options such...(more)
Contact Us Website
Expires: Jul 09, 2022
Save $100 off of any wedding package if you are having your wedding in the months of January, February or March. Mention discount when you call to book.
DJ's by Big Daddy Walker Productions41 Reviews
Where music brings people together!
Milford, OH | 513-678-2107
Voted Best of Weddings by The Knot for 2011. Big Daddy Walker Productions is the Premier DJ Services Company in the Ohio, Kentucky and Indiana...(more)
The Music Concierge41 Reviews
Music For Any Occasion
Cincinnati, OH | 513-368-0222
The Music Concierge is a boutique mobile DJ service specializing in weddings & private parties. We take pride in providing extraordinary value...(more)
Liftoff Entertainment17 Reviews
Launching Legendary Events
Dayton, OH | 937-926-3354
Liftoff Entertainment provides high quality DJ and Photo Booth services In the Dayton, Cincinnati, and Northern Kentucky Areas. Our goal at every...(more)
Greg Lee Entertainment50 Reviews
Much more than music, we make memories!
Taylor Mill, KY | 513-328-6221
Greg is a full time professional entertainer, not a weekend hobbyist. He performs nearly 250 events annually. *Soloist ...(more)
Rock'N Ron's DJ & Lighting39 Reviews
Cincinnati Oh, Dayton Oh, Greendale, IN , Northern Ky, KY | 859-441-3795
My goal is to provide you with High Quality Entertainment and do it for a affordable price. I take great pride in the opportunity to make sure your...(more)
Showtime Cincinnati11 Reviews
We take Memorable to Unforgettable
Cincinnati, OH | 513-746-9846
Wedding Reception Packages from just $499.00! Call us at (513) Show-time (746-9846). Why Choose Us? With Showtime Cincinnati you get...(more)
Old School Entertainment LLC8 Reviews
Making Your Event The Very Best!
Cincinnati, OH | 513-919-3204
Lets Get Your Party Started! If you're looking for the premier Cincinnati DJ, for your special event, you've come to the right place....(more)
Contact Us Website
5 Hours DJ service, 4 speaker premium sound, upgraded dance lighting package, online planning tools, emcee duties, all set up, break down and consultations.
Horizon Entertainment39 Reviews
Entertainment for all of life's occasions!
Hamilton, OH | 513-417-7828
Horizon Entertainment is Southwest Ohio's premier DJ company. Our disc jockeys specialize in weddings, corporate events, school dances and much...(more)
Contact Us Website
When you book with Horizon Entertainment let us know that you found us on WeddingWire.com and you will receive 5 free uplights (white) with your paid "All-Inclusive Reception Package."
All Sounds Unlimited55 Reviews
Call Us for "The Party You Wish Would Never End"
Urbana, OH | 888-390-7680
How do you make your wedding fun? By getting entertainment with Integrity, Creativity, Attitude, Energy and Flair! All Sounds Unlimited features...(more)
Hey! Mr. DJ Entertainment78 Reviews
Events With Imagination
Cincinnnati, OH | 513-617-5817
Hey! Mr. DJ, Entertainment is a DJ service that offers, creative, unique, personalized and fun wedding receptions. We are looking for the bride who...(more)
Contact Us Website
Book Now For only $100 Down. It's quick and easy to get the best wedding DJ in Cincinnati reserved for your event!
Zahnadu Productions23 Reviews
Your Event is Special...We Help Make it More Special!
Fairfield, OH | 513-829-1245
Your Event is Special...We Help Make It More Special! Specializing in Music from the 1930's to Today, and Professional Lighting for Your Event...(more)
Contact Us Website
We offer a 10% discount to active or reserve military personnel and veterans,
"Music By Request" DJ Butlers77 Reviews
Making Dream Events A Reality
Ft Mitchell, KY | 859-331-3866
Welcome Future Brides and Grooms, Congratulations on your up and coming wedding! At "Music By Request" DJ Butlers, we realize the importance of...(more)
All The Right Tunes39 Reviews
The Evolution Of Entertainment
Miamisburg, OH | 937-414-0079
Let them hear the joyful music that fills your heart! Your wedding day is the most important and exhilarating day of your life and you want to...(more)
Cincy Wedding Services33 Reviews
Cincinnati, OH | 513-283-0166
Cincy Wedding Services offers Photobooth, DJ, and Limo Service. Please visit our website or call us today at 513-910-1820.(more)
Good Vibrations Mobile DJ Service27 Reviews
New Carlisle, OH | 937-845-1471
Good Vibrations Mobile Deejay Service takes pride in taking that extra step to make everything just right for your celebration. With over 25 years...(more)
Atmospheric Productions Event Services & Rentals40 Reviews
We deliver the quality entertainment you expect at a price you deserve.
Cincinnati, OH | 513-231-3007
Specializing in DJ/MC services, photo booth rental, video slideshow production, event up-lighting and pin spotting, custom monogram projection, and...(more)
Starfire Professional DJ Entertainment (Dr. Jim McCluskey)6 Reviews
Xenia, OH | 614-764-8610
Starfire Professional DJ Entertainment Service has been family owned and operated for over 33 years. Our mission is to offer the finest, most...(more)
DJcincy.com Mobile DJ Entertainment LLC24 Reviews
Fairfield, OH | 513-379-2396
I offer multiple wedding packages to fit your budget and meet your needs. Weddings are a time to celebrate with friends and family so I know...(more)
Perfect Day DJs44 Reviews
Cincinnati, OH | 859-835-9735
We're here to provide a professional and personalized experience, making your day a Perfect Day. Not only will we create a worry-free night full of...(more)


text:
mouse over photo to zoom click for larger image
Travelers Classic Black Zipper Crop
Zippered cuffs bring a modern edge to the swingy style of our Travelers crops.
- Our finely ribbed Travelers ™ knit is wrinkle-resistant.
- Our crops sit just below the waist, for a modern fit with maximum comfort.
- Pull-on styling with elastic waistband.
- Length: 22".
- 95% acetate, 5% spandex.
- Machine wash. Imported.
We're so sorry: this item sold out sooner than expected. For an equally chic substitute, please call our Personal Service Associates at 1.888.855.4986. Or click on Chico's Chat below for immediate assistance.


text:
Unlock the entire Houzz
613 Ambler, PA Draperies and Window Treatments
No matter how minimalist in style, a homeowner who prefers windows completely bare is in the minority. Whether the window treatment is as simple as Venetian blinds or Roman shades or as complex as ornate, layered draperies, it is a signature element of a Ambler, PA home's style — not to mention it has practical attributes. More
Window Works (973) 535-5860
Window Works is a full service custom window treatment and awning company. We are family owned and operated since 1982 by Vincent and LuAnn Nigara and their cousin Bill Campesi.... Read More
Becker Home (484) 300-9019
Award-winning designer and custom window treatment workroom for retail and wholesale clients. Specializing in couture fabrication techniques and designs. Contact us today for you in-home consultation! See my projects
We are a third-generation Family Business. We sell Window Treatments by Hunter Douglas, Benjamin Moore Paints and a full line of Retractable Awnings. We Love what we do and we... Read More
Allure Window Treatments (215) 463-0440
Our focus is on providing our clients with design excellence and a degree of service that is unparalleled. See my projects
Rosen Interiors (610) 565-7756
Rosen Interiors has been a family business for over 60 years. We provide Custom Window Treatments, Upholstery, Slipcovers, Color Consultations & Interior Decoration to the greater Philadelphia area. See my projects
CMI Interiors, Inc. (973) 912-0922
CMI is a premiere source for both motorized and manual window covering products serving the interior designer, architectural and home automation community. CMI represents the... Read More
Sue Sampson - Window Treatment Expert (203) 913-8204
For more than 25 years, I've been the leading window treatment and valance pattern designer for The McCall Pattern Company – with more than 4.5 million patterns sold - while... Read More
Distinctive Designs (610) 416-1946
Distinctive Designs offers a one stop shopping solution for all your custom window coverings and home accessories need. Beautify your bare windows with stunning custom soft... Read More
Drapery Design (610) 408-0885
Sophisticated Custom Window Coverings from Design through Installation Drapery Design creates classic window treatments with a fresh modern take on traditional designs. Our... Read More
Main Line Window Decor (610) 202-2561
We are a family owned and operated window treatment workroom and service the greater Philadelphia region with fabric window treatments, shades, blinds, bedding and pillows. By... Read More
Custom Alley Slipcovers (609) 294-1875
Owned and operated by Allison Brown for over 20 years, Custom Alley Slipcovers strives to provide customers in the Southern New Jersery area with custom slipcovers and sewing... Read More
Window Fashion Designs & More (215) 362-8643
Susan, owner of Window Fashion Designs & More has a passion for assisting her clients in the decision of designing beautifully dressed custom window treatment's and fabricates... Read More
A & J Interiors, LLC (908) 256-6338
Window fashion expert creating cozy homes for busy families using draperies, valances, shades, blinds, shutters, color and accessories. Read More
Bella Home Interiors (856) 468-4400
Bella Home Interiors is a full service Interior Decorating and Window Treatment Company. The owners, Connie and Debbie are completely hands-on in every aspect of each project;... Read More
Window Concepts (484) 318-8238
Window Concepts is your one-stop source for all your interior design and home décor needs, including custom window shades, shutters, draperies, curtains and more. We carry the... Read More
Aubusson Home (610) 688-9630
We are a design center to the public! We can get you any fabric, trimming, wallpaper available. Custom curtains and pillows. We also carry furniture, accessories, lighting, rugs,... Read More
dePasquale Designs (610) 209-4777
Boutique styling and distinctive fabrics are featured. As a full service window treatment specialist, I will assist with your home or business design project and guarantee you... Read More
List your business here for free - Learn More


text:
Williams deputy team principal Claire Williams believes the Formula One rules changes that come into effect this year have come at the perfect time for the Wantage team.
After finishing ninth in the Constructors' Championship in 2013, Williams have made several changes to the team, including switching to Mercedes engines and recruiting former Ferrari man Felipe Massa as their lead driver.
"It is very timely as if you don't have that level of rule change it would be much harder to try and improve year on year," Williams told Autosport.
"I don't think that the [competitive] form will change too significantly, but what it does offer is an opportunity for teams who are a second or more off the pace to look at what they are doing and look at doing things in a different way.
"That's what we are trying to do and all of the changes we have made this year have been about making the most of the resources we have to embrace the rule changes for next year.
"One of the things that we were so impressed by when we first started talking to Felipe is his enthusiasm to help build the team and drive performance.
"He was so enthused by that [and] that is what we wanted. It's about coming into the factory as much as he can, talking to the engineers all the time.
"So yes, obviously, we expect him to do that at the racetrack but we also expect him to be back at the factory helping to develop.
"He is not one of those guys who just wants to turn up at the race track - he is an integral part now because of the experience he has. He should be able to help the process.
"He wants to muck in, get his hands dirty and everyone knows we love those kinds of drivers at Williams."
Any reproduction, publication or redistribution of this material without the written agreement of 365 Media Group is strictly forbidden.


text:
A-Trak Steps In to Provide Soundtrack for Latest Sid Lee/Adidas Work
Nothing like a little beat-dropping to wind down the day. So, let's let Montreal native and renowned producer/mixmaster DJ A-Trak (just watch this from 16 years ago) do his thing for a minute in a new Sid Lee spot for adidas Originals, which is part of a larger global campaign for the brand called "Unite All Originals."
While the days of Daft Punk, Snoop and David Beckham joining forces in the name of geekdom may have long since gone, the party continues in Sid Lee's world with the aid of A-Trak, retro visuals by French artist SoMe (who also directs the clip) and a horde of hip youths. And, thanks to the clever editing and digital production work from partners such as B-Reel Stockholm, the interplay between music and visuals provides for a fairly hypnotic experience. Hey, we'll take this over the usual late afternoon stupor any day. Credits after the jump.


text:
Heading on a vacation for the holidays? You lucky devil! Whether you will be lounging on a beach, shacking up in a chalet, sightseeing in a new city, or enjoying mother earth on an eco safari, we have your packing checklist covered. You may even be able to squeeze a few gifts into that suitcase.
Sands, Slopes or Skyscrapers: How To Pack For Any Vacation Destination
- 1 of 25
- 2 of 25
Tropical vacations are wondrous for many reasons, but wearing minimal clothing is definitely at the top of the list. Reach for pieces in saturated colors, like an embroidered top and woven bag, and pair with embellished sandals, cat-eye glasses and a flirty bikini.
- 3 of 25
Zimmermann Verano Laser Ra Ra Bikini ($260)
- 4 of 25
Maliparmi Sandal ($186) in Yellow
- 5 of 25
Gypset Greek Dashiki Shirt ($250) in Blue
- 6 of 25
Urban Outfitters Spitfire Yazhoo Sunglasses ($39) in Brown
- 7 of 25
Sophie Anderson Hermana Stripe Bucket Bag ($284)
- 8 of 25
There's the ski wear and the après-ski outfit, not to mention loads of layers you'll have to pack to keep you warm. Keep it focused with this lightweight but incredibly warm jacket from Aether (its a cozy layer that won't make you look chunky), and throw in a pair of Fair Isle leggings, turquoise goggles, a pom pom hat, and bright boots.
- 9 of 25
Fraueunschuh Knitted Pom-Pom Beanie ($238)
- 10 of 25
Aether Apparel Alta Jacket ($395) in Total Eclipse
- 11 of 25
J.Crew Fair Isle Leggings ($98) in Navy Hydrangea Green
- 12 of 25
Anon Tempest Goggle ($140) in Green
- 13 of 25
Ilse Jacobsen Hornbaek Rubber Boot ($170) in Orange
- 14 of 25
For days wandering around a new city, you need comfortable footwear and a versatile coat to take you from day to night. A chic pajama top can do double duty as a blouse, and bright gloves and a camera strap will add a pop of color to neutral separates.
- 15 of 25
Sheinside Blue Contrast Zipper Coat ($32)
- 16 of 25
Jil Sander Gloves ($115) in Red
- 17 of 25
La Canadienne Bistro Ankle Boot ($315)
- 18 of 25
SFK Deluxe Camera Strap ($94) in Yellow
- 19 of 25
Alessandra Mackenzie Blair Pajama Shirt ($340) in Sky Blue
- 20 of 25
Whether you are practicing yoga in Malibu or tracking lions in Tanzania, turn to earthy accessories like woven flats and a straw hat. An army green safari jacket can be worn by day over a white tee, or by night over an animal-print shirtdress.
- 21 of 25
Goorin Brothers Melody Floppy Hat ($54) in Natural
- 22 of 25
Raquel Allegra Basic Tee ($115)
- 23 of 25
Topshop Village Woven Ballet Pumps ($15) in Tan
- 24 of 25
Current Elliott Cotton Infantry Jacket ($370) in Army Green
- 25 of 25
A.L.C. Leopard Print Shirt Dress ($498)


text:
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
This is a proposal for a general-purpose bootstrap class for Zend Framework MVC applications. The objectives are (1) to implement a reusable and extensible class for bootstrapping web-based applications, and (2) establish a convention for configuration-driven application instances.
New Proposal Under Consideration
This proposal has been rejected, but a new proposal is currently under consideration: Zend_Application - Ben Scholzen. Please see that proposal for current APIs and discussion.
Zend Framework: Zend_Application Component Proposal
Proposed Component Name
Developer Notes
Bill Karwin
1.1 - 17 August 2006: Initial proposal posting. (wiki revision: 13)
Table of Contents
1. Overview
2. References
3. Component Requirements, Constraints, and Acceptance Criteria
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
This is a proposal for a general-purpose bootstrap class for Zend Framework MVC applications. The objectives are (1) to implement a reusable and extensible class for bootstrapping web-based applications, and (2) establish a convention for configuration-driven application instances.
This is a proposal for a general-purpose bootstrap class for Zend Framework MVC applications. The objectives are (1) to implement a reusable and extensible class for bootstrapping web-based applications, and (2) establish a convention for configuration-driven application instances.
4. Dependencies on Other Framework Components
- Zend_Application_Resource
- Zend_Config
- Zend_Controller_Front
- Zend_Loader
- Zend_Registry
5. Theory of Operation
The Zend_Application class is a general-purpose, configurable bootstrap class. It configures an instances of Zend_Controller_Front, sets an autload callback, and dispatches to the front controller. The only parameter you are required to give to Zend_Application is the home directory of the application. Then use the run() method to start processing the request.
An example of the simplest usage of Zend_Application is the following:
The Zend_Application constructor processes the home directory argument with the realpath() PHP function. If this function determines that the path is invalid, a Zend_Application_Exception is thrown.
Using Config Files
Zend_Application attemps to read a "front" config upon startup. This config contains data specific to configuring the Front Controller and other resources that are application-wide, such as the Zend_Session.
Specify the config in the second constructor argument, or in the setConfig() method. You can specify the config in the following ways:
- Zend_Config object instance - you can load the config file yourself in your bootstrap script, and pass the object to Zend_Application.
- PHP array - you can declare a plain PHP array, so you don't have to write config data in a file at all.
- Path to the config file.
- Path to the directory containing the config file. The directory is searched for a file called 'config.ini' or 'config.xml'. The Zend_Config subtype is determined from the file extension. If more than one config.* file exists, it is non-deterministic which file is used, so it is best to specify the full filename. Only files named 'config.*' are searched; if you have a different filename, it is best to specify the full filename.
- If you specify nothing, or a PHP null, this means to search the application home directory according to the behavior in the previous case.
In addition to the "front" config file, each application module may have its own config file. This config file specifies module-level resources and other module-specific data. Also, routes can be defined in each module's config file. Zend_Application includes a front controller plugin that loads the appropriate config files for a ll modules and adds all routes prior to routing. Then after routing, during the pre-dispatch step, the plugin processes other entries in the module's config file, so that resources are loaded only for the module to which the request is routed.
By default, this config file is located in a directory "config" which is a sister to the "controllers", "modules", and "views" directories.
The name of the "config" directory can be customized with a property in the front config file called 'moduleConfigDirectoryName', but that directory name is still relative to a given module's home directory.
Both .ini and .xml formats are supported.
Registering Autoloader
By default, Zend_Application registers an autoload callback, using Zend_Loader::registerAutoload().
You can specify properties 'autoloadEnabled' and 'autoloadClass' in the front config, to override the behavior of whether or not to enable autoloading, and the class to use for the autoload callback.
Also, if you subclass Zend_Application, you can specify different default values in the protected class members $_autoloadEnabled and $_autoloadClass
Configuring Zend_Application
Zend_Application uses config properties to declare customizations to the front controller and other application bootstrapping. None of the config properties are mandatory.
The following config properties are recognized:
|String names the class for the resource plugin to use to read module config files.
|Boolean; enable the autoload callback if true. Default true.
|String names the class to use for the autoload callback. Default Zend_Loader.
|String names the base URL of the application. This is passed to the front controller's setBaseUrl() method.
|String specify the modules' config file name, to be found by the front controller resource plugin.
|String specifies the config section to be read in the modules' config files.
|Array or Zend_Config object, maps one or more module names to their respective controller directories, in the manner supported by the front controller's setControllerDirectory() method.
|String names the class to instantiate the front controller. The class must be loadable and extend Zend_Controller_Front.
|If this is the Boolean true value, the application support modules, and the modules are assumed to exist under the application home directory. If this is a string, array, or Zend_Config object, it maps one or more module names to their respective module directories, in the manner supported by the front controller's addModuleDirectory() method.
|String names the directory for config files, under each module directory. Default is "config".
|String names the directory for controllers, under each module directory. Default is "controllers".
|String names the directory for models, under each module directory. Default is "models".
|Array or Zend_Config object, maps parameter names to values, in the manner supported by the front controller's setParams() method.
|String names the class to instantiate for processing module config files.
|Boolean; this is passed to the front controller's returnResponse() method.
|Zend_Config object, contains a heirarchy of properties to declare routing rules for the front controller, in the manner supported by the rewrite router's addConfig() method.
|Boolean; this is passed to the Zend_Application_Resource class. Default is true.
|Boolean; this is passed the the front controller's throwExceptions() method.
If any other customization of the front controller is needed, the developer can call the Zend_Application getFrontController() method to return the front controller object.
Creating Application Resources
Zend_Application includes a front controller plugin, called Zend_Application_Plugin. This plugin uses the proposed Zend_Application_Resource component. This component performs the following tasks prior to routing:
- Read each module's config file.
- Add all routes defined in the config files (this may supplement the routes defined in the front config file, or may be used instead of defining routes in the front config).
When a request is routed to a given module, additionally perform the following tasks:
- Store the config object loaded from the module config dir in the registry, under registry key 'config'.
- Instantiate resource classes declared in that config file.
- Store the resources in the registry.
If the current request is in a non-default module, the config object and the resources instantiated by Zend_Application_Resource are stored in a new Zend_Registry object, which is in turn stored in the registry. The key for the new registry is the name of the module. This is to avoid key conflicts if two modules use the same key name.
Thus if a module named "blog" loads resources based on the module's config file, code within the blog module can retrieve a resource from the registry-within-a-registry as follows:
6. Milestones / Tasks
Milestone 1: [DONE] Publish proposal.
Milestone 2: Revise proposal, approve for Incubator development.
Milestone 3: Commit working prototype to Incubator.
Milestone 4: Commit working unit tests.
Milestone 5: Write end-user documentation.
Milestone 6: Release prototype in incubator.
Milestone 7: Revise implementation, tests, and documentation based on feedback.
Milestone 8: Merge changes from Incubator to Core.
7. Class Index
- Zend_Application
- Zend_Application_Plugin
- Zend_Application_Exception
- Zend_Application_Resource_FrontController
8. Use Cases
|UC01: Bootstrap a simple web application
|UC02: Specify a base URL for requests
|UC03: Bootstrap script of web application with default module location
|UC04: Adding a custom module location
|UC05: Adding multiple custom module locations
|UC06: Adding custom controller locations
|UC07: Customizing the Front Controller
|UC08: Declaring routes in an array
|UC09: Declaring routes in a config file
9. Class Skeletons
See proof-of-concept code and unit tests in the Zend Framework Laboratory. Check it out using Subversion (http://framework.zend.com/svn/laboratory), or browse it online using FishEye (http://framework.zend.com/fisheye/browse/Zend_Framework_Laboratory/library/Zend).]]></ac:plain-text-body></ac:macro>]]></ac:plain-text-body></ac:macro>
Aug 17, 2007

I've been working on something similar to this, but it's nice to see that zf will have an offical component to handle the bootstrap. Knowing bootstrap/configuration errors/exceptions can occur, I feel that some sort of errorHandler might be useful to either redirect to a static page etc.. At the moment some of us are doing something like this:

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
try {
} catch (Exception $e) {
// Debugging
if ((bool) $appConfig->debug)Unknown macro: { throw $e; }
// An exception has occured during setup, dispatch the SetupError Action of the Error Handling Controller.
Zend_Loader::loadClass('ErrorController', rtrim($appConfig->paths->modules, '/
') . '/default/controllers');
// Build request
$request = new Zend_Controller_Request_Http();
->setParam('error_handler', new ArrayObject(
array('exception' => $e,
'type' => Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER), ArrayObject::ARRAY_AS_PROPS));
$errorController = new ErrorController($request, new Zend_Controller_Response_Http());
echo $errorController->run();
Aug 20, 2007

This is difficult to make a generic error handler for exceptions encountered in the bootstrap process.

What if the exception is due to the MVC framework itself failing? How can you redirect to an error display if that occurs? In the bootstrap code, the only thing we can be certain is working is the web server's ability to run a PHP script.

So I would suggest we make a class Zend_Application_ErrorHandler, which does something like what you show above, but it also does its own exception catching, and redirects to config-specified static HTML page in case of catastrophe.

Aug 18, 2007

My bootstraps were getting bloated and repetitious. I had a go at creating an application class. I found it troublesome in practice when trying to accommodate different set ups like for example using some of the code in current proposals where special set ups can be needed.

So I re-wrote it as an entirely static helper class and that seems to be working out. It allows me to cut down on the bootstrap bloat while retaining flexibility.

My failure at an instantiated approach could have been just inadequate design. I just wanted to share my experience, and look forward to seeing how this proposal goes.

Here's the methods I'm using if it's of any interest (not pretty enough to show in full):

<ac:link><ri:page ri:content-title="CODE" /></ac:link>

public static function customizePhpBehaviour($appDir = null, $configEnv = null)

public static function prependIncludePath($path)

public static function getAppDir()

public static function getAppDirAssumingSelfUnderPublicDir()

public static function getConfigEnv()

public static function isProductionServerDetected()

public static function customizePhpErrorReporting($configEnv)

public static function checkVersionRequirements($options)

public static function getAppName()

public static function boot($appDir = null, $configEnv = null)

public static function bootstrapZendFramework($appDir = null, $configEnv = null)

public static function runApp()

public static function initRegistry($appDir = null, $configEnv = 'production')

public static function setupController($request = null, $response = null)

public static function portablePath($path)

<ac:link><ri:page ri:content-title="/CODE" /></ac:link>

Aug 20, 2007

Right – using an object-oriented approach can help with reducing bloat.

The proposal shows how we can achieve great flexibility and customization, using a mix of several programming mechanisms:

Object-oriented extensibility (i.e. subclassing)

Configuration specified in config files

Configuration by method calls and parameter values

Plugin architecture to enable extra functionality (see proposal for Zend_Application_Resource)

Aug 20, 2007

Would it be possible to include a method so that it could create a Zend_Cache_Page() object? Like so:

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$frontendOptions = array('lifetime' => 7200,
'debug_header' => true,
'regexps' => array('^/$' => array('cache' => true)));
$backendOptions = array('cache_dir' => '/tmp/');
$app = new Zend_Application('/path/to/app/home');
$app->cache('Page', 'File', $frontendOptions, $backendOptions);

Either that or it would be great to allow an init() method (similar to the Controller, Db classes) for user-defined hooks that fire off after construction so that objects like this could be created within a sub-classed instance of Zend_Application.

Will the path parameters supplied to Zend_Application be converted to realpaths during processing? I find it a bit less verbose and more elegant to supply:-

'../application/controllers'

dirname(dirname(FILE) . '/application')

One last feature request would be to auto-discover an environment based on its server name or IP address. That way you can pass 'production' or 'development' to your Zend_Config_Ini file without needing to hardcode it into your bootstrap - handy if you're sharing a site in a number of different locations simultaneously. I've got the code for this sitting in the Zend_Environment component if you're interested.

Aug 20, 2007

Regarding Zend_Cache_Page:

You should take a look at the Zend_Application_Resource proposal. That's my intended solution to enable user-defined plugins for the application bootstrap process. So we would write a class that extends Zend_Application_Resource_Abstract, for example we could call it Zend_Application_Resource_Cache_Page.

The presence of this class would implicitly mean that a config file could contain properties with the config data to be passed to Zend_Application_Resource_Cache_Page. That class would contain the logic to map config data to the Zend_Cache factory.

Note the config data doesn't necessarily have to be passed verbatim to the Zend_Cache factory; the resource manager class gets to interpret the config data and do the right work to create the object.

Using this kind of plugin architecture, I hope we can avoid adding lots of special-case hooks to Zend_Application. The plugins would be loaded automatically on demand, based on the values found in the config files. Thus the base Zend_Application class would remain pretty lean.

Aug 20, 2007

Regarding realpath and using ".." instead of dirname():

Sure, we can call realpath on the home directory specified. That way the bootstrap could use relative paths easily. And if an absolute path were specified, that'd work too.

Aug 20, 2007

Regarding discovery of environment and corresponding config section:

We've been talking about this internally a bit. There are several ways to do this, with different advantages and disadvanteges.

1. Declare instance name in php.ini, retrieved with ini_get()

Advantage: portable, centralized.

Disadvantage: users often don't have access to edit php.ini. If you need to deploy many apps, this could create an explosion of php.ini directives.

2. Define PHP variable directly in bootstrap script

Advantage: portable, flexible, keeps config in pure PHP code instead of involving other types of environmental config.

Disadvantage: requires editing application bootstrap on each deployed instance. The app code should be under revision control, so the bootstrap file would show up as locally modified, and this is confusing.

3. Use superglobals $_SERVER['HTTP_HOST'] or $_SERVER['SERVER_NAME']

Advantage: mostly portable, keeps config away from bootstrap code.

Disadvantage: breaks if the hostname or virtual host name changes. Also if two hosts need the same config section, you have to create duplicate sections for no reason.

4. Use environment variable, set in Apache with the SetEnv directive, either in the global httpd.conf or in .htaccess or else set in system configuration and passed to web app with the Apache PassEnv directive.

Advantage: isolates instance variable from application code.

Disadvantage: specific to web server and deployment technology (Apache, mod_php, fastcgi, isapi, etc.). Also, the web server config should be under revision control as well.

5. Declare instance name in a one-line config file

Advantage: portable, good for users without access to php.ini.

Disadvantage: performance cost of reading an extra unnecessary file. Also, it doesn't implicitly change as you deploy to a different server, so one could accidentally deploy the wrong config.

Aug 23, 2007

I noticed several bugs in the attachment, one was in the Application.php at ~108

missing

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[return self::_doLoadConfig($path, $type, $section);]]></ac:plain-text-body></ac:macro>
Aug 23, 2007

Also, I am not sure about relative paths when using ZA with the cli as the paths are changed to where the current dir is.

It might be a good idea to append the home directory instead for modules and any other paths that are relative for the cli.

Another thing I thought about was setting the home dir as the default module directory. Wouldn't it be better if the default was something like $appHomeDir . 'modules' as a home directory does have other folders than module specific stuff.

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
protected function _setModules(Zend_Controller_Front $front, $modules)
if ($modules === true)Unknown macro: { $modules = $this->_appHomeDirectory; }
else if ($modules instanceof Zend_Config)Unknown macro: { $modules = $modules->toArray(); }
Aug 27, 2007

I think 'autoloadEnabled' should not be enabled by default since autoloading prevents opcode caches from doing their work on autoloaded files.

Aug 28, 2007

This point about autoloading is a good point, so I consulted an expert who works on Zend Platform.

It is not true that autoloading is incompatible with opcode caching. It works fine. There are cases when a class cannot be cached, but these cases happen whether you use autoload or not.

The performance difference between using autoload vs. require_once is not significant for most applications. If your application is so sensitive the performance impact of using autoload matters, then it's much more likely that other system architecture changes will help to a much greater degree than micro-optimizing class loading.

The bottom line is that using autoload makes development easier, and this outweighs its potential disadvantages.

If you still want to set autoload to false, there are at least two alternatives to accomplish this:

Specify the autoloadEnabled option to the constructor of the Zend_Application class:
<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$app = new Zend_Application($homeDir, array('autoloadEnabled' => false));

Create your own extended Zend_Application class and change the default:
<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
class My_Application extends Zend_Application
protected $_autoloadEnabled = false;
Aug 28, 2007
<ac:macro ac:name="note"><ac:parameter ac:name="title">Prototype Code Moved</ac:parameter><ac:rich-text-body>

I have removed the attached Zip file from this proposal page, and instead checked the proof-of-concept code into svn in the ZF Laboratory:
http://framework.zend.com/svn/laboratory

Zend_Application code and tests are under library and tests.
</ac:rich-text-body></ac:macro>
Aug 28, 2007
<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
protected static function _doLoadConfig($path, $type, $section)
$configClass = 'Zend_Config_' . ucfirst($type);
$config = new $configClass($dir . DIRECTORY_SEPARATOR . $file, $section);
if (!$config instanceof Zend_Config)Unknown macro: { require_once 'Zend/Application/Exception.php'; throw new Zend_Application_Exception("Class '$configClass' does not extend Zend_Config"); }
return $config;

$dir . DIRECTORY_SEPARATOR . $file should be $path

Aug 28, 2007

Thanks Geoffrey, yes, I noticed that mistake too. I'm working on it now, and I corrected that issue as I'm writing a few more unit tests.

The code is just in proof-of-concept phase, to illustrate the proposal. I'm trying not to work too hard on it, in case the proposed architecture is rejected. <ac:emoticon ac:name="smile" />

Aug 28, 2007

Thanks, I'm just trying out the component in a simple test application. It's a step forward, but I think it still needs more hooks.

btw, the construct in Zend_Application_Plugin conflicts when used with modules because it tries to load a module config before the module directory is set and before the dispatch() process has started.

Aug 28, 2007

Can you describe examples of what type of hooks are needed?

Also keep in mind that you can always do $app->getFrontController() and then do less common types of customization. The Zend_Application interface, like most components in ZF, should provide a simple solution for the 80% most common usage, and then allow for extensibility for other more exotic cases.

Aug 29, 2007

I found a wee bug in the _doLoadConfig() method. Instead of

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$config = new $configClass($path, $section);

...it should be

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$config = new Zend_Config(new $configClass($path, $section));

...otherwise you never end up with a Zend_Config object.

Also, there's a test for the 'config' filename using the 'filename' property of pathinfo. Is it possible to use a strpos or something similar for all us non-5.2.0 users? <ac:emoticon ac:name="wink" />

Finally I'm trying to put together the relationship between the Zend_Application and the Zend_Application_Resource family. Is it true to say that just by having the 'db' key set in my config that a Zend_Db object is auto-created or do I have to initiate that manually?

Aug 30, 2007

You don't get an object for which get_class($config) == 'Zend_Config', but you do get an object that passes the test $config instanceof Zend_Config.

Apologies for the pathinfo() usage. I will change it to work with PHP 5.1.4.

Yes, the idea is that Zend_Application iterates through each module's config file and if it finds config properties that match a certain naming convention, and a corresponding wrapper class exists that extends Zend_Application_Resource_Abstract, then the config data is used to instantiate that resource.

Aug 29, 2007

Oh and another - the '_config' always seems to be null. I'm guessing that's because the Zend_Config object is always out of scope?

Aug 30, 2007

I don't understand what context you're referring to. The $_config object in Zend_Application is set in the constructor, or with the setConfig() method.

Aug 30, 2007

Indeed it is but in PHP 5.1.6 all I'm seeing is a null value in that property. I'm guessing there's a slightly revised handling of class/object contexts in PHP 5.2.0? I was testing my config file and sure enough it is being correctly read and parsed in the static _loadConfig methods, but when it is passed back to the setConfig() method it is a null value, so I've assumed that the Zend_Config object has gone out of scope. Try it in PHP 5.1.6 and you'll see what I mean.

Aug 30, 2007

Okay, thanks that helps. I got PHP 5.1.6 installed and saw the errors related to pathinfo() you mentioned. I fixed those, and that may have resolved the null returned by _doLoadConfig() too. I made sure there's an object returned to setConfig(). Can you update in zflab and try it now?

Aug 30, 2007

Bill – This looks good. I have a few notes:

Allow config.php

This allows those of us who like using arrays for configs to do so

Does application module config need to be in a separate directory?

Seems like having it at the toplevel of the module would be sufficient

Need configuration for:

Should allow specifying either:

Directory of plugins to load

array of plugin => path values

Action Helpers

Should allow specifying:

prefix => path pairs for action helper paths

class => path pairs of specific helpers

should allow a second argument to load at start

Should allow specifying:

error controller to use (pass to error handler plugin)

view class/object to use with ViewRenderer

Eventually: whether or not to use layout, and layout config options

Aug 30, 2007

config.php would be solved transparently if we had a Zend_Config_Php class.

No, module config doesn't need to be in a separate directory.
<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$app = new Zend_Application($homeDir, array('modules'=>true, 'moduleConfigDirectoryName'=>''));

Plugins and Action Helpers, including Error Handler and ViewRenderer options, should be configured by manipulating the Front Controller object returned by the getFrontController() method.

Layout config is probably a common enough usage requirement that we can add options to Zend_Application_Resource_FrontController to handle this.

Aug 30, 2007

Hey Bill,

Reviewing this I am questioning if this really makes sense. From a performance perspective this is a heck of a lot of overhead for gains which could be achieved using other approaches. I agree in principal with what Zend_Application is looking to accomplish, however your approach pushes what appears to be really a "one time" process (setting up an generic application) into a every-request series of events within the bootstrap. Even if you were to employ caching mechanisms its still completely unnecessary overhead.

I think these concepts (setting up the FC, error handling, configuration, etc) should all be done using a code-generation approach rather then a runtime Zend_Application class. A code generation approach would accomplish all of the same tasks without the runtime overhead. You could even use a lot of the same configuration notions described in this document to dictate how the code generation is to occur and achieve the exact same functionality without unnecessary runtime overhead. The only difference would be that any generated code would have to be considered "read only" by the application and any customization beyond that which is provided for by the code generator must be done via class extension (to allow re-generation of the base application framework if desired).

I know that I personally would never use a tool like this in Global Services as it is proposed because while it does save me time as a developer I can't justify adding such overhead to every single request. That's why I originally proposed something like Primitus, which would accomplish the same task but added no overhead then what was already required by Framework itself.

Aug 30, 2007

I'd be interested to hear what parts of Zend_Application you believe incur more overhead compared to a bootstrap script that configures the app with equivalent options.

I just ran my current collection of Zend_Application unit tests with "phpunit --repeat 1000". It executed 39000 tests in 153 seconds. So that's 254 tests per second, or less than 0.004 seconds per test. This includes the overhead of PHPUnit, and my test environment does not make use of any opcode cache.

Running the single unit test that reads an XML config file from disk (testApplicationSetConfigString()), repeated 10000 times. It executed 10000 tests in 40 seconds, which is 250 tests per second, or 0.004 seconds per test.

Aug 30, 2007

I agree with john, it's too much overhead, my vote goes for a code-generation approach.

Aug 30, 2007

I don't want to seem like I'm being too precious about my proposal, but I don't think the overhead of this solution is significantly more than a plain bootstrap script.

In cases like this, we need to use performance measurements to provide evidence one way or the other. That's the only way to make a decision. We can't make progress simply by making assumptions.

Oct 19, 2007

I agree with Bill. The files output by the code generator would have to be executed on every request anyway, just like the Zend_Application code. The performance difference between the two pieces of code is likely to be negligible. The most likely bottle neck would be file system access to config files, etc. If it's a problem, you-like Bill said-should benchmark it and deal with what's actually slow.

Aug 31, 2007

I like such class. I don't think overhead would be that big (should be checked of course <ac:emoticon ac:name="smile" /> and I think most people would use defaults anyway, so it would look really easy and nice. We need to document the defaults extensively of course, so people would know how to build their app in a way that would "just work".

Aug 31, 2007

I'm using Zend_Application now in a smaller project and whilst the initial setup was a bit mystifying, now that I've grasped how Zend_Application and Zend_Application_Resource work together it's lovely and smooth.

Perhaps it would also be nice to add the following properties to make it an all-in-one solution:-

Default timezone set by config e.g. date_default_timezone_set('Australia/Melbourne');

Default language set by config (or default Zend_Locale)

I'm in favour of this kind of approach for the 80/20 case. There's so many sites that don't require a complete re-working/re-coding to simply set up MVC and a few connections. Like the above example, I'm not seeing a huge performance hit and if the Zend_Application_Resource_Cache is implemented, or a Zend Platform-type accelerator is used then it's also less of a performance issue.

Sep 01, 2007

Another thing I'm confused about is, how would you organize resources? Like a db resource, which might have something like a profiler. I guess the profiler could be considered part of the db resource though. Perhaps this, how would I handle a resource that sets a custom view obj to viewRenderer or setting helper paths to the action helper broker etc..

Sep 01, 2007

Specifying a Db profiler can be done using options to the Zend_Db::factory() method, or using the Db adapter method setProfiler() after the adapter is instantiated.

Advanced options of the front controller, like custom view renderer or helper paths, should be done with the Zend_Controller_Front object returned by Zend_Application::getFrontController(). The idea of the Zend_Application is not to duplicate every option, but to make it very convenient to configure the options you would use most frequently.

Sep 02, 2007

Wouldn't specifying helper paths be considered a frequently used option? I don't know about other people, but on just about every application, I've specified paths to my library. Helpers like Xend_Layout and a baseUrl helper etc... are useful. Zend_Layout if accepted brings another question about resources since it needs to be setup before dispatch(). Would this component be setup via Zend_Application or would we have to do this manually?

Sep 17, 2007

have you thinked about implementing unique error handling ? stupid name, what i mean is that it would be great to have one point where ALL errors go (ErrorController), also when the error happens in application init, or in views (or all other parts of the application). I currenty do something like this for a current application. I also convert php errors into exceptions. the only thing left seems how to handle the exceptions inside views when using the viewRenderer. at the moment i tend to just not use the viewrenderer and render for my own to catch the exceptions.

maybe we can share code ?

Sep 21, 2007

I would enjoy a config option which makes the routing "language aware" in such manner:

/en/module/controller/action

/fr/module/controller/action

This will also prevent developers form writing multilingual applications, which renders many languages at the very same URL and keeping language infos in the session or cookies. Another advantage could be the option to create language files (maybe array based) for all the validation messages and bundle these translations to Zend_Validate.

Nov 11, 2007

Why only config of module?

What if I create view helper of blog module and I need some conguration data, but I'm using it i the view of other module action (or even layout, its the same)

Nov 11, 2007
<ac:macro ac:name="note"><ac:parameter ac:name="title">Proposal Rejected</ac:parameter><ac:rich-text-body>

This proposal did not meet the goals of the Zend Framework project and further development on it has been rejected.
</ac:rich-text-body></ac:macro>