text:
Yvette Hamilton
Here/There, 2014
Here/There, 2014
SCA Galleries play an important role in the life of Sydney College of the Arts as a resource and educational device for students and staff. By providing the community with access to a range of challenging and innovative exhibitions and events, the galleries also provide an opportunity for SCA to develop a public understanding and appreciation of contemporary art.
The SCA Gallery is a site for staff, students, visiting professional artists, scholars and curators to develop, experiment and present research and artistic works to SCA and the broader arts community.
The Graduate School Program hosts up to 8 exhibitions a year which explore the concepts, technologies and practices emerging from the postgraduate degrees.
The Callan Park Gallery for Self-Taught and Outsider Art is part of the SCA Galleries complex. Its mission is to showcase Self-taught and Outsider work of the highest quality in an ongoing series of exhibitions.
|Official Opening
|Undergraduate Degree Show
|SCA campus
|18 November
|18 November, 6-8pm
|25 November
|Postgraduate Degree Show
|SCA campus
|3 December
|3 December, 6 to 8pm
|10 December
Sydney College of the Arts, Balmain Road, Rozelle (enter opposite Cecily Street) (view map)
Opening Hours: Monday to Friday, 11am-5pm; Saturday 11am to 4pm (during exhibitions)
Contact Details: +61 2 9351 1008 or firstname.lastname@example.com
On-site parking is available and all SCA galleries are wheelchair accessible.
© 2002-14 The University of Sydney. Last updated: 15 December 2014
ABN: 15 211 513 464. CRICOS number: 00026A. Phone: +61 2 9351 2222.
Authorised by: Dean, Sydney College of the Arts.
Contact the University | Disclaimer | Privacy | Accessibility


text:
Intervention: (S05.Ep.02) Dan DVD
Sale Price: $19.99
To Order by Phone Call 1-800-933-6249
- Additional Details
- Format: DVD, Color, NTSC
- Rating: Not Rated
- Number of Discs: 1
- Run Time: 50 Minutes
- Region: 1
- Aspect Ratio: 1.33:1
- Language: English
- Studio: A&E Television Networks
When Dan was 14, his oldest brother was sentenced to death for rape and murder. Dan spent much of his youth feeling ashamed of the stigma brought on by his brother's crime, as well as abandoned by his parents, who were completely consumed in their quest to save their son's life.
In his 20s, Dan escaped to Hawaii, but it wasn't enough. Despite the peaceful island tranquility that Maui has to offer, he turned to alcohol. Decades of binge drinking have finally caught up to Dan, who now drinks an average of 20 beers a day in between shots of hard liquor. His drunkenness often erupts into violence and rage, which terrifies his wife Sarah. She fears the negative impact growing up with an alcoholic father will have on their young daughter. Sarah knows she must take a stand. She desperately needs the support of Dan's family to intervene, and ultimately give Dan a choice -- go to treatment or lose his family forever.

subset: commoncrawl


text:
Tibetan / Vajrayana
Vajrayana Buddhism is most closely associated with Tibet and can be characterized by the figure of the siddha, the master whose spiritual realization is so profound that he or she has power over the phenomenal world, and in whom the profundity and vastness of absolute truth is fully and completely manifested. Many of our most well-known authors come from this tradition of Tibetan Buddhism .
[Note: The tags for the various schools are not definitive as many books span multiple traditions, etc. They are meant to use as a starting point for exploring this collection.]
The Heart Is Noble
Changing the World from the Inside OutIn 2011 a group of American college students spent a month in India with His Holiness the Seventeenth Karmapa. Together they discussed topics ranging from food justice to gender identities to conflict resolution. The Karmapa's teachings in this book are the product of those meetings. Here he shares his vision for bringing social and environmental action into daily life, on a scale we can realistically manage through the choices we… Read More
Paperback$16.95+ Add to Bag
The Heart Is Noble
Changing the World from the Inside OutIf you are inspired to take up his challenge, the Karmapa offers a path for participating in a global community that is based on compassion. In these chapters, he shares his vision for bringing social action into daily life, on a scale we can realistically manage through the choices we make every day—what to buy, what to eat, and how to relate honestly and bravely with our friends and family… Read More
Hardcover$21.95+ Add to Bag
Living Beautifully
with Uncertainty and ChangeWe live in difficult times. Life sometimes seems like a roiling and turbulent river threatening to drown us and destroy the world. Why, then, shouldn't we cling to the certainty of the shore—to our familiar patterns and habits? Because, Pema Chödrön teaches, that kind of fear-based clinging keeps us from the infinitely more satisfying experience of being fully alive. The teachings she presents here—known as the "Three Commitments"—provide a wealth… Read More
Hardcover$22.95+ Add to Bag
Minding Closely
The Four Applications of MindfulnessRead More
Paperback$24.95+ Add to Bag
Work, Sex, Money
Real Life on the Path of Mindfulness
Each day we deal with the challenges of ordinary life: a series of mundane experiences that could be summarized by the title of this book, Work, Sex, Money. We all hope that these aspects of our life will be a source of fulfillment and pleasure, and they often are. Yet they are also always sources of problems for which we seek practical advice and solutions. The best prescription, according to… Read More
- edited by
- Carolyn Rose Gimian,
- Sherab Chodzin Kohn
Paperback$15.95+ Add to Bag
Quiet Mind
A Beginner's Guide to Meditation
This unique book-and-audio program brings together some of the country's most beloved meditation teachers. Each contributor presents a short written teaching along with an audio recording of a guided practice. Quiet Mind features:Sakyong Mipham on shamatha, the practice of tranquillityLarry Rosenberg on vipassana, the practice of clear seeingEdward Espe Brown on zazen, the practice of freedomSharon Salzberg on metta, the practice of lovingkindnessJudith Lief on tonglen, the practice of transformationTulku… Read More
- edited by
- Susan Piver
Mixed Media$14.00+ Add to Bag


text:
|October 28 & 29, 2014 | Washington Marriott Hotel | Washington, DC
|· MIXED TRAFFIC: Meeting the Challenges ·
|Join Railway Age at this premier event — the industry's only conference on freight-plus-passenger railroading.
|Now in its 21st year, Passenger Trains on Freight Railroads is the only rail industry conference devoted exclusively to addressing the challenges of operating mixed traffic on shared rights-of-way.
|Sponsor or exhibit at this event and network face-to-face with industry decision-makers, the executives with purchasing power.
|Platinum, Gold, and custom sponsorships are available. A limited number of exhibit spaces are also available.
|Contact Us


text:
Find out about exhibitions, activities, tours and talks at Birmingham Museums
Aston Hall, Blakesley Hall and Soho House provide a choice of spectacular and elegant locations for your dream wedding.
6th May 2012
Enjoy a ride on the Big Brum Open Top Buz and discover Birmingham's unique community museums on the first Sunday of the month from May to October 2012, starting with the Tolkien and Tudors Tour on 6th May.
Tolkien and Tudors - 6th May, 1st July and 2nd September - visit Sarehole Mill and Blakesley Hall
Victoria Square 11.30, 13.15, 14.30, 15.45 - Last bus is a drop off only bus.
Sarehole Mill 11.50, 13.35, 14.50, 16.10
Blakesley Hall 12.10, 13.55, 15.10, 16.30 - Last bus back to Edmund Street.
Manufactories and Mansions - 3rd June, 5th August, 7th October - visit Aston Hall, Soho House, the Pen Room
Victoria Square 11.30, 13.15, 14.30, 15.45 - Last bus is a drop off only bus.
Aston Hall 11.45, 13.30, 14.45, 16.00
Soho House 12.05, 13.50, 15.10, 16.20
Pen Room 12.15, 14.00, 15.20, 16.30 - Last bus back to Edmund Street.
Tickets cost £3.00 for adults and are free for children - have your change ready! No pre-booking available, first come first served. Timings may vary due to unavoidable circumstances with an estimate of 20 minutes between pick up stops.
Community Museums will be FREE OF CHARGE on these dates.
The Big Brum Open Top Buz is operated by Birmingham Tours.
You can follow news from this museum through the RSS 2.0 feed.


text:
Holiday Shop
mouse over photo to zoom click for larger image
Jet/Crystal Statement Stretch Bracelet
Ready when the invitation reads "bring your own bling". Strands of jet glass beads cut in diamond facets are bridged by an over-the-top grouping of crystal brilliants, all set by hand. A match to the Jet/Crystal Statement Necklace. Glass beads/stones; rodium-finish, nickel-free metal. Stretches to fit most wrists.
We're so sorry: this item sold out sooner than expected. For an equally stylish substitute, please call our Style Experts at 1.877.948.2525. Or click on Live Help below for immediate assistance.


text:
Kenojuak Ashevak
Canadian, 1927–2013
Talelayu Opiitlu (Talelayu with Owl), 1979
stonecut, stencil on paper, Co-op proof
60 x 68 cm Image: 37.5 x 50 cm
Collection of the Winnipeg Art Gallery; Gift of Indian & Northern Affairs, Canada
Many honours have been bestowed on Kenojuak Ashevak in recognition of over 50 years of artmaking, including the Governor General's Award for the Visual and Media Arts in 2008. She has been a mainstay of the Cape Dorset print program from the first annual collection in 1959 to the present day. Her Enchanted Owl, reproduced on a Canadian postage stamp in 1970, has taken on the status of a Canadian art icon. The owl has remained one of her favourite subjects over the years, rendered in fanciful and decorative interpretations. In this WAG print the owl is shown with another frequent subject, the female sea spirit Taleelayuk. A talented seamstress, Kenojuak transferred her skill at making inset designs in animal skin clothing to producing drawings and prints.
Gallery Hours
- Tuesday 11am-5pm
- Wednesday 11am-5pm
- Thursday 11am-5pm
- Friday 11am-9pm
- Saturday 11am-5pm
- Sunday 11am-5pm
- Closed Monday
Open on the following days:
- Victoria Day
- Canada Day
- August Civic Holiday
- Labour Day
- Remembrance Day (open 1-5pm)
- Christmas Eve (close at 2pm)
- Boxing Day
- New Year's Day
- Louis Riel Day
- February 23 (open at 2pm)
- Easter
Closed on the following holidays:
- Good Friday
- Easter Monday
- Thanksgiving
- Christmas Day


text:
Fox Tech Tees are lightweight, breathable and have a soft premium feel for ultimate comfort. The Fox Reforge Dri-Release Thermal is built with dri-release so there is nothing to wash or wear away. Skin temperature reduction keeps you up to 6 degrees cooler than normal tees and dries 4 times faster than cotton. Fresh Guard is built into the garment to help eliminate retaining body odor.
- Contrast neck taping.
- Softhand plastisol ink.
- Screen print on chest.
- Fox Tech screen print on sleeve.
- 85% Polyester, 15% Cotton Dri-Release Thermal.


text:
1/16Cory Monteith:Cory Monteith was best-known for playing Finn Hudson on "Glee," but the actor had several other roles in his tragically short life. Here are 15 of his parts not on "Glee."
2/16"Stargate: Atlantis" (2004):Monteith's first on-screen credit was as "Genii Private" in the 2004 episode of "Stargate," "The Storm."
3/16"Killer Bash" (2005):In this non-event movie, Monteith played one of the guys surrounding a sorority girl possessed by the spirit of a vengeful, dead outcast.
4/16"Supernatural" (2005):The second episode of "Supernatural," "Wendigo," cast Monteith as an ill-fated camper seen in the teaser.
5/16"Smallville" (2005):Possibly the best-named character of his career -- "Frat Cowboy" -- appeared in the "Thirst" episode of "Smallville."
6/16"Stargate: SG1" (2006):Monteith returned to the "Stargate" franchise in 2006, playing the younger version of Mitchell in "200."
7/16"Final Destination 3" (2006):Years before "Glee," Cory Monteith played a supporting character named Kahill in the third movie in the popular "Final Destination" series.
8/16"Kyle XY" (2006-2007):"Kyle XY" featured Monteith as the recurring character, Charlie Tanner. Charlie was the basketball team captain and the boyfriend of Kyle's interest, Amanda.
9/16"Hybrid" (2007):One of the infinite number of Syfy Original Movies, "Hybrid," featured Monteith as a security guard given wolf eyes after being blinded in an explosion.
10/16"Kaya" (2007):Monteith played a supporting character (a drummer like Finn on "Glee") in this single-season MTV series about an overnight music sensation.
11/16"The Simpsons" (2010):In 2010, Monteith and other "Glee" stars appeared on the "Elementary School Musical" episode of "The Simpsons."
12/16"Monte Carlo" (2011):The 2011 romantic comedy, "Monte Carlo," co-starred Monteith. He played a love interest to Katie Cassidy's Emma -- a girl pretending to be a wealthy socialite in the Eu... Show More »The 2011 romantic comedy, "Monte Carlo," co-starred Monteith. He played a love interest to Katie Cassidy's Emma -- a girl pretending to be a wealthy socialite in the European party center. « Less
13/16"The Cleveland Show" (2011):Monteith, along with others from New Directions, appeared as examples of wholesome teens in an episode of "The Cleveland Show" in 2011.
14/16"Wannabe Macks" (2011):Monteith played a loser trying to get girls via a reality show in this film.
15/16"Sisters & Brothers" (2011):Also released in 2011, the indie drama "Sisters & Brothers" featured Monteith as one of 8 siblings reconnecting after a long time apart.
16/16Upcoming ...:Prior to his unexpected death, Cory Monteith completed work on three projects: films "All the Wrong Reasons" and "McCanick" and the musical special "Glee Live! At Radio City Music Hall."


text:
adidas Interval Reversible Wristband
adidas 3" wristband is reversible and made with an improved cotton terry material for absorbency and comfort. The Interval has an anti-microbial finish and ClimaLite moisture wicking technology. Package includes 2 wristbands. Embroidered 3-Bar logo.
Color:Collegiate Navy/White
Fabric Contents: Cotton, Polyester, Rubber
One size fits all.
Review Summary
No Reviews
Overall Rating: None
Be the first to review this product
No Reviews
Be the first to review this product
adidas Interval Reversible Wristband 5133997
Item #: 5133997
Add to Cart


text:
According to NAR, prospecting expireds is one of the top
five ways to make money in real estate. Save time and make
more money with our lucrative real estate lead generation.
88% of all For sale by owners (FSBOs) end up using the help
of a leads real estate agent. With our FSBO leads for real
estate, you can be that agent.
More than 34% of all homes sold in 2011 were short sales
and bank owned properties. Thrive in today's changing market
with our pre- foreclosure real estate leads.
Increase your production and save more time by calling up to 300 calls
per hour and having 10X the conversations. Don't just dial, talk to more
of the right people in less time.


text:
FOR IMMEDIATE RELEASE18 August 2008Charleston tax preparer arrested on fraud charges
South Carolina Department of Revenue investigators arrested a Charleston County tax preparer today on multiple charges of preparing fraudulent tax returns.
Benjamin Wiggins, Jr., 57, owner of Wiggins Tax Service on James Island, was charged with 12 counts of preparing fraudulent state income tax returns and five counts of filing fraudulent tax documents with tax returns. He was released from the Charleston County Detention Center this afternoon on an $85,000 personal recognizance bond.
Wiggins is accused of preparing the fraudulent tax returns from 2004 - 2006 using exaggerated or bogus tax deductions to reduce the tax liability for his clients. The revenue department estimated Wiggins understated collectively the tax liability of 12 clients by $4,515 during that period.
No further arrests are expected, but some Wiggins Tax Service clients could face additional penalty and interest charges following the investigation.
Wiggins is facing up to 65 years in prison and fines of up to $8,500 if convicted of all the charges.
Home / Contact DOR


text:
This is part of IEEE Spectrum's Special Report: 25 Microchips That Shook the World.
Slideshow: The Many Facets of Microchips
A hand-drawn diagram, a long-forgotten memo, a photo of a Ferrari--intriguing images of chips and their creators
Photo: Gene Frantz/Texas Instruments
The Speak & Spell was a learning toy that Texas Instruments created using its TMC0281, the first single-chip speech synthesizer. One of the hits of Christmas 1978, the toy was the brainchild of four TI engineers [from left]: Gene Frantz, Richard Wiggins, Paul Breedlove, and Larry Brantingham.
Image: Intel
When the Intel 8088 processor debuted in 1979, the reception was rapturous—evident in press articles, trade shows, and, naturally, internal Intel memos. And more was to come: In 1981, the 8088 became the CPU of IBM's original PC line, consolidating Intel as a processor powerhouse.
Drawing: Steve Furber
In 1983, Acorn Computers, in Cambridge, England, set out to develop its own 32-bit microprocessor, the Acorn RISC Machine, or ARM. Steve Furber, one of the chip's architects, did most of the design work—including a "floor plan" with the CPU's functional modules—using paper and pencil.
Photo: Robert Garner
In 1988, the Sun Microsystems team that developed the SPARC 32-bit RISC processor gathered for a group photo at the company's Mountain View campus. One notable absentee was Sun cofounder and programmer legend Bill Joy. But parked outside was his Ferrari—it served as a replacement.
Image: Chuck Moore
The Sh-Boom processor is a touchy topic in the chip community: Did it really innovate in the way CPUs remain synchronized with other parts of the computer that have slower clocks? One thing, though, is not in dispute: Sh-Boom creators Russell H. Fish III and Chuck H. Moore were surely innovative in naming their chip.
Image: David Fullagar
The subject line of the 7 July 1968 memo circulated at Fairchild Semiconductors said it all: "We've Got a Winner." The winner was the μA741 chip, a new operational amplifier designed by David Fullagar. It would sell in the hundreds of millions, becoming the standard for op-amps.
Image: Courtesy Federico Faggin
The first venture-capital firm to invest in Zilog, the microchip maker that Federico Faggin started in Silicon Valley in 1975, was Exxon Enterprises, an arm of the oil giant Exxon. The partnership worked well, and Faggin even appeared next to the famed Exxon tiger on a brochure, holding the Z80 microprocessor that would make Zilog famous.
Image: Intersil
Introduced in the mid-1980s, the ICL8038—a waveform generator chip—proved so popular that its creator, Intersil, later published a troubleshooting compendium aptly titled, "Everything You Always Wanted to Know About the ICL8038." Intersil discontinued the chip in 2002, but you can still read the document at: http://www.intersil.com/data/an/an013.pdf.
Image: Al Phillips
In 1971, Western Digital introduced the WD1402A, the first single-chip UART, or universal asynchronous receiver/transmitter. The chip converted parallel signals into serial signals and vice versa—a simple but crucial function in a host of computer hardware. UARTs gained popularity as part of modems and other peripherals and are used to this day.
Image: ¿Futurama¿ and © Twentieth Century Fox Film Corporation. All rights reserved.
Introduced in 1975, the MOS Technology 6502 microprocessor became the main brains of seminal systems like the Apple II, the Commodore PET, and the BBC Micro. But the 8-bit microprocessor also went on to power a fictional machine: Bender, the ill-behaved robot in the sci-fi animated comedy "Futurama."


text:
Cars > Doughty's Garage
About Doughty's Garage
About me and my passion for cars
I like cars, and love my wife. I used to love cars and like my wife. Now I have new wife who loves me, and my love for cars. LOL
My first car
72 Camaro
Car I wish I still had
So, so, many! I do Miss My Plow Truck
(Black 85 Chev.)
My dream car
I'm working on it right now.
Car clubs I'm in
Who has time????
- Type of racing: Any
- Driver: Me
- Driving song: Anything I turn up.
- Car movie: Smokey and the Bandit
- Car book: Parts catalogs
- Car magazine: More Parts Catalogs with more stuff
- Car game: I'd have to take my hat off....LOL
— Profile last updated: Apr 29, 2012
|Date Joined
|Feb 9, 2012
|Garage Views:
|Blog Posts
|27 view
|407 photos in 24 albums
|3 view
|9 view
|1 for sale
Doughty's Groups 1 of 1
Enthusiast Groups
The Bandit Run Enthusiast
Save this URL into your Favorites: " www.TheBanditRun.com " Call or email anytime 402.465.5756 or firstname.lastname@example.com For 2014 Event details please go to www.TheBanditRun.com for regular updates. Full route details are posted during the registration process. Also all the Hotel...
Nebraska, United States
Club Groups
Doughty is not a member of any club groups
Business Groups
Doughty is not a member of any business groups
Doughty's Events
|May 12–19, 2012
|Bandit Run 2012
Doughty's Garage Comments 1 – 2 of 2
Log in to post comments.
Read comments on Doughty's garage (2)
- Apr 14, 2012 at 9:44 pm
- Glad I had a chance to meet you today, Charlie! Your cars are even more impressive in person! Good luck in getting them done for the run!
- Apr 4, 2012 at 9:57 pm
- Very impressive work!
Doughty's Friends 1 – 3 of 22
Vehicles 1 of 9
Cars (0)
Coolbox (what's this?) 1 – 2 of 8
Favorite Cars
Favorite Garages
Favorite Photos
Parts and Collectibles 1 of 1
Parts For Sale
Photo Albums and Videos 1 – 2 of 24
Doughty's Car Garage Blog 1 – 3 of 27
No Pace Car For Prom!
Apr 29, 2012
Wow, everything was a go, then fizzle -pop! Well, Charlie had William and I take the two T/A's to Bemidji, a town about 45 miles from the Shop, to have them aligned. Needless...
Bandit Run Car 80 Pace Car
Apr 27, 2012
Prom is tomorrow night, gas tank has a leak up by the fill spout. Its always something. Charlie scrugs his sholders and says "we'll try to get one and put in tomorrow." no big...
Bandit run car 77/81 TA Then & Now
Apr 23, 2012
Charlie is Awesome! Ready for that test drive. almost LOL..... this is cool to see the pics side by side.
Cars > Doughty's Garage


text:
Enlarge / Alternate Images
EarthLite Memory Foam Headrest Pad
Fits my table and chair perfectly, and able to fit my fleece and standard covers on it at the same time with no trouble. My clients absolutely love it and so do I.
Has no weird smell like some other memory foam pads.
Clients are enjoying this facerest pad so much!


text: 5 Eerie and creepyukgnome | 10/12/2012 | See all ukgnome's reviews (3)What an excellent game, all creepy and eerie. There is something quite satisfying about smashing zombies with a cricket bat. But that's just the tip of the iceberg, paranoia is around every corner, rats show up on your radar as well as zombies. It's not all about hitting the hardest, there is also a bit of tactics.


text:
MXR CAE MC-403 Power System
The Dunlop CAE Power System MC-403 is the ultimate solution to powering multiple pedals. Designed through a collaboration between Bob Bradshaw and MXR's design team, the MC-403 can power many different types of pedals in the cleanest and most reliable manner possible.$249.00
MXR CSP026 '74 Vintage Phase 90The CSP-026 from MXR is the reissue of the original Phase 90. The '74 Vintage Phase 90 features select components, handwired electronics, and a script logo. This one sounds just like the original so check out the MXR 74 Vintage Phase 90.$129.99
MXR CSP028 Dyna Comp CompressorThe wait is over - MXR has finally reissued the script logo Dyna Comp compressor. If you have looking for the ultimate vintage compressor the MXR CSP028 Dyna Comp Compressor.$174.95
MXR CSP032 Dimebag Custom Shop Wah - Auto-ReturnA hot-rodded auto-return version wah with an extended sweep for more lows and highs, a side-mounted 5-way frequency selector, and a kick-in boost with LED indicators.$159.99
MXR CSP099 Custom Shop Phase 99The MXR Custom Shop Phase 99 opens up the sonic palette of the iconic Phase 90 by combining two phase circuits into a single Phase 90-sized housing. Separate rate controls for each circuit allow you to create intense complex phasing.$169.99
MXR CSP101SL Custom Shop Script Phase 90The MXR Script Phase 90 is a recreation of the original script logo pedal that made the phaser an effect to remember. The latest version of the MXR Script Phase 90 features an LED and a power jack as well as that sweet, sweet tone.$99.00
MXR CSP203 La Machine Octave FuzzThe MXR Custom Shop La Machine serves up thick, shaggy retro fuzz that's tailor-made to drive the raw sounds of '70s-style hard rock and modern garage rock.$139.99
MXR CSP204 Custom Comp DeluxeUndoubtedly, MXR has taken then next step in the hallowed Dyna Comp series, feature-wise. But the sound should be the player's reason to rejoice. It's everything you ever liked about the Dyna Comp but with none of the detractors. Simply put, it's the next step in the Dyna Comp timeline.$159.99
MXR Custom Shop MicroAmp+ CSP233For more than 20 years, the MXR Micro Amp has been a staple among the world's top artists because of its ability to boost and sweeten up your guitar or bass tone and drive the front of your amp. The MXR Custom Shop team has combined those features with a specially-tuned EQ section a... read more$119.99
MXR DD11 Dime DistortionThe MXR Dime Distortion is nothing but pure gain and distortion. Designed without "warm" or "boutique" in mind, the DD-11 was made purely for sonic mayhem. A 3-band EQ and Scoop switch, make the MXR Dime Distortion a must in any metal arsenal.$129.99
MXR EVH117 Eddie Van Halen FlangerThe choice of the Master! Eddie Van Halen and MXR teamed up to bring you the EVH-117. This classic bucket-brigade MXR Flanger features the EVH switch that calls up that classic Eddie Van Halen flange that made the original Van Halen tone.$189.99
MXR EVH90 Phaser PedalEddie Van Halen and MXR have done it again! The classic Phase 90 tones in a sweet EVH striped case. All this plus a "script" switch to give you the classic script logo Phase 90 tone. The MXR EVH-90 Phaser pedal will rock you like it's 1984!$129.99
MXR KFK1 Kerry King 10-Band EQThe KFK-1 pushes the classic MXR 10-band EQ into new territory, allowing you to punish not just one, but TWO amps at the same time. Scoop your mids to chunk out the thrash. Boost 'em to scream a lead over the mix. Check out the MXR KFK-1 EQ.$139.99
MXR M102 Dyna Comp Compressor PedalThe MXR M-102 Dyna Comp Compressor pedal is a classic by MXR that gives you control over level and sustain. Get clean, plucky country tones or super sustained screamer leads with the MXR M-102 Dyna Comp Compressor pedal.$79.99
MXR M103 Blue Box Fuzz Octave PedalMore low end than your neighbor's lowrider, the MXR M-103 Blue Box Fuzz Octave pedal will scream its way into your heart. Fuzz and two octave down duplication makes the wet signal from the MXR M-103 Blue Box Fuzz pedal chaotic yet friendly.$79.99
MXR M104 Distortion +The MXR M104 Distortion + is a soft clip, germanium diode distortion designed for those classic tones. Get everything from rich distortion to vintage overdrive or use the MXR M104 Distortion + to enrich an already dirty amp for over the top lead tones.$79.99
MXR M107 Phase 100The MXR Phase 100 is the Phase 90 redefined. Preset intensity selections let you shape your phaser tone to fit your style! The Phase 100 is another brilliant MXR creation for the stompbox enthusiast!$129.99
MXR M108 10 Band EQThe MXR M108 10-Band EQ provides control over 10 of the most used frequencies. The MXR M108 has 12db of cut or boost via input and output sliders.$119.99
MXR M109 6-Band EQThe MXR 6-Band EQ covers all the essential guitar frequencies, with each slider ready to deliver +/-18dB of cut or boost for incredible control over your sound.$79.99
MXR M116 Fullbore Metal DistortionThe new for 2009 MXR Fullbore Metal M-116 Distortion unleashes viscous metal tones in compact case. If you are looking for over the top distortion with sweepable mids and a built in gate the MXR Fullbore M-116 Metal Distortion was made for you.$99.99
MXR M117R FlangerIt's back! The MXR M-117R is a faithful reproduction of the original MXR Flanger. Whether you like jets or rocket ships, this flanger has you covered. The M117 even let's you disengage the auto sweep and adjust the frequency any way you like!$169.99
MXR M133 Micro Amp Clean Boost PedalThe MXR M-133 Micro Amp is an affordable clean boost pedal designed to give a boost to your amps front end or balance out instruments with different output levels. Check out the MXR M-133 Micro Amp and give your rock a boost!$79.99
MXR M134 Stereo ChorusThe MXR M134 Stereo Chorus is a gorgeous sounding chorus pedal from legendary pedal manufacturer MXR. The MXR M134 Stereo Chorus features true stereo operation as well as a Bass Filter switch for keeping low end intact. The MXR M134 Stereo Chorus, it's bringing chorus back.$169.99
MXR M169 Carbon Copy Analog DelayThe MXR M-169 Carbon Copy Delay pedal is the newest in analog delay. True bypass, bucket brigade technology, and all analog circuitry yield sweet, warm analog delay with switchable modulation. The MXR M-169 Carbon Copy Delay, check it out.$149.95
MXR M173 Classic 108 Fuzz PedalThe MXR M-173 Classic 108 Fuzz pedal is basically a FuzzFace in a smaller box. The BC-108 Fuzzface was recreated in the compact monster known as the MXR M-173 Classic 108 Fuzz Pedal.$129.99
MXR M195 Noise ClampCrank it up without the noise with the MXR M195 Noise Clamp. Designed to give up to 26db of noise relief, the MXR M195 Noise Clamp is perfect for the high gain player looking to quiet down the background and let the guitar shine through.$89.99
MXR M234 Analog ChorusThe MXR M234 Analog Chorus is a true bucket-brigade chorus pedal that packs tons of vintage shimmer and swirl. Dial in the amount of chorus then use the Hi and Low frequency cut knobs to dial in the tone and the MXR M234 Analog Chorus will give you exactly what you're after.$99.99
MXR M237 DC Brick Power SupplyPut an MXR M237 DC Brick on your pedalboard and never worry about batteries again. The compact DC Brick has 8 9-volt outputs and 2 18-volt outputs for a total of 2,000 mA with short/overload protection. Comes with 18v AC adaptor and 10 connector cables.$119.99
MXR M264 FET DriverThe FET Driver thickens up lead tones with musical, amp-like distortion and sustain without the fragility and inconsistency associated with tubes.$149.99
MXR M288 Bass Octave Deluxe PedalThe MXR M288 Bass Octave Deluxe is the newest octave on the block and MXR has really done it this time. Dual blendable octave tones and a mid boost make the MXR M288 Bass Octave Deluxe the most versatile octave around.$149.99
MXR M68 UnivibeThe MXR team has just remastered the classic effect for modern players. The MXR Chorus/Vibrato delivers the same chewy, Leslie-sounding goodness with a smaller footprint.$129.99
MXR M75 Super BadassMXR's Custom Badass™ team is at it again, this time with the Super Badass Distortion—nothing but rock housed in a sturdy stompbox, bringing you decades of analog distortion that covers the whole spectrum of rock to metal and beyond.$99.00
MXR M78 Custom Badass 78 DistortionThe all new MXR Custom Badass 78 Distortion is here. Built road tough the MXR Custom Badass 78 Distortion is a hot-rodded distortion circuit designed to bring that big amp tone to any rig.$89.99
MXR M81 Bass PreampThe MXR Bass Preamp combines a pristine bass preamp with a studio-quality Direct Out in a Phase 90-sized box, providing clear tone without hogging precious pedalboard space.$169.99
MXR M82 Bass Envelope FilterThe MXR M82 Bass Envelope Filter is an all new filter pedal from MXR for you four stringers. The MXR M82 Bass Envelope Filter is an analog filter that yields classic funk tones for any bassist. The MXR M82 Bass Envelope Filter, hey if it's good enough for Marcus Miller, it's good enough for you.$149.99
MXR M87 Bass CompressorThe MXR M87 Bass Compressor is an actual, full-featured studio compressor in a stompbox. Featuring Constant Headroom Technology, the MXR M87 Bass Compressor is a totally transparent compressor that allows your full dynamic range to shine through.$189.99


text:
On Saturday, August 16, Brewers fans of all ages are invited to the 6th annual slumber party at Miller Park. Bring your camping gear and prepare to spend the night under our roof! There will be no shortage of activities throughout the evening, as the entire Field Level becomes an overnight playground.
|Ages 2 and Under
|Ages 3-12
|Ages 13 - 17
|Ages 18 and Older
Space is limited! Limit 12 attendees per order. All attendees under the age of 17 must be accompanied by a responsible adult, age 18 or older, with a maximum of 4 minors per adult.
For more information, please review our F.A.Q. section by clicking HERE.
Registration and camper set-up will take place from 5:00-6:30 pm. After that time, the doors to Miller Park will be closed for the night!
Breakfast will be served from 6:30- 8:30 am. Our grounds crew will need to prep the field for the upcoming home stand, so everyone will be asked to leave at 8:30 am.
Yes. However, in order to keep the field at Miller Park in top shape for our players, you will not be permitted to use stakes or fasteners. For the same reason, we also ask that you refrain from wearing cleats with metal spikes or high heel shoes.
There will be a variety of areas open throughout the evening, though most will close when it's "lights out." These areas include:
Note: The infield will not be accessible to anyone during the event.
Yes, during the Field of Sweet Dreams you will have the opportunity to play catch on the Miller Park outfield. We encourage you to bring your glove and baseball to enjoy the experience of playing catch where the Brewers play.
No, the infield will be closed for the event. However, you will be able to enjoy the outfield and other areas mentioned above.
You will enter through the Home Plate Entrance. Please park in the Aaron lot which is located near the front of the stadium, just past Helfaer Field.
No. A responsible adult (parent or guardian) must accompany all guests under the age of 18, with a maximum of 4 children per adult (this will be strictly enforced upon registration).
No, parking for the Aaron lot is included in the admission price.
No. Field of Sweet Dreams is a family-friendly event, and no alcohol will be served or sold. Alcoholic beverages of any kind will NOT be permitted inside Miller Park and will be confiscated upon registration.
For additional questions please contact us at (414) 902-4452.


text:
What does DEA mean in Unclassified?
This page is about the meanings of the acronym/abbreviation/shorthand DEA in the Miscellaneous field in general and in the Unclassified terminology in particular.
Dog Erythrocyte An
Find a translation for DEA in other languages:
Select another language:
What does DEA mean?
- Drug Enforcement Administration.
Discuss this DEA abbreviation with the community:
Use the citation below to add this abbreviation to your bibliography:
"DEA." Abbreviations.com. STANDS4 LLC, 2014. Web. 22 Dec. 2014. <http://www.abbreviations.com/term/193148>.
DEA also stands for:
- Aerospace Drift Error
- Dance Educators of America
- Data Encryption Algorithm
- Data Entry Assistant
- Data Envelopment Analysis
... and 34 more »
Nearby & related abbreviations:
Alternative search:
- Search Dog Erythrocyte An on Amazon.com
- Search Dog Erythrocyte An on Google


text:
Close X
Kassatex Fine Linens SLH-256-MAR Hotelier 6-Piece Towel Set
Product Description
Hotelier 6-Piece Towel Set
100% Egyptian cotton, two ply construction makes the perfect complement to your luxury bath. Soft and absorbent with an everyday elegance.
- Set includes:
- 2 bath towels: 30" x 54"
- 2 hand towels: 18" x 30"
- 2 wash cloths: 13" x 13"
- Care instructions: Machine wash cold, tumble dry low, do not bleach.
- Each towel is complete with a convenient hanger loop for ease of storage after use
|100% Egyptian Cotton
Filter products based on if the product has embellishments.
Filter products by the types of pieces contained in the set.
|Included Pieces
|Bath Towel, Hand Towel, Wash Cloth
This feature allows you to select products by material. There are various materials to choose from, the most common being Cotton, Polyester, and Bamboo. Choose Cotton for the classic feel and breathability, Polyester for the smooth velvet like appearance, and Bamboo for light and extremely soft sheets.
|100% Cotton
Filter products by the number of pieces contained in the set.
|Number of Pieces
Would you like to update product info, give feedback on images, or tell us about a lower price?
Related Items
Questions & Answers
Didn't get the answer you needed?
We'll respond to your question in three days or less
There are no questions from the community yet
Customer Reviews
This product has no customer reviews yet
Write an online review and be the first to share your thoughts with other customers
Write an online review and be the first to share your thoughts with other customers
Tag This Product
A tag is a keyword assigned to a product which helps describe the item and allows it to be found by other customers
Add a new tag:
Separate multiple tags with commasWhat's this?
Additional Details
|Mfr Part #
|Group #
|Towel Sets - 15791
|- 0
|Sales Rank
Your Recently Viewed Items
You have no recently viewed items. After viewing product detail pages or search results, look here to find an easy way to navigate back to products you are interested in.
Your Recommended Items
You currently have no recommended items. Browse a few more items to give us an idea of what you like.
©1999 - 2014 ATGStores.com.Copyright notice | Site Map | By using this site you agree to our Terms & Conditions of Use and Privacy Statement
Server: WWW115 DBServer: EASTDB03 Created On: 12/29/2014 7:23:38 AM


text: highschool football By Jack Balzer September 9, 2011 5:17 PM Share on Facebook Share on Twitter Category: Share on Facebook Share on Twitter More Leave a comment Send to a friend! Print this page Pin it! Reddit This! Share on Tumblr! More from 929thebull.com Baby With Rare, Devastating Skin Disease Can't Be Touched Girl, 2, With Down Syndrome Models for Target, Wins Worldwide Cheers Grammy-Winning Songwriter Larry Henley Dead at 77 Baby Marshmallows Offer a Soft Solution To a Hard Problem Best of the Web


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[
Zend_Di is a dependency injector component. It minimizes coupling between groups of classes, makes unit testing much simpler, and provides an easy way to re-configure a package to use custom implementations of components. The architecture of the Zend_Di component is based on the following concepts:
Benefits of using a DI Container:
Zend Framework: Zend_Di Component Proposal
Proposed Component Name
Developer Notes
Federico Cargnelutti
Matthew Weier O'Phinney, Zend Liaison
0.1 - 21 November 2007: Initial Proposal. (wiki revision: 68)
Table of Contents
1. Overview
2. References
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
Zend_Di is a dependency injector component. It minimizes coupling between groups of classes, makes unit testing much simpler, and provides an easy way to re-configure a package to use custom implementations of components. The architecture of the Zend_Di component is based on the following concepts:
Benefits of using a DI Container:
Zend_Di is a dependency injector component. It minimizes coupling between groups of classes, makes unit testing much simpler, and provides an easy way to re-configure a package to use custom implementations of components. The architecture of the Zend_Di component is based on the following concepts:
Benefits of using a DI Container:
3. Component Requirements, Constraints, and Acceptance Criteria
- This component will use Reflection to wire dependencies.
- This component will use Configuration to wire dependencies.
- This component must support PHP, XML and INI configuration files.
- This component must allow all components to be constructed using Zend_Config instances.
4. Dependencies on Other Framework Components
- Zend_Config (optional)
- Zend_Exception
- Zend_Loader
5. Theory of Operation
Zend_Di provides generic factory classes that instantiate instances of classes. These instances are then configured by the container, allowing construction logic to be reused on a broader level. For example:
Once we separate configuration from use, we can easily test the Car with different Engines. It's just a matter of re-configuring the package and injecting Zend_Car_Parts_Engine_Gas instead of Zend_Car_Parts_Engine_Fuel.
6. Milestones / Tasks
- Milestone 1: [DONE] Design interface
- Milestone 2: [DONE] Write proposal
- Milestone 3: [DONE] Gather feedback and revise design as necessary
- Milestone 4: Review by the Zend team
- Milestone 5: Develop full implementation and unit tests
- Milestone 6: Documentation
- Milestone 7: Future enhancements
7. Class Index
- Zend_Di
- Zend_Di_Container
- Zend_Di_Factory
- Zend_Di_Reflection
- Zend_Di_Parameter
- Zend_Di_Data
- Zend_Di_Registry
- Zend_Di_Storage_Interface
- Zend_Di_Storage_Object
- Zend_Di_Storage_Exception
- Zend_Di_Exception
8. Use Cases
Zend_Di handles injections via the constructor or setters methods. In addition, the component allows the user to map out specifications for components and their dependencies in a configuration file and generate the objects based on that specification.
Assembling Objects Using Reflection
Assembling objects using Zend_Di_Reflection
Assembling objects using Zend_Di_Container
Assembling Objects Using Configuration
The configuration is typically set up in a different file. Each package can have its own configuration file: PHP, INI or XML file. The configuration file holds the components specifications and package dependencies.
You can pass an instance of Zend_Config via the constructor, or set a configuration array using the setConfigArray() method.
The cases below assume that the following classes have been defined:
The two major flavors of Dependency Injection are Setter Injection (injection via setter methods) and Constructor Injection (injection via constructor arguments). Zend_Di provides support for both, and even allows you to mix the two when configuring the one object.
Constructor dependency injection
When a class is loaded, the constructor method is selected by default.
Users can map out specifications for components and their dependencies. So whenever a class is loaded, Zend_Di will inject the dependencies automatically. For example:
Setter dependency injection
Zend_Di injects dependencies using the top-down fashion, starting with the constructor and ending with the setter methods.
Users can map out specifications for a component:
Storage Containers
You can tell Zend_Di what components to manage by adding them to a container (the order of registration has no significance). Containers are stored are retrieved using the Zend_Di_Registry class. The Zend_Di_Registry::getContainer() method returns an instance of Zend_Di_Storage_Interface.
You can register your own container as long as you pass an instance of Zend_Di_Storage_Interface. New containers can be register using the Zend_Di_Registry::setStorage() method.
Real-life example
Please visit the following page: http://framework.zend.com/wiki/display/ZFPROP/Zend_Di+Example
9. Class Skeletons
- Zend_Di_Container
- Zend_Di_Factory
- Zend_Di_Parameter
- Zend_Di_Registry
- Zend_Di_Storage_Object
Nov 28, 2007

I like this proposal! This would be a very useful extension for the ZF and other Components of the ZF.

A "real-life" Use Case would be a nice addition to this proposal.

Nov 28, 2007

Hi Thomas,

Yes, I agree. I've replaced the Zend_Automobile example with a real example.

Thanks for the feedback.

Nov 29, 2007

Thank you! That was fast! Very good example.

Jan 17, 2008

Another example is the current front controller. As it is a singleton, it is hard coded in a lot of helper which receive the request object via the front controller. Extending the front controller it is pretty ugly, as you need to change the front controller to a pseudo-singleton (where Zend_Controller_Front::getInstance() and CustomFrontController::getInstance() refers to the same instance). With dependency injection this would be fixed.

A more general comment: I really like your proposal as I'm a big fan of the dependency injection pattern (see my proposal for <ac:link><ri:page ri:content-title="Zend_Config_Configurable" /><ac:link-body>Zend_Config_Configurable</ac:link-body></ac:link> which is also related). The issue is, that it would require large refactoring efforts as basically every component needs to be changed to use dependency injection to make it makes sense. But I would vote nevertheless for doing it. One concern I have is that from my experience dependency injection is one of the hardest pattern to get which could decrease the adoption rate of the Zend Framework because users feel overstrained with complexity.

Jan 29, 2008

Hi Lars, I know exactly what you mean and the idea is not to change other components in the ZF, but to offer developers an additional component that they can use to build objects and test them.

What you are saying about complexity and users looking for simpler options is true. And that's what I'm after, the most difficult thing, simplicity. I'll be adding some of Padraic's new ideas, and hopefully we'll end up having a more simple and versatile component.

I also consider Zend_Config_Configurable very important and I hope it gets added to the ZF.

Nov 30, 2007

0.3 Revision

Removed Zend_Registry dependency. No need to have a global registry.

Added Zend_Di_Container_Storage_Interface, allows users to register custom containers.

The addDependency() method name was changed to addComponent().

Naming convention: Zend_DI has been renamed to Zend_Di (my mistake, sorry).

Instance of Zend_Config is now passed via the constructor.

Added the setConfigArray() method. Zend_Config is optional.

Jan 18, 2008
<ac:macro ac:name="unmigrated-wiki-markup"><ac:plain-text-body><![CDATA[Quick comment before I review fully. Could I suggest adding an ultra simple method for instantiating objects using a shorter API? Mainly it's to keep folk not making full use of the DI happy about having a shorter means of allowing for object substitution. The suggestion posted to the mailing list involved:
// In a test/spec
Zend_Di::replaceClassWithObject('Zend_Mail', new ZMail_Mocked);
// In actual controller
Zend_Di::instance('Zend_Mail');Unknown macro: {/code}
Switched around the interface to play on Zend_Di. The reason for the static methods is simply because this would be a fire and forget operation without configuration files or any in-depth requirement for DI beyond allow object substitution for tests.
On a finer point, this package in general is a great idea but you're complicating my life already . I now have to ensure PHPSpec supports both the short-form method suggested, as well as the full breadth of Zend_Di's capabilities for its Zend Framework Context. I'll try to comment further after a better review.
Is there actual working source code for the package yet? Not pressing too hard - if it's still in progress fair play. Look forward to Zend_Di's inclusion soon.]]></ac:plain-text-body></ac:macro>
Jan 28, 2008

Hi Paddy,

I like the idea and I'll implement it this weekend. I can see the benefits of adding those static methods to Zend_Di, like you said, it will allow users to replace objects without the need of having config files, and that can be very handy.

I'm planning to rename Zend_Di_Component_Factory to Zend_Di_Factory, remove Zend_Di_Component_*, and create Zend_Di.,

Is there actual working source code for the package yet?

Yes, I wrote it almost 2 months ago and I've been using it since.

Thanks for your feedback and suggestions <ac:emoticon ac:name="smile" />

Jan 29, 2008

Also, Zend_Di_Container_Storage acts as a local registry container that allows users to store objects, also providing an interface in case they want to make it a global registry (extending Zend_Registry and implementing Zend_Di_Container_Storage_Interface, for example.

Marcus Boerger wrote a similar class for the SPL library, called SplObjectStorage, and it's very similar to Zend_Di_Container_Storage. The problem is that this class will be available since php 6. The good thing is that making the switch in the future will not be a problem.

Mar 03, 2008

SplObjectStorage is available in 5.2.5 and in 5.3.

Jan 30, 2008

Hi Federico,

If you have source code you could spare for a review, I'd really love to get hold of it (under license and with an NDA promise until you're ready). This is my #1 most wanted component right now <ac:emoticon ac:name="wink" />.

Jan 30, 2008

Np, let me make those changes this weekend and I'll send you the code by email. You are more than welcome to change it, improve it or do what ever you like with it.

Feb 02, 2008

I've updated the code, you can see the changes here: SVN

I've added 2 static methods to Zend_Di, create() and replaceClass():

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
$foo = Zend_Di::create('Zend_Foo');
$constructorArgs = array(new FooA(), new FooB(), 3, 4);
$setterArgs = array('setComponentA' => array(new FooA(), 2));
$mock = Zend_Di::create('Zend_Mock', $constructorArgs, $setterArgs);
Zend_Di::replaceClass('Zend_Foo', $mock);
Feb 03, 2008

I have the source and am reviewing now, Federico <ac:emoticon ac:name="smile" />. Looks good - I'll feed back any comments I have in the next day or two.

Feb 05, 2008

My first take is that this is rather complicated and could be simplified quite a bit. I would suggest a light weight approach that doesn't try to solve every use case (at least not yet). The biggest thing I'd recommend would be to not use configuration as the primary means of wiring dependencies. Why not simply pass the class name to addComponent (or interface and class name) and use reflection to determine dependencies? Certainly configuration files could be used, optionally, to replace calls to addComponent. Here's an example of a simplified use case:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
//note the missing config parameter
$container = new Zend_Di_Container();
//note the ability to specify class or interface and class
->addComponent('Feline', 'Tiger')
->addComponent('Canine', 'Wolf');
$zoo = $container->getComponent('Zoo');
//the above is equivalent to (assuming setter injection)
$feline = new Tiger();
$canine = new Wolf();
$zoo = new Zoo();
//assume the parameter for setFeline is type hinted to Feline
//assume the parameter for setCanine is type hinted to Canine

The one problem I see with the example I just provided is that it assumes type hinted parameters might be dependencies. This would have to be thought through a little more to consider all the potential pitfalls. I understand that using a config solves this problem, but a I fear it's an overly burdensome requirement. If PHP supported meta data that could be used in reflection (e.g. reading an @dependency tag in the DocBlock) that would also solve the problem.

The newInstance() method implies these are not primarily managed as singletons. My understanding is that DI containers are typically used to manage singletons, can you explain your intent here a little more? If these are, in fact, singletons then maybe getComponent() (like in PicoContainer) instead of newInstance()? The ability to pass in values and bind parameters seems like an advanced use case, I wouldn't focus on that as much. As I said a second ago, my understanding is that the primary use of DI would be to replace singletons and registries. For the most part, these should be stateless.

An earlier comment talked about the possibility of a DI container being used as the primary means of getting at objects throughout the framework (the example was in MVC). I think this is worth considering. If this were used as the main "registry" (for lack of a better word) for Zend Framework components, child containers would be a nice feature. There would be a root container and one container for each module (if you use MVC modules). It looks like you might be doing something like this with the container manager. But, if containers are, themselves, meant for managing objects whey can't this be simplified to a parent/child relationship? In other words, Zend_Di_Container_Manager seems redundant since Zend_Di_Container's job is to manage things.

One final note on one of your examples: I'm not sure if extending the container for a specific use case is something you'd want to encourage.

Feb 06, 2008

Just to clarify one point - Dependency Injection gained popularity primarily out of two immediate needs in applications:

1. How to inject a changeable network of objects into another object, without in-code declaration (i.e. it needed to be externally configured) of the instantiation, configuration and injection of other objects.

2. How to substitute objects being directly instantiated within other objects when applying Test-Driven Development where the object or system under test (SUT) must be isolated from all it's immediate dependencies.

It is not intended to prevent the use of Singletons and Registries, though I will readily agree that in the Zend Framework that is probably a very valid concern. The truth is that in applying TDD to a Zend Framework controller the very last thing you ever want to rely on is Zend_Registry's static methods. Why? Because you can't mock or stub a static class easily. Or rather you can, but it bumps up the complexity of your tests because now all tests must manage yet another global value set.

I suppose another interesting use case of DI is to replace a design pattern called the Abstract Factory. It's more interesting in that you do see a lot of literature from Java these days talking about using a complex solution to a simple Abstract Factory problem. Sometimes the extra weight does come in handy though, and since a DI container already exists, it's less code to just use it.

Feb 06, 2008

I would suggest that a Zend Framework DI container not also be an Abstract Factory. In my opinion, it should solve one problem and solve it well. The biggest need I see, and you touched on this, is for a replacement to Zend_Registry's static methods (at first for user objects and then perhaps Zend Framework components). I would suggest, for simplicity, that a Zend Framework DI container only focus on managing singletons. For this reason, I suggested renaming newInstance() to getComponent(). If a use case requires more than one instance of an object, it can be created in a separate instance of the container, perhaps with parent/child relationships between containers. For example:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
//again, suggesting that we not use configs, only reflection
$rootContainer = new Zend_Di_Container();
//passing in the root container so the child is aware of its parent
$childContainer = new Zend_Di_Container($rootContainer);
//suggesting here that we can add either class or class and interface
$instanceA = $rootContainer->getComponent('SomeClass');
Child containers should have access to their parent's components (but not the other
way round) so if we hadn't added the component specifically to the child container
this next line would have given us instanceA.
$instanceB = $childContainer->getComponent('SomeClass');
echo (int) ($instanceA === $instanceB); // echoes "0" (false)

Certainly an Abstract Factory (or equivalent) would be a nice addition to Zend Framework but I think it should be a separate component, perhaps sharing some common pieces with the DI component. DI can be a complicated subject for developers to understand. I'd think we would want to make it easy for people to use it correctly without too much extra stuff that they could shoot themselves in the foot with.

Feb 06, 2008

To clarify (is that a favourite word of mine? <ac:emoticon ac:name="wink" />), I didn't mean to suggest DI replace an AF entirely, or even in the majority of use cases for an AF, but in some select cases it works as well as a separate Abstract Factory. The literature is already full of enough warnings of DI overtaking AF that total substitution of one for the other has already been found questionable.

With regard to configuration vs compositional building - where do I substitute in Mock Objects in your above use case? As it stands with Zend_Di I have two options depending on whether the static methods were used (simple redirection through Zend_Loader::loadClass() with ReflectionClass::newInstanceArgs() at the end) or a configuration file (just statically substitute a new configuration generated by the test).

Zend_Di needs to keep it's eye on two balls here: testing facility, and object wiring...

Feb 06, 2008

By wiring up objects as class and interface:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
$container->addComponent('Feline', 'Tiger');

instead of just class:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
//not testable but still "works" (Tiger is registered as type Tiger)

and then having your dependency be on the interface:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zoo
- @var Feline
protected $_feline;
public setFeline(Feline $feline)Unknown macro: { $this->_feline = $feline; }

not on the implementation:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
//not testable
class Zoo
- @var Tiger
protected $_tiger;
public setTiger(Tiger $tiger)Unknown macro: { $this->_tiger = $tiger; }

then we can simply wire up a mock Feline:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
$container->addComponent('Feline', 'MockFeline');

In the case that your mocks are generated by a testing facility then addComponent() should support being passed an object instance instead of a class name:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
//assumes $mockFeline has already been created by the testing facility
$container->addComponent('Feline', $mockFeline);

We get both testing and object wiring this way <ac:emoticon ac:name="smile" />

- @var Feline
Feb 07, 2008

Thanks for the feedback <ac:emoticon ac:name="smile" />

> <ac:link><ri:page ri:content-title="Bradley" /></ac:link> My first take is that this is rather complicated and could be simplified quite a bit. I would suggest a light weight approach that doesn't try to solve every use case (at least not yet).

That's basically what I thought when developing the component. There are 2 well known approaches and trying to cover all the test cases could result in a big and complex component. So I focused on the wiring approach for 2 reasons: I consider dependency mapping though configuration to be more flexible and powerful, and the other reason is that this approach integrates better with a container based persistence system that I'm developing.

I'm aware that are people that prefer configuration and others don't, IMO DI containers should be flexible and adaptable. So, my question is, should ZF provide a component that offers both approaches and covers all the use cases? Should I refactor this component to handle both approaches?

I agree with Padraic when he says that the Zend_Di it needs to keep it's eye on testing facility and object wiring. And I also agree with what you are saying, it would be great if we could offer the user both approaches, and by looking at your example, it seems possible and shouldn't be difficult to implement.

About Zend_Di_Container_Manager, I think you are right, it should be called Zend_Di_Storage_Manager, because it manages the Storage containers and not the Container itself. Storage and Manager and both part of Zend_Di_Container.

I think this component can be improved by all of us, but first it needs to by approved by Zend. DI containers are becoming more and more popular every day in the php world, and I hope it gets approved, because like Wil said: "ZF is set by the opinions of the ZF community right now". And right now, everyone is getting familiar with DI containers and some developers are even building their own. In the last 3 months, 3 new PHP DI containers have been developed, one of them is an excellent port of the latest version of PicoContainer.

Feb 07, 2008

I think a DI container could be a great addition to Zend Framework, thank you for proposing it <ac:emoticon ac:name="smile" />

I think you should support setting up components through a configuration file, just not necessarily dependencies. IMHO, dependencies should be handled solely through reflection so that I can quickly add new dependencies in my code without having to update a configuration file (I am aware that there are potential pitfalls to this approach that would have to be explored). I see the configuration option as being a shortcut to typing a bunch of calls to addComponent() - it would basically make all the calls to addComponent() for me. For example:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
$components = array(
'component' => 'Zoo',
'component' => 'Feline',
'implementation' => 'Tiger',
'component' => 'Canine',
'implementation' => 'Wolf',
$container = new Zend_Di_Container($components);

would essentially do this for me:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
$container = new Zend_Di_Container();
->addComponent('Feline', 'Tiger')
->addComponent('Canine', 'Wolf');

At the very least, let me do everything in code that I could do with a configuration file. There are currently no components (that I am aware of) in Zend Framework that require me to use configuration. I like the ability to go in and get my hands dirty if I want.

Feb 08, 2008

I'm not intimately familiar with the innards of every DI container, but perhaps Bradley can suggest how to implement an automated Reflection system? I think non-configuration would be possible - in a sense allow for configuration to drive the manual API via a Factory solution (which likely exists in implementation as is, so refactor, refactor <ac:emoticon ac:name="wink" />).

The problem I have with Reflection is that it's unaware of how the component will be used, and so can't really predict future behaviour. It's usefullness may well be limited to constructors, and even then only to required parameters. I think you underestimate the complexity of that - I have enough interesting moments tracking Mocked dependency classes in PHPMock where I need to obey the real class's API requirements and type hinting by using Reflection in a similar fashion.

I suppose what I'm digging at is whether automated injection using Reflection is capable of Setter Injection - where Setters can be both required or optional. How will Reflection help make that decision without user interference?

I'm with Federico on one thing - we need Zend to approve this component pronto <ac:emoticon ac:name="wink" />. I'd suggest emailing Wil after 1.5 is released and see if he'll slot into the review process quickly. Until Wil implements some of the review process changes he's hinted at the review process will remain a quagmire of extreme slowness except for Zend sponsored components. And I so really want to see Zend_Di in the Incubator yesterday...

Feb 08, 2008

Here is a quick way to determine potential dependencies. This is obviously hacked together and could be more elegantly packaged:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zoo {
- @var Feline
protected $_feline;
- @var Canine
protected $_canine;
- Sets the Feline for the Zoo to have.
- @param Feline $feline
- @return void
public function setFeline(Feline $feline)Unknown macro: { $this->_feline = $feline; }
- Sets the Canine for the Zoo to have.
- @param Canine $canine
- @return void
public function setCanine(Canine $canine)Unknown macro: { $this->_canine = $canine; }
$dependencies = array();
$class = Zend_Server_Reflection::reflectClass('Zoo');
$methods = $class->getMethods();
foreach ($methods as $method) {
$prototypes = $method->getPrototypes();
foreach ($prototypes as $prototype) {
$parameters = $prototype->getParameters();
foreach ($parameters as $parameter)Unknown macro: { $dependencies[] = $parameter->getType(); }
[0] => Feline
[1] => Canine

Like I said before, there are potential pitfalls to this approach that would have to be explored. My current thinking is that code similar to what is above would be used to determine potential dependencies when getComponent() is called. For each potential dependency that is actually a registered component with the container, the container calls getComponent() on that. This process repeats, recursively, until all dependencies have been resolved. The immediately obvious pitfall is that you intended your component to have a dependency but, if the component you depend on hasn't actually been added to that container then the container silently skips it instead of throwing an exception. In other words, with my current proposal, there is no way to declare that you have a required dependency.

- @var Feline
Feb 08, 2008

Pádraic: after re-reading your comment I realize I didn't directly address your issue about setters being required or optional. What I am proposing, and this certainly needs to be thought out more, is that any parameter of any public function (perhaps limited to constructors and functions beginning with "set") that has a type is considered a potential dependency and is confirmed as a dependency if its type is found in the container. Assuming the container only manages singletons, this may not be as bad as it sounds at first read <ac:emoticon ac:name="smile" />. Why would you ever have a parameter's type be a class that was intended to be a singleton and not expect to get a reference to the one instance of that singleton (unless you didn't realize the class was meant to be a singleton in which case you already have a logic error anyways)? I will have to explore Zend_Server_Reflection a little more and see if there is a way it can be used to discover the intent of the original class author (i.e. is it a dependency at all and, if so, is it required or optional).

Feb 08, 2008

Setters can be both required or optional. How will Reflection help make that decision without user interference?

I agree. That's one of the issues of using code, user intervention is needed. You can't expect the Reflection system to decide for you.

What you are suggesting Bradley is to inject singletons to all the setter methods that have a type hint followed by a non-optional parameter (ReflectionParameter::isOptional()===false), right? But how does the Reflection system know which setters are required (assuming that some of them are optional) and what to inject (new or single instances)?

Feb 09, 2008

What I'm proposing does not detect whether a dependency is required or optional. That is probably the biggest drawback to what I am suggesting but I still think the simplicity it provides may be worth the trade.

Everything in my proposal is based on the assumption that the container is only meant to handle singletons and that it cannot be used as a factory of any sort (other than, of course, creating the singleton the first time it is needed). If the container can also be used as a factory, then what I have suggested does not work. So, part of my proposal is to simplify the container to focus on replacing registries and the use of class-managed singletons as I see that being the most likely use case.

My proposal would not use ReflectionParameter::isOptional() for anything as it would be pointless, let me explain why. Every parameter (that has a type) to every public method would be considered a potential dependency and then be confirmed as a dependency if its type in fact registered in the container. For example, given the following class:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zoo {
- @var Feline
protected $_feline;
- @var Canine
protected $_canine;
- @var array
protected $_visitors;
- Sets the Feline for the Zoo to have.
- @param Feline $feline
- @return void
public function setFeline(Feline $feline)Unknown macro: { $this->_feline = $feline; }
- Sets the Canine for the Zoo to have.
- @param Canine $canine
- @return void
public function setCanine(Canine $canine)Unknown macro: { $this->_canine = $canine; }
- Adds a visitor to the Zoo.
- @param Visitor $visitor
- @return void
public function addVisitor(Visitor $visitor)Unknown macro: { $this->_visitors[] = $visitor; }

When the Zoo class is added to the container, it would detect Feline, Canine, and Visitor as potential dependencies. However, in this example, only Feline and Canine are singletons and managed by the container. When the Zoo class is first instantiated by the container it would confirm Feline and Canine as dependencies, since they are managed by the container, and silently (and correctly in this case) not call addVisitor() since there is no Visitor managed by the container. As you can see in this example, just because ReflectionParameter::isOptional() would give us false for the $visitor parameter of addVisitor() does not mean that Visitor is a required dependency, or more correctly, a dependency at all.

The obvious problem here is in the case that there were no Canine managed by the container then we have no way of telling the container that Canine was a required dependency and an exception would not be thrown. One could argue, though, that we would certainly get an exception the first time we tried to use the null $_canine property and that may be good enough. Whether or not the simplicity that this provides is worth the trade-offs is certainly up for debate.

Feb 09, 2008

I have an idea. There are 2 different approaches for wiring objects, using reflection or configuration. The component needs to be redesigned in order to support both. I would need to change it to something like this:

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[

The first one wires an object using configuration, the second one using reflection. They can both use the same container class, Zend_Di_Container. The manager class, Zend_Di_Container_Manager, no longer exists, Zend_Di_Container now manages all the components.

I think that, considering how different both approaches are, this will give us more freedom to develop an assembler that uses only Reflection.

So, should we separate both approaches first? What do you think?

Feb 10, 2008

I think that for the benefit of this proposal we should split it in 2. Otherwise, if we try to cover everything from the start, the proposal might never move forward. We know what the requirements are, and based on that I can redesign the component with extensibility in mind. This will allow other developers to extend it by creating their own proposal based on a different DI approach.

Feb 10, 2008

In reply to your first comment, it may be possible to simply have a configurable option - something along the lines of "assumeDependencies". If set to true, it will assume everything is a potential dependency. If set to false, it would only wire up dependencies that were specifically configured in the container (either using the container's API or by passing a config).

In reply to your second comment, are you suggesting an alternative (perhaps even complementary) proposal with a simplified set of use cases? I would be happy to draft this proposal if this is what you are suggesting. This might be good to see where each proposal ends up (let each have a life of its own since they are trying to solve different use cases), and then eventually combine the best parts of each.

I know that you would like to see a DI container approved for Zend Framework ASAP. My guess is that since DI containers can be very complicated for developers to understand that Zend will not rush the inclusion of such a container. In other words, they will probably expect a lot more dialog about how a DI container would be used by both Zend Framework users and component developers. My ideas about how such a container would be used could certainly use a lot more scrutiny <ac:emoticon ac:name="smile" />

Feb 10, 2008

The idea is to create proposals and improve existing ones, so if you think you can improve this proposal or extend it, just go for it <ac:emoticon ac:name="smile" /> The reflection approach has already been developed, so it shouldn't be difficult to implement something similar, Phemto is a good example of this.

DI containers can be very complicated for developers to understand

Well, this particular component is being used in my company and everyone found it very usable and straight forward. And considering that some developers had never used a DI container before, it proves that this particular API works.

I redesigned the API based on user comments and it's almost done. Why don't you play around with it and see if you can implement your ideas based on the existent code, and if you can't, then yes, you should create a new proposal explaining your ideas. That would definitely benefit the framework, its users and this proposal itself.

Feb 10, 2008

I see the link to browse the repository using Trac but do you have the svn repository itself available so I can easily check out a working copy?

- @var Feline
Feb 10, 2008

Revision 0.4: API reworked

<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
Feb 11, 2008

Bradley, your proposal looks interesting, I also think it will be a nice thing to have, and I already have some ideas on how we can implement them once it moves to the incubator and we have access to the repository. I have reworked the API, and I recommend future changes to take place after the proposal gets reviewed by the dev-team.

Bradley (and anyone else), feel free to edit this proposal and add your own ideas to it. Like you said, you might be able to simplify or explain better the use cases. Remember, the nature of a wiki, a svn repository and a community itself, is team work. We've seen some cases of "my component" or "my proposal", but this is not the case, it goes against my XP principles. So go on, feel free to use the wiki <ac:emoticon ac:name="smile" />

Feb 12, 2008

Assembling Objects Using Reflection

If this was to be added, we need to think about what to do if we have more than one object that implements the same interface. For example:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zend_Foo {
public function __construct(
Zend_Foo_Component_Interface $componentA = null,
Zend_Foo_Component_Interface $componentB = null,
$arg3 = null,
$arg4 = null) {
public function setComponentA(Zend_Foo_Component_Interface $component, $arg2 = null) {
// Example of more than one object implementing the same interface
$di = new Zend_Di_Reflection();
$di->addComponent(new Zend_Foo_Component_A());
$di->addComponent('Zend_Foo_Component_B', 'Zend_Foo_Component_Interface');
Feb 13, 2008

I would suggest that the interface (or class) that the component is registered under acts as the key and there can only be one key in a container. A component may be registered under its own type or any of its parent types (interfaces or classes) but its registered type is what needs to be unique. If you try to register a component under an interface or class that it does not implement or extend, you would get an exception. If you try to register a component under and interface or class that has already been registered in the container, you would get an exception.

In your example above (applying my suggestion), you would have two components registered: Zend_Foo_Component_A and Zend_Foo_Component_Interface. The single instance of Zend_Foo_Component_Interface (which happens to be a Zend_Foo_Component_B) is what would be injected in both parameters of the constructor (which would obviously be pointless) and in the setter. In other words, a class with dependency would have to ask for the exact type it wants and it would only get injected if that exact type has been registered.

Note that with my suggestion two components of the same actual type could be registered in a container but they would have to be registered under different interface or class types that they implemented or extended. Also, since the key is the most important part I would suggest reversing the parameters of addComponent():

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
$di = new Zend_Di_Reflection();
//only the key is provided (in this case the specific object type)
$di->addComponent(new Zend_Foo_Component_A());
//key and specific object type are provided
$di->addComponent('Zend_Foo_Component_Interface', 'Zend_Foo_Component_B');
Feb 13, 2008

Yes, that's a possible solution. But keep in mind that if you do it that way, you are sacrificing classes that inject multiple objects with a same interface.

What if the method accepts an optional argument called $class, which is the name of the dependency class, for example:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zend_Foo {
public function setComponentA(Zend_Foo_Component_Interface $component, $class = 'Zend_Foo_Component_A') {

So, ReflectionParameter::getName() checks for the name, if the argument name is "class" it checks to see if a default value is available and if it is, it gets the component from the container and injects it.

Pros: Zend_Di supports injecting objects that implement the same interface.

Cons: It still needs user intervention in order to work.

Feb 13, 2008

I'd like a DI container that only manages a single object registered under a given type. I'd prefer that my DI container not also act as a factory of any sort (other than first creating the object instance, of course). This approach seems much simpler to work with and is consistent with other DI containers I've worked with. Of course, this is just my personal preference <ac:emoticon ac:name="smile" />

Unfortunately the solution above requires the dependent class to both have knowledge of the specific object type (which defeats the purpose of programming to an interface) and to (effectively) have knowledge of the container's API. Components should be container agnostic for the most part - they should be POPOs (Plain Old PHP Objects). The one exception to this would be the use of meta data (if PHP reflection supported this, e.g. a DocBlock @dependency tag).

Note that I am suggesting it be possible for two objects of the same concrete type to be registered, just under different keys. So, the following would work to get both instances of the same concrete object registered under different types:

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zend_Foo {
public function setComponent(Zend_Foo_Component_Interface $component) {
public function setComponentA(Zend_Foo_Component_A $componentA) {
$di = new Zend_Di_Reflection();
//Zend_Foo_Component_A registered as Zend_Foo_Component_A
$di->addComponent(new Zend_Foo_Component_A());
//Zend_Foo_Component_A registered as Zend_Foo_Component_Interface
$di->addComponent('Zend_Foo_Component_Interface', 'Zend_Foo_Component_A');
Feb 13, 2008

Sorry my mistake, it's nonsense what I wrote above. Yes, I'm definitely with you in this one. What about adding a 2nd and optional parameter to the addComponent() method:

addComponent ( mixed component <ac:link><ri:page ri:content-title=", array method" /></ac:link>] )

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zend_Foo {
public function __construct(Zend_Foo_Component_A $componentA) {}
public function setComponentA(Zend_Foo_Component_Interface $component) {}
public function setComponentB(Zend_Foo_Component_Interface $component) {}
public function setComponentC(Zend_Foo_Component_C $component) {}
$di = new Zend_Di_Reflection();
// Class Zend_Foo_Component_A implements Zend_Foo_Component_Interface
$di->addComponent(array('Zend_Foo_Component_A'=>'Zend_Foo_Component_Interface'), array('__construct', 'setComponentA'));
// Class Zend_Foo_Component_B implements Zend_Foo_Component_Interface
$di->addComponent(new Zend_Foo_Component_B());
// Class Zend_Foo_Component_C
$di->addComponent(new Zend_Foo_Component_C());
<ac:macro ac:name="code"><ac:plain-text-body><![CDATA[
[Zend_Foo_Component_A] => Array
[class] => Zend_Foo_Component_A
[instanceOf] => Zend_Foo_Component_Interface
[method] => Array
[0] => __construct
[1] => setComponentA
[Zend_Foo_Component_B] => Array
[class] => Zend_Foo_Component_B
[instanceOf] => Zend_Foo_Component_Interface
[method] => Array
[0] => setComponentB
[Zend_Foo_Component_C] => Array
[class] => Zend_Foo_Component_C
[Zend_Foo_Component_Interface] => Array
[0] => Zend_Foo_Component_A
[0] => Zend_Foo_Component_B
Feb 14, 2008

This definitely works but it still requires a certain amount of "configuration" above and beyond simply throwing classes (or objects) into the container. If you're going to allow more than one component registered under the same type I certainly can't think of a better approach unless we can read the DocBlock annotations through reflection. Sebastian Bergmann talks about that here:

http://sebastian-bergmann.de/archives/488-Annotations-in-PHP.html

If this works, then we could simply annotate the class itself or use configuration (whichever the user prefers):

<ac:macro ac:name="code"><ac:default-parameter>php</ac:default-parameter><ac:plain-text-body><![CDATA[
class Zend_Foo {
- The inject annotation here is not needed since we aren't
- changing the type to inject, but it doesn't break anything.
- @param Zend_Foo_Component_A $componentA
- @inject Zend_Foo_Component_A
public function __construct(Zend_Foo_Component_A $componentA) {}
- Here we are saying we would prefer to have the more specific
- Zend_Foo_Component_A injected. I'm not sure why we wouldn't
- just register Zend_Foo_Component_A as Zend_Foo_Component_A
- instead of having both Zend_Foo_Component_A and
- Zend_Foo_Component_B registered as Zend_Foo_Component_Interface
- and then use Zend_Foo_Component_A as the parameter type thus
- negating the need for the inject annotation.
- @param Zend_Foo_Component_Interface $component
- @inject Zend_Foo_Component_A
public function setComponentA(Zend_Foo_Component_Interface $component) {}
- See the comment above for setComponentA.
- @param Zend_Foo_Component_Interface $component
- @inject Zend_Foo_Component_B
public function setComponentB(Zend_Foo_Component_Interface $component) {}
- Note that this would still work without the inject annotation.
- @param Zend_Foo_Component_C $component
public function setComponentC(Zend_Foo_Component_C $component) {}

This is a little messy since technically the annotations apply to the entire function, not the specific parameter. However, I think that reflection actually uses the type of the param annotation not they type that is type hinted in the function. If this is true, you could ditch the inject annotation all-together and simply "lie" in the param annotation. A little off-topic, but this could potentially address your earlier question about required or optional dependencies but I won't go into that yet as I haven't fully thought it through.

Feb 15, 2008

Yes, Jeff Moore is doing something similar with his DI container for the Wact framework, but IMO the DI container has to adapt to the API and not the other way around. By using the DocBlock, you are assuming that all the users can edit the file and add comments (@inject or @param). And in most of the cases, only core developers have this privilege.

Feb 16, 2008

If you think about it, a file with annotations is a non standard configuration file, because it doesn't follow any standards. If you use annotations as configuration parameters you are converting that file in a configuration file. And I don't see a lot of advantages of using annotations as configuration parameters, over xml, ini or yaml for example. Also, I think that comment blocks should first become a standard in order for us to use them as config params.

But still, when it comes to DI containers, people are talking about this stuff, and I'm sure everyone has its own opinion about it <ac:emoticon ac:name="smile" />

Feb 16, 2008

I completely agree with you on this. I'd like to see a solution that works without any configuration at all. However, if configuration is required I think it's acceptable to allow the configuration to happen in either on the container level (by passing in configuration parameters) or at the class level via annotations. This would be especially useful when prototyping since you wouldn't have to be constantly updating your configuration (I agree configuration is cleaner in this scenario, just not always as practical). Whether or not annotations are considered a "standard" way of exposing information about a class in PHP is definitely a good point and I don't know the answer to that.

The bottom line is that configuration of some form or another is required if you don't enforce singleton (by registered type) rule within a container. This is probably the more fundamental issue where I have difference of an opinion as to how a DI container would be useful to PHP applications <ac:emoticon ac:name="smile" />

Feb 23, 2008

Hey guys,

This is a great proposal, I would like to register my vote for this <ac:emoticon ac:name="smile" />

Also whilst looking around trying to find out more about DI in general I stumbled across some other PHP5 implementations that you may be interested in:

http://xyster.devweblog.org/about/di - Xyster ZF extension
http://www.seasar.org/en/php5/DIContainer.html - PHP5 seasar port

Not sure if these solve any of the issues you guys have been talking about, but I thought they might be worth knowing about.

From looking at the PHP reflection docs it does look possible to get metadata from methods, not too sure about properties atm.

Feb 28, 2008

Hi Keith,

PicoContainer has been ported to PHP in various occasions, Pawel ported it in 2005 and now Xyster ported the latest version of PicoContainer. The idea of this proposal, Zend_Di, is to create a simple and flexible DI container without porting the complexity of Java. Basically, any component or library can be ported, but I thought it would be interesting to create one based on the different ideas that are floating around in the php community. The way you inject a dependency using Zend_Di_Container is almost as easy as creating a form with Zend_Form. But if you decide to use Zend_Di_Reflection, it's even easier.

Cheers,

Jun 21, 2008

This proposal was created 7 or 8 months ago, I'm moving it to the "Ready for review" section as it is becoming obsolete. What begin as a lightweight dependency injection container for PHP slowly turned into a more complex and unusable component, it's trying to do too much. If this component ever moves forward, I'll be more than happy to refactor it and keep it as simple as possible.

Jul 01, 2008
<ac:macro ac:name="note"><ac:parameter ac:name="title">Zend Comment</ac:parameter><ac:rich-text-body>

We are archiving this proposal at this time. We agree with Federico that the proposal has become complex and unwieldy in its current format, and has few use cases within the framework itself (though it could have a number of use cases in userland code).

We encourage the original author and/or any other interested parties to revive the proposal by posting a new proposal in the future with a new implementation showing clean and compelling use cases.
</ac:rich-text-body></ac:macro>


text:
Upload Photo
News 12 BX Snowstorm 2/8 Photos
Viewer storm photos from around The Bronx.
LI notable deaths 15 fun things to do this week on LI Notable deaths 2014: Long Islanders we lost this year Newsday's top 25 LI pictures of 2014 Brother vs. brother at Floral Park-Oyster Bay Baldwin vs. Valley Stream Central Shopping at Roosevelt Field? 10 places to eat Puppy of the day Puppies from Posh Pets of Long Beach Places we loved on Long Island North Babylon vs. Smithtown West LI's car accidents


text:
Thursday, December 25, 2014
Follow us:
Time Warner Cable video customers:Sign in with your TWC ID to access our video clips.
Sign in
Free Video Views Remaining
To get you to the stories you care about, we are offering everyone 10 video views per month.
Watch Video
Access to our video is always free for Time Warner Cable video customers who login with their TWC ID.
To view our videos, you need to
install Adobe Flash 9 or above. Install now.
Then come back here and refresh the page.
Syracuse Police and Syracuse University are promising thorough reviews of claims that a top figure in the S.U. basketball program sexually abused two young men in the 80s and 90s. The claims against assistant coach Bernie Fine were made in interviews with ESPN. Fine issued a statement today calling the charges, "patently false". YNN's Bill Carey says it's an investigation delayed, and an investigation that may never produce any criminal charges.
SYRACUSE, N.Y. -- It was an interview that shook Syracuse University.
"I just remember being disgusted, in a sense. That's when everything, you know, when he started trying to touch me," said Fine accuser Bobby Davis in an ENPS interview.
Bobby Davis, a former ball boy for the SU basketball team claiming that he had been repeatedly abused in the 80s and 90s by assistant basketball coach Bernie Fine. Davis' story had gone untold by reporters who heard it in 2003, and unprosecuted by police and university officials who received the information in 2005. The problem was a lack of corroboration. In the wake of a sex scandal at Penn State, Davis said he got the corroboration he needed, a step brother, Mike Lang, who had also served as a ball boy, and who also claimed to have been abused by Fine. Again, post Sandusky, this time police stepped in.
Newsweek Columnist Buzz Bissinger said, "This is a much murkier case. Although having watched Davis on tape, listening to him, it is the same motive as Sandusky used. These guys have great power. They're father figures and take advantage of kids."
Syracuse University was quick to place Fine on administrative leave. A spokesman saying the school, "…takes any allegation of this sort extremely seriously and has zero tolerance for abuse of any kind."
Fine issuing a statement said that he was confident that, "...as in the past, a review of these allegations will be discredited and restore my reputation.'' Standing by his long time friend was head basketball coach Jim Boeheim.
"Somebody comes along who's related to the first guy. That's what the corroborating evidence is? It just does not come to belief. I've known Bernie for 50 years and, I don't believe this," said Syracuse University Basketball Coach Jim Boeheim in a TK99 interview.
The question is what Syracuse Police would do with this case, once they've complete their investigation. The statute of limitations for a criminal charge has run out.Attorney and author Paul DerOhenessian said, "Even if the case cannot be pursued, criminally or civilly, it still may be significant to make a record of the case, because any subsequent abuse by an individual could place an institution or employer on notice. And that's why, sometimes, victims are encouraged to still report an act or event, even if it can't be prosecuted or there can be no civil suit.
There is no timetable given for how long the investigation will take to complete.
Syracuse Police have now issued a request for assistance from anyone who may have information regarding this or any other cases involving alleged sexual abuse by Bernie Fine.
They're asking people with such information to contact them at (315) 442-5222.
Simply put, these allegations are patently false in every aspect. The fact is these allegations have been thoroughly investigated multiple times. When evaluating the veracity of these accusations, please keep in mind that credible media outlets were approached in the past to publicize these false allegations and declined to do so. I fully cooperated with all past inquires.
Sadly, we live in an allegation-based society and an internet age where in a matter of minutes one's life long reputation can be severely damaged. I am confident that, as in the past, a review of these allegations will be discredited and restore my reputation. I hope the latest review of these allegations will be conducted expeditiously.
Finally, I appreciate the Chancellor's statement that I should be accorded a fair opportunity to defend myself against these accusations. I fully intend to do so. There should never be a rush to judgment when someone's personal integrity and career are on the line.
Weather alert
» More alerts
From the Weather On The Ones Forecast Center, The National Weather Service Has Issued A WIND ADVISORY for the following counties: Herkimer (North), Herkimer(South) -- expires at 6:00PM. WIND ADVISORY for the following counties: Cayuga (North), Cayuga (South), Chenango, Cortland, Madison, Oneida (North), Oneida (South), Onondaga, Oswego, Otsego, Seneca, Tompkins, Wayne -- expires at 7:00PM.
Reproduction in whole or in part without permission is prohibited.
© 1999-2014 Time Warner Cable Enterprises LLC. All Rights Reserved.
Web design and web development by Tipit.


text:
English Licensed Swimming Meets
On this page you'll find information on licensed meets across England. This includes links to our Licensed Meets Calendar as well as links to the archive and general resources holding ASA Licensed Meets.
Licensed Open Meets are listed on the website through the calendar facility under "Licensed Meets".
County and Regional Championships are also listed using the same facility under "Competitions".
- Click here to filter calendar for 2014 Licensed Meets
Club Championships and Closed Licensed Meets
- Click here to access the calendar of English Licensed Meets for 2014-2015
The calendar is updated on a monthly basis, but if you have any queries regarding the accuracy of the details of any of the meets please contact firstname.lastname@example.com
ASA Competition Calendar
- Click here to download the swimming calendar for 2014-2018
Licensed Meets General Resources
As a result of the recently released ASA Competition Pathway document, the Licensed Meet process is currently under review. Updated information and documents will be included here as they become available.
To view the British Swimming Pathway Implementation presentation outlining the new competition structure click here.
Below you will find links to a range of PDF resources related to Licensed Meets. Click on the link to access the relevant document.
- Click here to download contact details of the ASA Regional Licensed Meet Co-ordinators.
- Click here for an application form to run a Licensed Meet in England
- Click here to download the guidelines for Licensing Open Meets valid from September 2012.
- Click here to download the Licensed Meets Promoter Report Form
- Click here to download the Licensed Meets Referee Report Form
- Click here to download the regulations and requirements for inclusion in British Swimming Rankings.
- Click here to download the Neutral Data Format Instructions for submission to Rankings


text: 1 Such a Simple MistakeANTMAN1971 | 09/06/2010 | See all ANTMAN1971's reviews (2)I played this game for a good few hours (well you have to considerating the load time of anything) and just couldn't get used to the button control layout, so I thought I'd change it, but you can't. Why can't I decide with button layout I'm more comfortable with. Why do game designers do this to us gamers? it's their way or the highway. So for these reasons I traded mine in.


text: We will be closed on Monday, September 1st, in observance of Labor Day. Besides, you've worked hard all year! So take a load off, enjoy the day with friends and family and hang up your white pants. (Hey, we're just trying to help here ...)We will return to normal business hours at 9AM on Tuesday, September 2nd.


text:
mouse over photo to zoom click for larger image
Kaleidoscope Gray Crystal Necklace
Tiered kaleidoscope facets bring a mesmerizing, dancing glitter to magnificently sized crystal stones. This necklace has a can't-miss necklace, yet it's black diamond color makes it very versatile, and especially beautiful with Lotus teal.
- 18.5" -20.5" with three-ring toggle closure.
- Glass crystal. Rhodium-finish settings and chain.
- Custom designed exclusively for WHBM. Handcrafted with nickel-free and lead-free metal.
We're so sorry: this item sold out sooner than expected. For an equally stylish substitute, please call our Style Experts at 1.877.948.2525. Or click on Live Help below for immediate assistance.


text:
- You are here:
- Photos >
- 2011 subaru forester
2011 Subaru Forester gets web debut
by Zach Bowman (RSS feed) on Oct 26th, 2010 at 5:57PM
Subaru has released official details on what we will be seeing in the 2011 Forester. The company had previously announced that the new 2.5-liter boxer four-cylinder engine will find its way under the CUV's hood, as will the same turbocharged 2.5-liter four-cylinder found in the current XT. Speaking of the XT, Subaru will now offer the range-topping Forester in XT Premium and XT Touring guises, with Touring trim replacing Limited as the top of the line. That brings along goodies like self-adjusting HID headlights, dual-zone climate control and a backup camera. Meanwhile, Subaru has packed... Read More