text:
If you're being treated for cancer, you might have questions about fertility preservation. Find out how cancer treatment can affect your ability to become pregnant or father a child, as well as what fertility preservation steps you can take before you begin cancer treatment.
How does cancer treatment affect fertility?
Certain cancer treatments can harm your fertility or cause sterility. The effects, which might be temporary or permanent, can occur immediately or at some point after treatment. The likelihood that cancer treatment will harm your fertility depends on several factors, including the type of cancer, cancer treatment and your age at the time of treatment.
Male fertility can be harmed by the surgical removal of the testicles or by chemotherapy or radiation that damages sperm quantity, quality or DNA.
Female fertility can be compromised by cancer treatments that involve the surgical removal of the uterus or ovaries. Cancer treatment can also affect eggs, hormone levels, or the functioning of the ovaries, uterus or cervix. The risk of developing premature menopause after certain cancer treatments increases as you age. Older women are also more susceptible to permanent ovarian damage.
The effects of chemotherapy and radiation therapy also depend on the drug or size and location of the radiation field. The most severe damage is caused when radiation is applied to the ovaries or testicles and by chemotherapy drugs called alkylating agents.
When should I talk to my doctor about fertility preservation?
If you're planning treatment for cancer and want to take steps to preserve your fertility, talk to your doctor, oncologist or a reproductive specialist about your options as soon as possible. Keep in mind that your fertility can be damaged by one cancer therapy session and, for women, some methods of fertility preservation are typically done during certain phases of the menstrual cycle.
How can women preserve fertility before cancer treatment?
Women who are about to undergo cancer treatment have various options when it comes to fertility preservation. For example:
- Embryo cryopreservation. In this procedure, eggs are harvested from your ovaries, fertilized through in vitro fertilization (IVF), frozen and stored. Typically, at the beginning of your menstrual cycle you'll begin daily injections of synthetic hormones to stimulate your ovaries to increase the likelihood that multiple eggs can be collected during a cycle. Mature eggs are removed, combined with sperm — provided by a partner or sperm donor — and frozen. This method has the highest chance of success for women. Timing ovarian stimulation can delay the start of cancer treatment by two to four weeks, but research suggests that random ovarian stimulation can be successful.
- Egg freezing (oocyte cryopreservation). Similar to embryo cryopreservation, you'll get injections of a medication to stimulate your ovaries and have your eggs harvested. Then your unfertilized eggs are frozen.This method requires the same amount of time as embryo cryopreservation.
- Gonadal shielding. If you're having radiation applied to an area far from your pelvis, carefully placed shields can reduce your reproductive organs' exposure to scatter radiation.
- Ovarian transposition (oophoropexy). During this procedure — recommended if you're having radiation applied to your pelvis and no chemotherapy — your ovaries are surgically repositioned just before radiation therapy so they're as far away as possible from the planned radiation field. However, due to scatter radiation, the procedure doesn't always protect the ovaries. After treatment, you might need to have your ovaries repositioned again or use IVF to conceive.
- Radical trachelectomy. If you have early-stage cervical cancer, this procedure — which involves the surgical removal of the cervix — can help preserve your fertility.
Other methods of fertility preservation for women still being researched include ovarian tissue cryopreservation — in which ovarian tissue is surgically removed, frozen and later reimplanted — and ovarian suppression before cancer therapy, in which hormonal therapies are used to suppress ovarian function and protect eggs during cancer treatment.
What can men do to preserve fertility before cancer treatment?
Men can also take steps to preserve their fertility before undergoing cancer treatment. For example:
- Sperm cryopreservation. Before you begin cancer treatment, you'll provide semen samples through masturbation or another method, such as testicular sperm extraction via a needle. Samples are frozen and can be stored for years. Depending on the amount of sperm available, samples might be used with intrauterine insemination, where the sperm is thawed and placed in a woman's uterus, or with in vitro fertilization.
- Gonadal shielding. Carefully placed shields can reduce your testicles' exposure to radiation.
Other methods of fertility preservation for men still being researched include testicular tissue cryopreservation — in which testicular tissue is surgically removed, frozen and later reimplanted.
Source: http://www.mayoclinic.org/healthy-living/getting-pregnant/in-depth/fertility-preservation/art-20047512


text:
Sometimes, the smallest kid in the huddle teaches the biggest lesson. Now, a kindergartner is receiving national and international recognition for his integrity.
No email address was supplied by
To complete your registration on this site, please supply an address.
Please confirm or modify the email address to which you will have subscription offers sent.
For a more personalized experience, please supply the following optional information.

subset: commoncrawl


text:
Welcome to the CRG Discussion Forum!Forum registration problems: Make sure you enter your email correctly and you check your spam box first. *Then* email KurtS2@gmail for help.
Takes an 18 mm prevailing torque nut. Uses no cotter pin. Was the last design idler arm. GM part number 14083585 Group 6.895 - Warren
Lloyd does the NOS idler arm have a 'C' or an 'O' stamped in between the 2 frame mounting holes?


text:
The ins and outs of Xela, GuatemalaAugust 8th, 2009 by David Garcia-Pedrosa '10
I know, I know… It's just that I've been busy getting back from Shanghai and then getting ready for Guatemala, I haven't really had time to update the blog.
I could write 100 more posts on China, but for everyone's sake, I won't do that, but please, if you have any questions about China whatsoever, or just want to talk about it, I am MORE than happy to talk/answer questions. Like I said before, there is still so much to say about China. You can email me at email@example.com or find me on campus in the fall!
Now, Guatemala… I arrived into the Guatemala City Airport and had a van waiting to take me 4 hours Northwest to Quetzaltenengo, Guatemala. If anyone is confused, the people call Quetzaltenengo Xela (sh-ela). I arrived on a Sunday, which is a rest day for the entire town of Xela, so I found my host family, moved in, and relaxed. Xela is an old town with short connected concrete buildings that can only be told apart by different color paint-jobs. Imagine walking around town as if you were walking past a rainbow, passing every color. Anyway, the clinic/school that I am volunteering is quite unorganized, and because of that, we only have a few projects to do, which means a lot of free time. We plant trees in the mountains on Tuesdays, and build stoves on Wednesdays and Thursdays. The other days are basically free, with the option to go to "La Guarderia" which houses children for after-school activities and provides a place to finish their homework. The way the person was describing it, it sounded as if the children needed all the help that they could get. However upon going there, it seems to be quite the opposite. La Guarderia attracts children who enjoy learning and do their homework without being told twice and with great success. I have gone back a few times to help out any way I can (including teaching a little bit of English).
The town of Xela is very tranquil, with a number of outdoor markets selling every type of meat/seafood/vegetables and a lot of hair gel. Xela also has many internet cafes, restaurants, churches, etc.. so its a challenge to find things to do everyday, but it is challenge that is being met and will continue to be met.
It's great to be in a country where I can speak/understand/read the language!
Hasta pronto


text:
There are two ways of spreading light – to be the candle or the mirror that reflects it. –Edith Wharton, Vesalius in Zante
My training, fundraising, and half-marathon have come to an end. I have learned so much from this experience and I can honestly tell you that every minute of my hard work was completely worth it. I am feeling quite lost right now that this is all over!
Things I have learned from this journey:
1. My body is capable of doing things I never thought possible.
2. Training for a big race makes all the difference. As opposed to not training, or training half-way.
3. Support comes in many forms… some people are there for you in every way, some come through in one way, and some people not at all.
4. People really do "shart" themselves during races. No, I did not. But I did witness a woman in white sweatpants who must have had this unfortunate experience.
5. Losing toenails is a badge of honor. Or that's what I tell myself.
6. Seeing a cancer survivor on mile 10 of the race can make me bawl, as well as put a new bounce in my steps that can carry me to the finish.
7. People you have never met in real life can become some of your best friends. When you do meet in real life, it will be like you have known each other forever.
8. Don't drink a full bottle of water right before the race start time.
9. Race porta-potties are NAAAAASTY!
10. Pre-race poops are a significant event and you must cheer for your teammates as they try to have theirs.
11. Puffy paint is not a good idea for race singlets.
12. Cambered freeways do not make a good running surface. Especially for miles and miles.
13. I am almost a real runner when I am going downhill.
14. Skull candy earbuds don't work in my ears. Or maybe I just don't get how they are supposed to work?
15. Music can make or break you.
16. Fish tacos are one of my favorite things EVER. So are blue-cheese nachos.
17. Hope that you get through training and race day with no injuries, but expect that you will get them.
18. I will get my heavy, gushy period right before race day.
19. The support of camaraderie of Team in Training is unlike anything else. Seriously.
20. Tattoos on the lower, inner ankle/foot hurt like fuck. Not joking. I thought Kirsten was just being a wuss. Then it was my turn.
21. Race medals are awesome and I totally think I could become addicted to getting them.
22. My thunder thighs will never be okay to run in shorts. CHUB.RUB.
23. Buy a giant bottle of ibuprofen before starting training for any long race.
24. People who run full marathons are INSANE! But I may try it out myself one day. I'm crazy like that.
25. Coach Joe and Julie rock.
26. My running has inspired my children to become more active and healthy.
27. I felt love from all over the world on race day. It made all the difference to be able to look at Twitter and see everyone rooting me on as I was climbing those hills! (thank you.)
28. Finishing is everything. How fast you finish is not.
Never doubt that a small, group of thoughtful, committed citizens can change the world. Indeed, it is the only thing that ever has. –Margaret Mead


text:
my account
log in
Enter your email address and password below to access the checkout, your order status, SELLER profile and wish list.
create a buyer's account
Register a few details with us here and you'll be able to:
- create a wishlist
- complete a purchase through our new, quick checkout
- receive exclusive news of products, special offers and competitions
log in with a social network account
If you don't have DTLL account yet, you will be asked to fill in our registration form. We will pre-fill details we get from social network for you. When you visit DTLL next time, you can log in using your social network account with just one click.


text:
- Description
- Reviews
Wonderful deep brown in the glass with almonds and hazelnuts in the nose. Cask ageing shows is colors here with deep flavors of mixed nuts and dark berries. Full mid-palate with great balance between sugar and grape. Serve at room temp with nuts and blue cheese crumbles.
375 ml. Bottle Size
ReviewsWrite a review
Dec 23, 2014 | By Dennis
This is a wonderful full tasting Port. I was disappointed when I received the small 300ml bottle It was represented as a full sized bottle and you had to search to find you are purchasing a sampler size.


text:
Cyril S. Hodgeman Jr.January 11,2013
Cyril S. Hodgeman Jr.Cyril S. Hodgeman Jr.
READING Cyril S. Hodgeman Jr., 88, a former longtime resident of Reading, and a resident of the Vermont Veterans Home in Bennington for the past five years, died Sunday, Jan. 6, 2013, at the Southwestern Vermont Medical Center in Bennington.
He was born April 7, 1924, in South Woodstock, the son of Cyril Sam and Hazel Belle (Clay) Hodgeman.
He received his schooling in Reading and Springfield, and graduated from Springfield High School in 1942. He later completed graduate courses in Springfield.
He was a veteran of the U.S. Navy, serving during World War II on the USS Vulcan while learning the trade of Pattern Maker. Following his honorable discharge, he returned to Vermont.
He married Bessie M. Gonyea in Brownsville on Nov. 20, 1947.
He apprenticed in the machine tool industry under the late Winston Churchill of Cornish at Fellows Gear Shaper in Springfield, and retired from Lucas Industries in Springfield in 1976.
He was a member of the Reading Volunteer Fire Department and the American Legion Post #25 in Windsor, the Disabled Veterans of America and the Blind Veterans of America.
He enjoyed woodworking, gardening, fishing, hunting and listening to music and audio books.
Survivors include a daughter, Cyrilla H. Prescott of Manchester, N.H.; a brother, Stanley H. Hodgeman of Springfield; and several nieces, nephews and cousins.
His wife of 62 years died on April 23, 2009. He was also predeceased by a son, Cedric Sheldon Hodgeman in 1951.
At his request,a graveside service with military honors will be held in the spring in the Brownsville Cemetery in West Windsor.
Memorial contributions may be made to American Legion Post #25, PO Box 540, Windsor, VT 05089.
The Knight Funeral Home in Windsor is in charge of arrangements.Condolences may be expressed in an online guestbook at www.knightfuneralhomes.com.MORE IN ObituariesCharles T. Baker
Charles T. Full StoryMarguerite Hoose
Marguerite Alice Peggy Hoose, 90, of Rutland, Vermont, died December ... Full StoryLouise S. Full Story
- Most Popular
- Most Emailed


text:
Learn how to earn money by creating iPhone and iPad apps all through out-sourcing! See how here.
Everyone's talking about Twitter. I have held off on writing anything about the microblogging site until this point because I haven't played with it too much.
Well now I've played with Twitter a little but and I have some thoughts about it. But these are for a later post. This post is about some simple Twitter tools, applications, and mashups you can use to make your experience with the platform more efficient, easier to manage, and more fun.
HashTags.org is an app that helps you keep track of what topics people are talking about on Twitter
The keyword here is "simple." These apps aren't confusing or intimidating–and most of them can be very useful or at least fun to take a look at. The list of 105 Twitter tools is at SingleFunction.
Update. Instead of writing a new post about Twitter apps, I figured I would include this new link in this post. This is a post called 15 Twitter Tools for People who Work Online. It's at freelance folder, a website dedicated to the freelance lifestyle. Now go waste more time. Just kidding–if you utilize these tools correctly, you can probably save time and be more efficient.


text:
As someone who did BLS with her kid, I did find that the little jars of babyfood were really good for one purpose: letting grandma get her kicks spoon-feeding the babe.
This was great entertainment all around. When DS was finished eating, he always took one more bite . . . which he then spewed EVERYWHERE while blowing a great big raspberry. Spoonfeeding grandmas sit *very close* to babe.
Anyhow, we only spoonfed purees at home when that's what our main meal was: curried squash soup, stew, mashed potatoes, etc. We let him have his own portion and a spoon (if he wanted it), but we usually got a few tastes into his mouth, too.


text:
A weekly series with Tape Op magazine founder and Jackpot! Recording Studio owner Larry Crane. Every Friday, get a new technique for tailoring effects, gaining sonic control, and opening new creative doors in your recordings.
All Courses
- Audio + Music (20)
- Audio Plug-Ins
- Music Production (15)
- Mixing (12)
- DAWs (9)
- Audio Effects (6)
- Virtual Instruments (6)
- Mastering (5)
- Music Composition (4)
- Audio for Video (3)
- Post Production (3)
- Synthesis (3)
- Video (3)
- Live Performance (2)
- Music Editing (2)
- Projects (2)
- Remixing (2)
- Audio Engineering (1)
- Audio Foundations (1)
- Film Scoring (1)
- Music Business (1)
- Recording Techniques (1)
- Avid (7)
- Pro Tools (7)
- Ableton (5)
- Ableton Live (5)
- Apple (5)
- Logic Pro (3)
- Waves (3)
- Celemony (2)
- iTunes (2)
- iZotope (2)
- Melodyne (2)
- Native Instruments (2)
- Adobe (1)
- Audition (1)
- Cycling74 (1)
- Max for Live (1)
- Propellerhead (1)
- Reason (1)
Skill level
- Beginner (4)
- Intermediate
- Advanced (4)
- Appropriate for all (992)
More options
Explore the noise reduction and audio restoration possibilities—for both music and post production—in iZotope RX 4 and RX 4 Advanced.
Expand Ableton Live's music-production and live-performance capabilities with the collection of instruments, effects, and tools in Max for Live.
Make electronic dance music that stands out from the rest, with these extreme sound-mangling techniques. Learn how to use vocoders, flangers, distortion, and more, to create a unique sound.
Get a first look at iZotope RX 4, the audio enhancement software for fast, flexible, and precise control over your audio tracks.
Learn how to create super-pro basslines for your electronic dance music (EDM) tracks.
Learn how to create super-pro drum sounds for electronic dance music (EDM) productions.
Learn how to mix a solid EDM track from raw material with Dave Darlington's Grammy-winning techniques.
Learn the mixing techniques Grammy-winning producer Dave Darlington uses to transform raw audio tracks into great jazz mixes.
Learn Dave Darlington's techniques for achieving his Grammy-winning sound with Waves plugins, including EQ, compression, reverb, delay and modulation, and mastering.
Explains one of the most essential ingredients in audio mixing, reverb—the time it takes for sound to bounce, echo, and decay during a live performance or recording.
Learn how to create a high-energy, engaging soundtrack for an Internet or TV commercial that underscores your client's brand and visual message.
Help your client achieve the music that matches the vision for their brand, by assessing their needs and turning them into a compelling musical score for their commercial.
Shows how to use Ableton Live on stage for performing original music with or without other musicians, recording live performances, and taking your DJ set to the next level.
Explore essential mastering concepts and techniques used by experienced audio engineers to create a cohesive album from a set of mixed tracks.
Arrange songs for radio play and club remixes using four different digital audio workstations: Pro Tools, Ableton Live, Logic, and Reason.
Author and recording engineer Bobby Owsinski demonstrates best practices for mastering music and audio destined for sale on Apple iTunes with their new Mastered for iTunes high-resolution audio program.
Reveals the advanced techniques that professional musicians and producers use to get the best-sounding results from Melodyne.
Shows how to improve music and audio productions using virtual instruments in Logic Pro.
Demonstrates constructing a remix using only a pre-existing vocal track as a starting point.
"Because of your lessons, I can go to "class" every night to learn the new programs that are needed for my work and my other projects." —Frances M.
more from our members »


text:
Watershed Health
View larger map
Map Exports
Clean and healthy streams provide us many services. By protecting our watersheds and preventing pollution, we secure our quality of life and reduce the costs of government cleanup programs. Also, keeping our water clean helps protect the water supply for people and animals that live downstream, allowing them to experience the same benefits. We can measure the health of our streams using the Stream Conditions Index.
The Stream Conditions Index measures the aquatic biological community and ranks the stream according to four categories (like a report card). Stream Conditions are determined by sampling of stream fish and bugs. Fish and bugs live in streams year round and are subject to any the changes in water quality or habitat that might occur. If conditions are poor, sensitive fish and bugs can't survive and won't be found in that stream the following year.
After sampling fish and bugs, the resulting data, including the number and types or organisms, are input into an Index of Biotic Integrity (IBI). IBIs are multi-metric (Utilizing several measurements) equations that rate a waterbody with a unitless score. These scores can then be used to determine if the stream is in Poor, Fair, Good, or Excellent condition.
Montgomery County searched for and recorded information from the healthiest streams or those "most recovered" from historic land disturbances remaining in the County to establish the stream conditions index. All County streams are measured against this 'yardstick' to better understand the overall health of the stream. County watersheds are sampled on a rotating schedule and are visited at least once every 5 years.
Our Healthiest Streams
All County streams are ranked as 'Excellent', 'Good', 'Fair', or 'Poor' through the Stream Conditions Index. Streams ranked in an 'Excellent' condition are the healthiest streams.
These healthiest streams are located in the far northern and western portions of the County, where some are protected through public ownership of large portions of their watersheds. You can visit many of these 'excellent' streams and learn for yourself what a healthy stream looks like and see and hear the many animals and plants that depend on clean and healthy streams.
Some portions of the healthiest streams rely on private landowner stewardship to keep them healthy. Portions of the Little Monocacy, Bennett Creek and Ten Mile Creek are in excellent condition and are privately owned. In addition, there are County-designated Special Protection Areas that contain high quality waters.
Patuxent River State Park
Located on the border of Montgomery and Howard Counties between Route 27 and Georgia Avenue, Patuxent River State Park represents one of the largest tracts of forest in Montgomery County. Comprised of over 5,000 acres with more than 1,500 acres in the Maryland Wildlands program this area is remote and lacks many developed trails. The Patuxent River and its tributaries are among some of the most recovered streams in Montgomery County.
Patuxent State Park is managed for passive recreation including hiking, hunting, fishing, birding, and horseback riding. The park features over 10 miles of catch and release trout stream (Patuxent River) and is a popular spring time fishery. In the fall, hunting is a popular activity with hunting seasons lasting from September through the end of January. The park also offers year round access for hikers and horseback riders with a few maintained trails. It is recommended users in the fall and winter months wear hunter orange and avoid using the trails at dusk and dawn when hunters are most active.
To visit Patuxent River State Park and one of Montgomery County's best streams, park where Hipsley Mill Road crosses the Patuxent River. From there, travel downstream along a fisherman and equestrian trail. Notice the massive Sycamores and maples looming over the water. These trees are important for providing fish habitat and preventing erosion. They also shade the stream keeping cool and healthy.
As you continue downstream, you'll notice how the stream transitions from deep pools that glide into shallow riffles that run back into deep pools. The riffles are crucial habitat for stream bugs, and are also help add oxygen back into the streams. The pools serve as important fish habitat, and help keep the stream cool.
Don't be alarmed by the trees that have fallen across the stream. This natural process provides important habitat for fish and bugs.
Keep a sharp eye out for Belted Kingfishers perched above the river looking for their next meal or majestic Wood Ducks relaxing on the cool waters.
After walking a little over a half a mile downstream from Hipsley Mill Road, you will come to the confluence of the Patuxent River and the Cabin Branch tributary. If you continue downstream, be careful, the trails are not maintained by park staff and can be hazardous. Before you visit the park we suggest you check out the Patuxent River State Park page on the Maryland Department of Natural Resources website for additional information. When you visit we suggest you wear a sturdy pair of boots that can get muddy and dirty and take water to drink. Keep in mind much of this area is a Maryland Wildland and can be remote. As always when you are enjoying our beautiful parks remember to Leave No Trace.
Little Bennett Creek
The publicly owned portions of the Little Bennett Creek watershed are within Little Bennett Regional Park. At a little over 3,700 acres, the interior of the park is reached by hiking over more than 20 miles of trails. This watershed area is recovering from many years of farming, logging and use of the streams for mill races and dams. Today, you will have to look very hard to see remnants of this older use of the land and waters. Much of the watershed is now forested, with clear headwater streams flowing into the Little Bennett Creek.
Little Bennett Regional Park is an easily accessible, family-friendly park with many trails. The Montgomery County Parks Department manages this resource. You can visit their website for information to plan your visit. Be sure and print out the park map before you go.
A great place to go for a first visit is the Kingsley Parking Area. From Clarksburg, go north on Clarksburg Road for several miles until you descend into the Little Bennett Creek stream valley. Once you cross over Little Bennett Creek, look for the parking lot ahead on your right. This is a popular destination so if it is full, continue on Clarksburg Road for about a mile until you see the Browning Run Parking Area on your right.
From the Kingsley Parking Area, you can walk upstream towards the one room Kingsley School house, about all that remains of the community of Kingsley. Little Bennett Creek will soon be next to the trail. Natural surface trails offer an opportunity to continue in a loop back to the parking lot or you can retrace your steps.
Ten Mile Creek
Ten Mile Creek is located in the Clarksburg area and flows into Little Seneca Lake, a reservoir, which flows into the Potomac River. Ten Mile Creek is considered a reference stream in Montgomery County, with its mainstem dominated by forested area with gently rolling hills. Its tributaries are generally spring fed by cool high quality groundwater and consist of many wetland areas.
The main public portion of Ten Mile Creek is owned by Montgomery County Parks Department and is connected to Black Hill Regional Park, where Ten Mile flows into Little Seneca Lake.
To access Ten Mile Creek, drive west on West Old Baltimore Road from the entrance of Black Hill Regional Park (on Lake Ridge Drive). Take your first left on to Ten Mile Creek Road after crossing Clarksburg Road and park in the pull off area. There are paved trails walking downstream towards Little Seneca Lake. If you want to explore the more natural scenery, there are dirt trails walking upstream until the land becomes privately owned (north of West Old Baltimore Road).
Tier II (High-quality) Watersheds
The State of Maryland established Tier II regulations to provide additional, mandatory protection for waters of better quality than the minimum federal and state water quality standards. These high-quality waters are known as "outstanding waters" and are so designated through biological monitoring and data assessment (such as the Maryland Biological Stream Survey). Anti-degradation provisions of the Clean Water Act require that any discharge permits, water/sewer plan amendments, development activities, and other activities in the watershed must not impact the existing level of water quality. If impacts are unavoidable, special exemptions must be established through legal process with the Maryland Department of the Environment.
View a map of Tier II watersheds in Montgomery County (PDF, 2.3MB)
Streams on the Way to Recovery
Streams and rivers that function well bring benefits to the local neighborhood and the entire County. Healthy streams have abundant aquatic life such as fish and stream insects, stable streambanks and very little erosion.
Healthy streams are the ones that show the least impact from more than 300 years of land use change as Montgomery County evolved, grew in population size and developed. In the more urban areas of the County, streams are victims of decades of increased development pressure and little or no stormwater control.
Changes in the County that Impacted the Health of Streams:
The Department of Environmental Protection is attempting to reverse these impacts by adding stormwater management and physically restoring the streams. With funds collected through the Water Quality Protection Charge and substantial State and Federal grants, DEP has been able to protect several miles of streams. The results are healthier streams with more fish and other aquatic life.
Years of careful planning, permitting, designing and public involvement go into every project. Project goals differ depending on the stream, and can include water quality improvement, streambank stability, habitat improvement or assistance in flood control.
Once construction is complete, DEP documents improvements from restoration projects through monitoring.
View photos of some of the County's best success stories:
How Does the County Help?
The natural environment is important to all of us and the County has many programs focused on protecting our natural resources, especially streams.
DEP is responsible for a number of key programs to assess and reduce pollution in streams, improve stream habitat and water quality, maintain our infrastructure, and engage residents in protecting local streams.
History of DEP's Stream Protection Programs
Montgomery County has long been a leader in natural resources protection. Beginning in the 1970's, the County was among the first in the nation to require stormwater management for new development.
Back then, regional concerns about water quality in the Potomac River and its tributaries led to the monitoring of water chemistry in County streams. Very few problems were found based on parameters such as pH, dissolved oxygen, and water temperature, although many streams showed signs of obvious physical damage and degradation.
In 1994, the County changed its monitoring focus to the organisms that live in the streams: fish and aquatic insects. The type of aquatic life in a stream directly reflects the extent of human impacts on stream. Degraded streams have lesser quality food and unstable habitat for aquatic wildlife. The County established its biological monitoring program with the goal to systematically evaluate the 1,500 miles of streams and use the data to set priorities for protection and restoration.
DEP Partner Agencies
Below are links to other partner agencies that help fight pollution in our streams and protect water quality. While these agencies all have programs needed to reduce impacts to our streams, ultimate success depends on our residents. Find out how you, your family and neighbors can help protect the streams in your community.


text:
Pregame tailgate spaces at AT&T Park.
Group tailgate spaces are located at the north end of the bus lot, across from pier 48, accessed via Terry Francois Blvd. and Mission Rock St. intersection. Ideal for a pre-game family BBQ or a company outing of several hundred guests and located conveniently near the bus parking area. Please contact your Account Manager if you are a returning Group Leader at 415.972.2299 or Giants Sales Executive at 415.972.2298 to make tailgate reservations.
Best Beverage Catering
Zachary Holt
Giants tailgate lots open 4 hours prior to game time for caterers and set-up. Tailgaters allowed access 3 hours prior to game time.
Each group tailgate space can accommodate up to 100 guests. After you have purchased your tailgate space(s) your Giants Sales Executive will issue you two parking passes that will allow two catering vehicles or two cars to park in each tailgate area. Additional parking passes may be purchased on the day of the game. Tailgaters are required to clean up and dispose of any refuse. Trash, coal and recycle bins provided in all lots.
Please note that buses are not permitted in Giants tailgate lots. Busses may drop off tailgaters in front of the tailgate lots and then proceed to the bus lot adjacent to Giants Lot A. Bus parking is $70 and may be paid at the entrance of the bus parking lot. You may also purchase bus parking passes from your Giants Sales Executive.
Please review the fire safety requirements for group tailgate spaces. Upon purchase of a tailgate space you will be asked to return a signed acknowledgement of these safety regulations. Fire and water extinguishers will be provided in all tailgate spaces
Download Safety One-Sheet


text:
The Drumhead (episode)
this wiki
Ad blocker interference detected!
Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers
Wikia is not accessible if you've made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.
(written from a Production point of view)
|"The Drumhead"
|TNG, Episode 4x21
Production number: 40274-195
First aired: 29 April 1991
|94th of 176 produced in TNG
|94th of 176 released in TNG
|201st of 728 released in all
| Written By
Jeri Taylor
Directed By
Jonathan Frakes
|44769.2 (2367)
An overzealous Starfleet admiral begins a witch-hunt aboard the Enterprise, determined to find a conspiracy, and eventually accusing Captain Picard of treason.
- "Captain's Log, Stardate 44769.2. For some weeks we have had a Klingon exobiologist on board as part of a scientific exchange program. Unfortunately, we suspect that he was involved in a security breach and in the possible sabotage of our warp drive."
On stardate 44769.2, a dilithium chamber hatch explodes aboard the USS Enterprise-D and sabotage is suspected. The explosion coincides with news that the Romulans have gained access to information about the Enterprise's chamber, indicating that there is a spy on board. A quick investigation turns up one suspect – a Klingon exchange officer named J'Dan, but he denies any involvement.
Act OneEdit
- "Captain's Log, Supplemental. Retired Admiral Norah Satie whose investigation exposed the alien conspiracy against Starfleet Command three years ago, is arriving to assist in our inquiry."
With little progress in the investigation, Starfleet Command sends retired Admiral Norah Satie and her assistants – one of whom is a Betazoid – to expedite the proceedings. A more thorough examination under Satie's direction reveals a hypospray in J'Dan's room modified to scan and resequence classified information into biological tags for transport on an injected body; J'Dan covers this by the fact that he has Ba'ltmasor Syndrome, which requires weekly injections and, thus, would easily hide the transfer of information. With this evidence against him, J'Dan admits to being a Romulan spy, but adamantly maintains his innocence in the explosion. However, Satie is still unsatisfied; she is convinced that J'Dan could not have been working alone.
Act TwoEdit
The admiral begins an inquiry into all personnel and passengers on the Enterprise with whom J'Dan has come into contact during his stay. When she questions young medical technician Simon Tarses, she apparently has her man; her Betazoid assistant, Sabin Genestra senses great fear and guilt from Tarses, as if some sort of lie is consuming him, about which he refuses to come clean.
Act ThreeEdit
Picard refuses to restrict Tarses's movements based on Betazoid intuition. Before a consensus can be reached he and Satie are called to engineering by Geordi La Forge and Data; the radiation levels preventing them from entering the chamber – caused by the explosion – have dropped low enough for them to enter safely, and their examination shows no foul play to have been involved. The explosion was caused by metal fatigue along an undetectable defect in a hatch cover installed during the ship's last refit at Earth Station McKinley, making it an accident that just happened to coincide with the theft of the chamber's plans rather than sabotage.
But this new development seems not to placate Satie or her assistants, who still believe Tarses was a co-conspirator with J'Dan. Another inquiry against Tarses is launched, this time open to the public, and he is barraged with numerous accusations to try and establish his guilt, including a lie that the explosion was caused by corrosive chemicals to which he had had access, and the exposure of the lie Tarses himself tried to kept hidden – that he put false information about his parentage in his admission form, stating that his grandfather was Vulcan when, in fact, he was Romulan. Overwhelmed, Tarses invokes the Seventh Guarantee of the Constitution of the United Federation of Planets to decline to answer further questions to avoid self-incrimination, on the counsel of Commander Riker.
Act FourEdit
The ruthlessness of the accusations convince Picard that Satie is engaging in a drumhead trial, going on a xenophobic witch-hunt for Romulans and other enemy conspirators. After talking with Tarses and establishing that his lying on his application was his only misdeed, Picard confronts Satie and demands that the hearings be put to rest, threatening to go over her head and complain to Starfleet Command if necessary, only to be rebuffed; Satie has been in full contact with Starfleet Command since the beginning, and they fully approve of her methods. In fact, the next interrogation will have Starfleet Security Admiral Thomas Henry as a witness. In other words, the interrogations can not and will not be stopped, and they will, in fact, expand. Unfortunately, because of his outspokenness against them, Picard is called to the stand the following day.
Act FiveEdit
- "Captain's Log, Supplemental. Admiral Thomas Henry, who has worked closely with Norah Satie in the past, has arrived to observe the hearings."
At his interrogation, Picard attempts to appeal to Satie's sense of reason and convince her to end the hearings, but he is met with a thorough nitpicking of his competency and loyalty to Starfleet and the Federation. Worf, who up until this point had sided with Satie in her actions, realizes where the hearing is going and attempts to defend his captain but is also rebuffed with accusations of his father's supposed betrayal to the Romulans. Finally, Picard responds to the accusations laid against him by quoting her famous father's words about the dangers of denying basic rights to one man in the name of protection.
Enraged, Satie interrupts him, accusing him of treason, conspiring with the Romulans, and violating the Prime Directive. She calls men like him a threat to the entire Federation whom it is her job to seek out and destroy, and warns him that she has "brought down bigger men than you--!" In the middle of her tirade, Admiral Henry gets up and wordlessly leaves the room, bringing an informal end to the interrogation. Embarrassed, Sabin declares a recess until the following day, and the room empties quickly, leaving Satie alone, shaken. By turning her father's words back on her, Picard has goaded her into revealing the depth of her fanaticism and paranoia in front of an audience, severely damaging her credibility, possibly permanently.
Later on, in the ship's conference lounge, Picard is informed by Worf that Admiral Henry has officially called off the hearings, and that Satie has departed the Enterprise. Though it is unlikely that she will ever be trusted with such authority again, Worf cannot help feeling guilty for having been deluded into aiding her cause without realizing what she was. Picard, however, sees it as a learning experience; such enemies who cloak their misdeeds with the pretense of serving a greater good are very seductive and very hard to spot, and continual vigilance against them is "the price that [they] must pay" to maintain their freedom.
Log EntriesEdit
Memorable quotes Edit
"The blood of all Klingons has become water! Ever since the Federation Alliance, we have turned into a nation of mewling babies! The Romulans are strong; they are worthy allies! They do not turn Klingons into weaklings like you!" (hints at Worf)
- - J'Dan, admitting his guilt of the information smuggling to the Romulans
"On the advice of my counsel, I refuse to answer that question in... in that the answer might serve to incriminate me."
- - Simon Tarses
"Sir, the Federation does have enemies! We must seek them out!"
"Oh, yes. That's how it starts. But the road from legitimate suspicion to rampant paranoia is very much shorter than we think. Something is wrong here, Mr. Worf; I don't like what we have become!"
- - Worf and Picard
"You know, there are some words I've known since I was a schoolboy: 'With the first link, the chain is forged. The first speech censured...the first thought forbidden...the first freedom denied--chains us all irrevocably.' Those words were uttered by Judge Aaron Satie, as wisdom...and warning. The first time any man's freedom is trodden on, we're all damaged. I fear that today--"
"How dare you! You who consort with Romulans, invoke my father's name to support your traitorous arguments? It is an offense to everything I hold dear! And to hear those words used to subvert the United Federation of Planets! My father was a great man! His name stands for integrity and principle! You DIRTY his name when you speak it! He loved the Federation! But you, Captain, corrupt it! You undermine our very way of life! I will expose you for what you are! I've brought down bigger men than you, Picard!!"
- - Picard, quoting Judge Aaron Satie, and Admiral Satie, angrily chastising him for it
"Am I bothering you, Captain?"
"No, please come in, Mr. Worf."
"It is over. Admiral Henry has called an end to any more hearings on this matter."
"That's good."
"Admiral Satie has left the Enterprise."
"We think we've come so far. Torture of heretics, burning of witches, it's all ancient history. And then, before you can blink an eye, suddenly it threatens to start all over again."
"I believed her. I-I HELPED her! I did not see what she was."
"Mr. Worf, villains who twirl their mustaches are easy to spot. Those who clothe themselves in good deeds are well camouflaged."
"I think, after yesterday, people will not be so ready to trust her."
"Maybe. But she or someone like her will always be with us, waiting for the right climate in which to flourish--spreading fear in the name of righteousness. Vigilance, Mr. Worf. That is the price we have to continually pay."
- - Worf and Picard, discussing both the investigations and the misguidedness of Admiral Satie
Background information Edit
Story and script Edit
- "The Drumhead" was conceived as a money-saving installment for the series. The studio suggested a clip show. Michael Piller and Rick Berman, however, despised the idea as they didn't want a repeat of "Shades of Gray". Piller commented, "We think they're insulting to the audience. They tune in and then you create this false jeopardy and then flashback as their memory goes back to the wonderful time they had before they got trapped in the elevator and all that bullshit." They persuaded the studio to avoid a clip show while still producing an episode that was under budget. (Captains' Logs: The Unauthorized Complete Trek Voyages)
- Jeri Taylor wrote the script based on a story idea Ronald D. Moore had proposed called "It Can't Happen Here". Taylor's aim was to show that witch-hunts along the lines of U.S. Senator Joseph McCarthy's Communist hearings and the Salem witch trials could happen even in the enlightened 24th Century if individual liberties and freedoms were breached, even if only slightly, in the name of preserving the Federation. (Captains' Logs: The Unauthorized Complete Trek Voyages)
Production Edit
- "The Drumhead" was filmed between Tuesday 19 February 1991 and Wednesday 27 February 1991 on Paramount Stage 8 and 9.
- This episode was a bottle show, coming $250,000 under budget. (Star Trek: The Next Generation Companion)
- According to director Jonathan Frakes, several shots from the episode were "stolen" from courtroom films including Judgment at Nuremberg, the 1961 Stanley Kramer film starring William Shatner, and The Caine Mutiny. (Departmental Briefing, Year Four: Production, TNG Season 4 DVD special features)
- This was the final episode to have music composed by Ron Jones. Jones was fired shortly afterward for repeatedly arguing with Rick Berman and Peter Lauritson over what type of music was thought to be appropriate for the series. Berman subsequently asked Dennis McCarthy if he would be willing to act as the sole music composer for the series, but McCarthy turned the offer down, citing that the resulting workload (including his non-Trek projects) would be too much for him, and so Berman brought Jay Chattaway on-board as Jones' replacement. (Cinefantastique October 1993)
- A scene which was filmed on Friday 22 February 1991 was deleted from the final episode. According to the call sheet, the scene would be 12-14 in sickbay and feature Gates McFadden, Michael Dorn, Spencer Garrett and regular background performers Michael Braveheart and Bowman.
- First UK airdate: 9 November 1994.
- The events of "Conspiracy", "Sins of the Father", "The Best of Both Worlds", "The Best of Both Worlds, Part II", "Family", and "Data's Day" are referenced in this episode. It reveals that 39 Federation starships were annihilated and 11,000 personnel were lost at the Battle of Wolf 359.
- Both the unnamed Excelsior-class starship and Oberth-class starships seen in this episode are not named in the episode or the script. The identification of the Oberth-class as the USS Cochrane is derived from the Star Trek: The Next Generation Companion.
- This episode shares a common theme, the danger of sacrificing freedom for security, with the DS9 two-parter "Homefront" / "Paradise Lost".
- This is the second appearance of the interrogation room set after "The Defector". It is a modification of the bridge of the original USS Enterprise as seen in the first three movies.
- A long time extra, Ensign Kellogg, played by Cameron is finally named in this episode during Worf's briefing with his security officers.
- This is the only time in the run of the series that the inner isolation door in main engineering is seen; normally the outer door is seen after a warp core breach.
- This episode establishes the technology of genetically encoding secret information in order to be carried discreetly inside a carrier's body. A similar technology is seen to be used by the Suliban Cabal to Klaang in ENT: "Broken Bow".
Reception Edit
- In the Star Trek: The Next Generation Companion, Jeri Taylor names this episode's script as the one she was most proud of.
- This is one of Michael Dorn's two favorite TNG episodes, the other being "The Offspring". [1]
- Jonathan Frakes has also named this episode as one of his favorites, in part for the chance to work with Jean Simmons. (Departmental Briefing, Year Four: Production, TNG Season 4 DVD special features)
- A mission report for this episode by John Sayers was published in The Official Star Trek: The Next Generation Magazine Vol. 17, pp. 17-20.
Video and DVD releasesEdit
- Original UK VHS release (two-episode tapes, CIC Video): Volume 48, June 1992
- UK re-release (three-episode tapes, Paramount Home Entertainment): Volume 4.7, 3 September 2001
- As part of the TNG Season 4 DVD collection
- As part of the Region 1 edition of the Star Trek: The Next Generation - Jean-Luc Picard Collection
Links and references Edit
Starring Edit
Also starring Edit
- LeVar Burton as Lt. Cmdr. Geordi La Forge
- Michael Dorn as Lieutenant Worf
- Gates McFadden as Dr. Beverly Crusher
- Marina Sirtis as Counselor Deanna Troi
- Brent Spiner as Lt. Commander Data
Guest stars Edit
- Bruce French as Sabin Genestra
- Spencer Garrett as Simon Tarses
- Henry Woronicz as J'Dan
- Earl Billings as Thomas Henry
- And
Co-star Edit
Uncredited co-stars Edit
- Rachen Assapiomonwait as Nelson
- Joe Bauman as Garvey
- Karen Baxter as operations division ensign
- Michael Braveheart as Martinez
- Carl David Burks as Russell
- Cameron as Kellogg
- Cooper as Reel
- Denise Deuschle as science division officer
- Elliot Durant III as operations division ensign
- Mark Lentry as civilian
- Tim McCormack as Bennett
- Michael Moorehead as science division ensign
- Randy Pflug as Jones
- Keith Rayve as command division ensign
- Richard Sarstedt as command division ensign
- Noriko Suzuki as operations division ensign
- Guy Vardaman as Darien Wallace
- Natalie Wood as Bailey
- Unknown performers as
Stand-ins Edit
- Brett - stand-in for LeVar Burton
- Nora Leonhardt - stand-in for Marina Sirtis
- Tim McCormack - stand-in for Brent Spiner & Bruce French
- Lorine Mendell - stand-in for Gates McFadden & Ann Shea
- Josephine Parra - stand-in for Jean Simmons
- Richard Sarstedt - stand-in for Jonathan Frakes & Earl Billings
- Dennis Tracy - stand-in for Patrick Stewart
- Guy Vardaman - stand-in for Henry Woronicz & Spencer Garrett
- James Washington - stand-in for Michael Dorn
References Edit
amino acid; Ba'ltmasor Syndrome; Battle of Wolf 359; beard; Betazed; Betazoid; blood; Borg; Cochrane, USS; communicator; Constitution of the United Federation of Planets; crewman; Cruces system; Delb II; Delb II native; deoxyribose suspension; dilithium articulation frame; dilithium chamber; dilithium chamber hatch; drum; drumhead trial; Earth Station McKinley; elm; emergency confinement field; encephalographic polygraph scan; Excelsior-class; exobiologist; Federation; Federation Uniform Code of Justice; hyposyringe; interrogation room; isolation door; isolinear optical chip; judge; Klingon; Klingon-Federation Alliance; Klingon High Council; lemon; Marcus; Mars Colony; mass spectrometer; matter-antimatter reaction assembly; medical technician; microtomographic analysis; Mogh; neural parasite (24th century); neutron fatigue; Oberth-class; Officer Exchange Program; optical chip reader; outpost; petaQ; Prime Directive; protein; Qo'noS; radiation; roach; Romulan; Romulan Neutral Zone; Satie, Aaron; sabotage; security clearance; Seventh Guarantee; shuttlecraft; spectrometer; spy; starbase; Starfleet; Starfleet Academy; Starfleet Command; Starfleet Security; sub-micron fracture; Tarkanian; tea; T'Pel; tricorder; turbolift; United Federation of Planets; Vulcan; witch
External links Edit
- The Drumhead at Memory Beta, the wiki for licensed Star Trek works
|This page uses Creative Commons Licensed content from Wikipedia (view authors).
| Previous episode:
| Star Trek: The Next Generation
Season 4
| Next episode:
"Half a Life"
de:Das Standgericht es:The Drumhead fr:The Drumhead ja:TNG:疑惑 nl:The Drumhead pl:The Drumhead


text:
TV Dinner: Chicken Enchiladas
Chef Chris Manning wows us this week with chicken enchiladas.
It's a good dish to prepare ahead of time, then pop it in the oven about a half hour before you need it.
They're great for the big game or a comfort-food meal.
Click on the picture to see how it goes together. Pay close attention at the end for the chef's tips on variations, even for breakfast.
Chicken Enchiladas
1 pound cooked, diced chicken breast
Mix together the chicken, cheese and half the green chiles. Spoon the chicken mixture onto the tortillas, dividing the mixture evenly.
Roll tortillas and place seam side down on a 9- x 13-inch baking dish.
Mix together the gravy, sour cream and remaining diced chiles.
Spoon sauce over rolled tortillas and bake at 350 degrees for 40 to 50 minutes.
Most Popular
Saturday, December 10, 2016, Watertown, NY


text:
March 16, 2000
(217) 782-4648 or (312) 814-3490
Springfield – The Illinois State Board of Education will lead a national project to create and pilot an educational framework for careers in the transportation, distribution and logistics field.
Illinois is working with a 40-state consortium to build and implement a "career cluster framework" to help students better develop and realize career goals.
U.S. Secretary of Education Richard Riley today announced the "Building Linkages" program. This initiative will be a new approach to what has traditionally been known as vocational education. Illinois, in partnership with the U.S. Department of Transportation, will lead the Building Linkages Project for Transportation, Distribution, and Logistics.
"We are very excited about having the opportunity to provide leadership for this project," said State Superintendent of Education Glenn W. McGee.
"There is a great need for new people to enter this exciting career field. Through the work of the pilot sites, Illinois and the other partner states will be able to enhance math and science instruction and career and technical education," McGee said.
Building Linkages relies on "career clusters" to provide a structure to help schools organize students according to their career goals and interests. There are 16 such "clusters" which broadly categorize careers from entry-level to professional/technical management. School counselors, students and parents then can use the clusters to guide students toward college, employment or both.
Transportation, distribution and logistics, for example is a large and growing sector of the economy.
Nationwide, more than 10 million people work in the field which encompasses jobs in transportation infrastructure planning; development and management; customer sales and service; transportation/mobile equipment design, development and operation; and material moving and handling among numerous other related careers.
"Illinois has led in the development of occupational skill standards," said Jim Schultz, chair of the Illinois Occupational Skill Standards and Credentialing Council.
"We are very excited to once again provide leadership in the use of skill standards and related math and science learning standards in the transportation, distribution and logistics industry," Schultz said.
Various local, state and national public-private partnerships will conduct the project. The national Advisory Consortium has leading federal and state agencies, industry and professional organizations and labor unions, national educational organizations representing secondary and postsecondary education.
The project will have two phases. First, participants will organize major project partners, develop the career cluster framework, identify and develop curriculum assessment and technical assistance materials for schools and select school sites to pilot test the framework.
Next, the framework will be piloted in sites in at least nine states. Information and resources will be disseminated to promote the framework's use nationwide.


text:
The National Weather Service issued a flash flood watch Monday morning for Oahu and Kauai through 6 p.m. Tuesday.
Forecasters say an upper level low north of the islands will bring unsettled weather. Locally heavy rainfall is possible and the unstable atmosphere could also produce thunderstorms over the watch area.
Rainfall in excess of 3-inches-per-hour could also produce thunderstorms over the watch area and could lead to flash flooding.
A flash flood watch means that conditions may develop that lead to flash flooding.
Get breaking weather alerts through email or through our KITV iPhone, Android and iPad apps.
You can also upload your weather photos or videos using our KITV iPhone or Android app.


text:
Contact Audrey's: (310) 440-4505
Purim is the popular Jewish occasion for costumes, carnivals, and comedy. According to the book of Esther, there once was a scheming villain named Haman who plotted to destroy the Jews of Persia, casting lots (purim) to determine the date. But the Jews were saved by the resourceful Jewish queen and her uncle Mordechai. To commemorate the holiday, the Purim story is chanted aloud in the synagogue from a Hebrew scroll (megillah), accompanied by noisemakers (groggers), songs, and high spirits.
Passover (Pesah or Pesach), a week-long festival celebrating the deliverance of the ancient Israelites from slavery in Egypt, is perhaps the most popular of all Jewish holidays. The name is taken from the biblical book of Exodus: God "passed over" (pasah) the Israelites, sparing them from plague. Passover also marks the beginning of springtime.
Site Powered by UniteU Ecommerce


text:
3-Compartment Commercial Chrome Laundry Sorter
Item #: 570756 | Model #: SRT-01235 |
Top Rated
- $ 57 76 57.76
Non-members pay 10% surchargeJoin now!
- Shipping
- Enter ZIP Code for shipping options
- Estimated arrival
Delivery estimates, taxes, and fees are based on ZIP Code. Club Pickup orders are based on your club's current price and item availability on the day of payment.
About this itemThis unit promises big help with your laundry and will certainly deliver.
Built from a heavy-duty premium steel alloy and chrome plated to a bright shine, this unit promises big help with your laundry and will certainly deliver. Extreme wheels will provide you with traction and a smooth ride over the roughest linoleum, carpet, hardwood, marble or tile floors. Each poly-cotton bin can be independently removed to empty its contents into the washing machine or an individual room for folding. You can sort your clothes in a number of ways depending on the needs of your family and your personal laundry style.
Assembled Country
Component Country


text: Heritage There are few names within the elite of Swiss "Haute Horlogerie" as rich in history and evocative as Girard-Perregaux. The activities of our Firm go as far back as 1791, giving us more than two centuries of heritage that forms the foundation of what we are today. Through time Families François Perregaux: pioneer of Swiss watchmaking in Japan


text:
Palisades > Split Mountain > Climber's Log
Split Mountain Climber's Log
[ Sign the Climber's Log ]
|long haul
Date Climbed: Jul 20, 1996
|Fun climb. Lots of vertical, especially without 4WD to get to the trailhead. Trail to Red Lake is hot, dry and dusty. Red Lake to the summit is fun.
|Posted Sep 11, 2006 5:49 am
|Standard Route - Nice
Date Climbed: Jul 18, 2006
|The route was better than I thought. Split is a good looking peak. Next time I'll traverse over to the south summit... looks interesting.
|Posted Sep 7, 2006 3:45 am
|St. Jean Couloir
|Snow conditions were excellent. Hike in and out were quite forgettable.....
|Posted Sep 5, 2006 7:58 pm
|Bob Burd
|North Slope
Date Climbed: Aug 9, 2006
|Day 6 of the 2006 Challenge. This was a very enjoyable day tagging Split/Prater/Bolton Brown/Thumb in a long day. Trip Report
|Posted Sep 3, 2006 10:17 pm
|North West Face/ Slope
Date Climbed: Aug 8, 2006
|This was a side trip on my larger JMT backpack from South Lake to Onion Valley. The day was beautiful with no clouds anywhere in the sky. The hike took about 7 hours from our camp site below Mather Pass to the top and back. It was slow going with talus slopes beginning just beyond Lake 11598 and the talus continued all the way to the top. This was my third California Fourteener and the best weather on a High Sierra peak yet. A tough climb but if you're in the area I would definitely recommend it.
|Posted Aug 21, 2006 4:04 am
|Red Lake N slope
Date Climbed: Aug 9, 2006
|6th day of the Sierra Challenge. Decided to climb a previous years challenge peak instead of Prater since it's also a 14er. Climbed with Mike and Ryan, met Scott, Cliff and Cory on their way down.
|Posted Aug 17, 2006 6:46 pm
|Scott M.
|Red Lake North slope
Date Climbed: Aug 9, 2006
|A deviation from the planned Sierra Challenge peak of Mt. Prater. Made it up in 5:10 and met among others Dick and Jill from China Lake. Started with Bob Burd who was up in 4:05 which smoked everyone and I enjoyed the top with Cliff and Cory, too.
|Posted Aug 16, 2006 2:49 am
|red lake to north slope
Date Climbed: Jul 15, 2006
|Camped at red lake on first night. Ascended via snow-covered saddle to north ridge. Considered descent down saddle too dangerous, so climbed down rocks to the right of the saddle. On our way down we saw someone perform a just-in-time self-arrest sliding down the saddle (was sliding in self-arrest position for a good 200-300 ft). Hiked back to trailhead under moonlight...and got lost in the jungle. Had to bushwhack through jungle at night, but eventually found trail again. Beautiful mountain. Fun trip.
|Posted Aug 15, 2006 7:22 am
|North Slope
Date Climbed: Aug 6, 2006
|3 years of taunting by my nemesis, the 2nd time on trail after a humiliating defeat in 2003. This day I emerged victorious, but some may say ... at what cost. Aug 7 was my birthday, and suffice it to say that I celebrated my hour of birth (4am local time) huddled shivering in an emergency bivy cave somewhere north of 13000' on a "way too dangerous" wall I'd accidentally downclimbed onto in the dark before giving up for the previous night... well, at least it was a birthday like none other! After that, spent the remainder of the day hiking out, got lost in the upper jungle (on the previous trip, I'd gotten lost in the lower jungle, so I count that as complete now), and then after making it to my car in daylight, proceeded to get lost trying to drive out, and taking over 4 hours to finally get back to civilization. Um, old age, anyone??
|Posted Aug 10, 2006 5:36 am
|Route: Red Lake/North Slope
Date Climbed: Aug 6, 2006
|Did this as an overnighter and glad I did. Red Lake trail is as advertised and very unendearing. Boulder gully to second saddle above Red Lake snow filled so scooted up the rocks to the right of it.
|Posted Aug 9, 2006 12:28 am
|regular route
Date Climbed: Jun 26, 2005
|easy 14er. The drive to the trailhead is the hardest part.
|Posted Jun 21, 2006 10:57 pm
|North Slope
Date Climbed: Sep 6, 2004
|This hike was when I became a believer in hiking light. Beautiful alpine glow, but I could have skipped the talus. Cheers.
|Posted Jun 20, 2006 4:06 am
|Slowest Summit via North Slope from the East
Date Climbed: Jun 11, 2006
|Drove to within 4.5 miles of the Red Lake trail head (in a 2001 Honda Accord sedan via the 'official' route from Big Pine through McMurray Meadows), biked half the remaining, then mostly pushed the bikes for the other half (biking in sand is terrible). Hiked almost to Red Lake, camping for the night.
At 6am we started out late for the summit. I think it was 3 miles and we made it in snails-pace 8.5 hours, which put us there at a very late 2:30pm, my first 14-er (and my first time above 11,502'). Snow was a very packed and mostly still frozen. Glorious views, very little wind. A bit warm.
Descended slowly at 3:15pm. Snow was now a little wet but stable. We did not see or hear any rock falls nor avalanches.
After repacking our bags at camp, we hiked out the rest of the way in the dark (with headlamps and a GPS track to reference). We made it back to my car by 1am, substantially later than planned, very tired and fairly dehydrated.
I found the road easily navigable, even in the dark. I didn't think the trail was very hard to follow out in the dark, but I did have to check the GPS a few times. I wish I had read these Climber Logs before I went or I would have taken a notebook for the register--it is indeed full. Someone had signed the back of a printout of the route description from Summit Post...but I forgot the name.
|Posted Jun 13, 2006 1:07 am
|East couloir attempt
Date Climbed: Jun 4, 2006
|Partner had been up the East Couloir in June four years ago and found ice, so I figured "why not" and decided to go check it out.
Started from camp at Red Lake at 3:30am, soft snow conditions persisted up the glacier - probably never got below 40F at the lake (whose surface ice was melting). Got to schrund around 5:30-6ish - some ice there. We simul'd up to chimney on 45-50 degree soft snow. To climber's right of chimney was a gushing waterfall. Some ice in bottom of chimney, but with big gap and lots of snow; didn't look climbable. Partner led up half of rock route in crampons to climber's left of chimney, then retreated. He reported seeing an ice axe embedded in the couloir above that point.
We downclimbed from there to just above schrund, then crossed to climber's right onto a rock buttress which was slung with a faded rap anchor. Rapping on one of our 60m doubles got us down to the glacier.
Lots of rockfall as the day warmed - saw / heard several in St. Jean's area. Will consider returning in the fall. Trail up to Red Lake is heinous !!
|Posted Jun 5, 2006 9:14 am
|St. Jean Couloir
Date Climbed: May 29, 2006
|A spicy gully climb with the very hard snow we encountered; it demanded full concentration while cramponing up. It had been unseasonably cold the past three days. I climbed the St. Jean couloir with Brad and Mark. We started up at 4:23am from our camp at Red Lake and summited by 9:50am. BTW, the register is full. Whoever goes next please bring a notepad for the summit register. I screwed up on the descent and went down to the lowest saddle by Prater. Had to climb back up 500 feet to find the correct Red Lake pass (elev ~ 12,950') descent. Reached camp at 12:50pm. Took just 2 hours to hike out back to the Red Lake trailhead (6,568'). We had excellent weather both days.
|Posted May 31, 2006 1:14 am
|Route Climbed: East (Central) Couloir Date Climbed: November 13, 2005
|Great climb and great company! Climbed with Pavel (kovarpa) and Doug (dug). The weather was awesome. Couloir was filled with pretty deep snow, but at least we experienced no rockfall.
|Posted Nov 17, 2005 1:46 am
|kevin trieu
|Route Climbed: North Slope from the East Date Climbed: November 6, 2005
|Good clear sky with strong wind. Crappy drive to the trailhead. Do not drive in or out in the dark. It'll not be fun. Same applies to the trail. Hard to follow in the dark.
|Posted Nov 7, 2005 2:11 pm
|Route Climbed: Western Date Climbed: August 13th
|We left a Russian Shopka (a fur hat) up there somewhere on the mountain. If you find it, post, for a laugh. You can keep it. Good weather- the damn trail is difficult to follow- esp. at night with no flashlight.
A pseudo-summit on the way too.
Kai Kaapro
Aaron Lieberman
|Posted Oct 31, 2005 5:54 pm
|Route Climbed: North Slope from the East Date Climbed: 23 Oct 05
|Incredible weather-- warm and clear on top. Views were stunning. Some snow on the North Slope but no equipment needed for the ascent. Fun finding the right road out in the dark -- Tinemaha road definitely the way to go.
|Posted Oct 25, 2005 8:33 am
|Route Climbed: St Jeans's Couloir
|easy gully climb with soft snow
|Posted Oct 17, 2005 4:34 pm


text:
Better, Faster, Lighter Programming in .NET and Javaby Justin Gehtland, coauthor of Better, Faster, Lighter Java
In our new book, Better, Faster, Lighter Java, Bruce Tate and I lay out five basic principles for combating the "bloat" that has built up over time in modern Java programming. That bloat comes in the form of specifications (the J2EE spec, specifically EJBs), implementations (heavyweight containers), and standards (XML, web services). We chose to focus on Java in the book because Java is at a real crossroads right now: with the impending release of the J2EE 3.0 specification, juxtaposed with an explosion of lighter-weight open source frameworks such as Spring, Hibernate, Pico, Kodo, and so forth, the Java world is ripe for an in-depth look at the costs and benefits of the various approaches.
This doesn't mean that our principles aren't equally applicable to .NET. Even though .NET programmers aren't used to thinking in terms of heavy and light containers, enterprise development in .NET is ripe with assumptions about how things are done, and they almost always involve one of two services: COM+ (for EnterpriseServices) and IIS (for web deployment). These two services are, in truth, nothing more than containers provided by Windows. Developing applications that live in these environments is a complex task that grows more complex by the day, and isn't likely to become any less complex with the advent of Longhorn (with its Indigo messaging stack and integrated services for SOA).
In this article, I'll lay out the five principles from our book, and examine how they apply to programmers working on that other major managed platform, .NET. We'll see a lot of the same problems, but not always the same solutions.
The primary thrust of this principle is that complexity leads to disaster. Your application should be built around simple constructs and understandable layers, which combine to perform complex tasks. The code itself, however, should avoid complexity at every stage. This is much easier to say than to do, though, since many programmers are afraid of missing important pieces, or of oversimplifying.
You don't need to be afraid of doing something too simply if you embrace change in your application. The ability to fearlessly embrace change is based on good testing practices. If your code has thorough, automated, repeatable tests, then making changes to the code loses much of its anxiety. As changes are introduced, the tests will tell you whether or not you are breaking something important. Automated testing gives you a safety net, allowing you to examine simple solutions first, and to change them over time without fear.
That safety net is provided through a combination of tools, namely:
I do a lot of speaking and teaching in front of .NET developers. I am constantly amazed at the response I get when I mention NUnit. It is invariably something like: "I've heard of that. How do you use it?" For whatever reason, unit testing has not penetrated the .NET development mindset. For my money, NUnit is the best thing to happen to Microsoft developers since Intellisense.
To create unit tests, you have to make a reference to the
NUnit.framework assembly.
Then, create classes that will hold your tests. Tests are nothing more than specially
decorated methods on test classes that contain one or more assertions. For example,
imagine you have a class that validates certain kinds of inputs into your system. Such a
class might look something like this:
public class Validator
public bool validateCustomerId(string custId)
// ... validate customer idea, return
// ... true or false
public bool validateSSN(string SSN)
// ... validate Social Security Number
// ... return true or false
You will want to know that you have programmed these methods correctly. To test your success, create tests that demonstrate both the ability to recognize valid inputs, and to reject invalid ones. Here is an NUnit test class that accomplishes the goal:
public class TestValidator
Validator validator;
private const string GOOD_CUST_ID = "123-456-12345";
private const string BAD_CUST_ID = "xxx-xxx-xxxxx";
private const string GOOD_SSN = "111-11-1111";
private const string BAD_SSN = "11-111-1111";
// could define as many good and bad consts as needed
public void setUp()
validator = new Validator();
public void testValidCustomerId()
public void testValidSSN()
To run this test, you would point the NUnit test runner of your choice (the graphical WinForms version or the console version) at the compiled assembly where your tests are stored, and run the suite. NUnit will tell you whenever one of your assertions fails or an exception bubbles out. In the graphical viewer, you get a nice red bar to tell you that things aren't well, and a green bar for the "all's clear." If you use NUnit long enough, you develop a Pavlovian response to green and red; red makes your heart pound, green makes you feel all warm and fuzzy.
Related Reading
Better, Faster, Lighter Java
Creating good unit tests makes you write simple classes that perform their functions with a minimum of fuss. Unit tests act as the first clients for your code, and you quickly get the hang of writing just enough code to make your tests work. Most people who write unit tests often enough end up going all the way and writing their unit tests first; this technique is called Test Driven Development. It can be a tremendously powerful tool for simplicity, since it forces you to think through the public interfaces of your classes before you write them, giving you greater insight into how they will be used, and letting you cut out needless complexity before you even get started.
Once you have unit tests in place, you will want tools that make sure they get run a lot.
On your development machine, that tool is usually NAnt
(an open source, XML-based build management solution), though
make works just as well if
you are comfortable with its syntax and you like writing shell scripts instead of XML. NAnt
allows you to automate the entire build/test/deploy cycle for your local code efforts.
On top of NAnt and NUnit, other tools worth examining are CruiseControl.NET and/or Draco.NET. These automated integration tools live on a central testing box and monitor your source code repository. As individual developers check in code (which has unit test code accompanying it), the service will check out the latest version of the code, build it, and run the unit tests. This will overcome the "but it works on my machine" problem, as developers will receive near-instantaneous feedback about whether their commits "broke the build." Often, code will pass its unit tests in isolation, but when combined with the rest of the application, will suffer mysterious failures. These automated integration services can demonstrate these errors almost immediately, and the shorter the feedback loop between committing bad code and finding out you did so, the more likely it will be that you can fix it with a minimum of effort.
Between these three tools, you can begin to code using the simplest architectures and abstractions possible, with the confidence that you can refactor to solve the problems that present themselves. That's the key to all good development; only solve the problems you actually have, and leave the needless complexity on the cutting room floor.
This second principle is all about understanding the problem you are trying to solve. Whether we talk about the business problem that a given application is meant to address, or the technical problem that a given method, class, or package is addressing, the key to doing it right is to clearly identify the actual problem.
The larger problem is not unique to any development platform. Customers come to you asking for software that solves their problems. More often than not, they have spent a lot of time carefully thinking through the requirements for the software. Unfortunately, far too often, those requirements include a lot of assumptions about what they need. The first job of any good development team is to wade through those assumptions and find out what is driving the customer to your door. Simplify the requirements down to the set of statements that clearly defines the real problem, and you can code with the assurance that you are tackling the right issues.
The smaller problem is one of architecture and design. Much of the code that exists today is entirely un-maintainable, and one of the major reasons for that is over-coupling. We write classes that do a million things, we ship assemblies with a hundred classes in them, we write methods with a thousand lines of code. It is almost impossible, given code written this way, to find the exact place where changes need to be introduced or where bugs are manifesting. Instead of dumping all of that functionality into a single location, it makes much more sense to have a clearly defined separation of concerns, but creating simple classes packaged into targeted layers.
One common example of too much coupling is classic ASP. The problem was that an ASP file contained both layout (static HTML) and logic (script). The business code was sprinkled throughout the page. Making simple changes to the presentation structure or business logic meant editing this mish-mash of code, and hoping that you didn't unintentionally affect the other side of the equation.
Luckily for ASP.NET developers, we were given a very clean way to separate those two concerns using code-behind. With code-behind, we can still create HTML template (.aspx) files, but instead of mixing the code into the file itself, we can have the .aspx page inherit from a class, which is written entirely in the .NET language of your choice. Changes to the presentation layer happen in the .aspx file, and changes to the logic happen in the base class. This is a very good example of our principle in action; write code that solves a single problem. The .aspx pages solve the needs of the UI, and the code-behind files solve the needs of populating those pages with data.
For example, you may continue to write your ASP.NET pages like you have always written ASP pages:
<%@page language="C#"%>
<script runat="server">
public string getUserName()
// fetch user's full name and return it
Welcome, <% = getUserName() %>.
To simplify and decouple this page, we'll create a code-behind file. The code-behind file
contains a class that inherits
public class WelcomePage : Page
public string getUserName()
// fetch user's full name and return it
The .aspx file then looks like this:
<%@page language="C#" inherits="WelcomePage"%>
Welcome, <% = getUserName() %>.
To complete the transformation, we can use a WebForm control in the .aspx page to display the value, and populate it in the code-behind file at page load, thus eliminating all code from the presentation file.
public class WelcomePage : Page
protected Label lblUserName;
public string getUserName()
// fetch user's full name and return it
protected override void OnLoad(object src, EventArgs e)
lblUserName.Text = getUserName();
and the .aspx file:
<%@page language="C#" inherits="WelcomePage"%>
Welcome, <asp:label id="lblUserName" runat="server"/>.
You should repeat this same process whenever you are writing methods and classes or assembling packages. Separate out orthogonal concerns into their own private spaces. This makes it much easier to find the code you are looking for, whether that be to change or add to it, or to track down a bug. In the example above, if there is something wrong with how the page is displayed to the user, I know to go to the .aspx file, and it is easy to see the intent of the page. Likewise, if the data is coming out garbled, I look at WelcomePage.cs, which is uncluttered by presentation and layout.
The heart of any enterprise application is a domain model that represents the actual business problem that your customers face. It is this domain model that provides the actual value to your customers; it is what is unique about their business and your software. Everything else is just a tool in service to the business model. Things like transactional support, persistence, messaging, security -- all of those things are generic services that exist in many applications.
In order to keep the business model light, simple, and easy to maintain, you want to keep it as uncluttered with ancillary code as possible. The services provided to the domain model should be transparent, meaning that you shouldn't have to add anything to your domain objects to get the benefit of those services. At the very least, you shouldn't have to add anything to them that you can't safely ignore when you need to, such as at unit-test time.
Take, for example, an invoice processing system. When a user wants to edit an existing invoice, they will generally choose that invoice, modify some fields on a form (Web- or Win-) and submit the changes. A very non-transparent web application might look like this (showing only the code-behind, not the .aspx file):
public class EditInvoice : Page
// series of fields with invoice data
protected TextBox invoiceNumber;
protected TextBox invoiceAmount;
protected DropDown invoiceCurrency;
// etc.
public btnSubmit_OnClick(object sender, EventArgs e)
// fetch invoice data from database
SqlConnection conn = new SqlConnection(CONNSTRING);
SqlCommand comm = new SqlCommand("select * from
invoice where invoiceNumber = " + invoiceNumber.Text, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
} catch (Exception ex) {
// log the exception
} finally {
// perform business logic
Double amount = Convert.ToDouble(invoiceAmount.Text);
if(amount > 10000) throw new InvoiceAmountTooHighException();
// edit the data
DataTable t = ds.Tables[0];
DataRow r = t.rows[0];
// etc.
// update the database
} catch (Exception ex2) {
// log exception
} finally {
This is the worst kind of code imaginable. Your domain model (the invoice itself and the
business rules applying to it) is embedded in a file that is responsible for displaying the
data, as well as for persisting it. When things go wrong, or the model needs to change, it
will be extremely difficult to find exactly where to go, and changes are likely to have
ripple effects all over your code. Not to mention that unit testing something like this is a
nightmare: you have to mock up a browser, and trace all the way from display to the
database to see if your business logic (trapping for
amounts < 10000) is working
A better strategy would be to create an official domain object for your business code, and
separate everything else into transparent layers around it. We'll start with a new
public class Invoice
// private data
private long invoiceNumber;
private double invoiceAmount;
private Currency invoiceCurrency;
// etc.
// public properties
public double Amount
get { return invoiceAmount; }
if (value > 10000)
throw new InvoiceAmountTooHighException();
invoiceAmount = value;
// etc.
This domain class doesn't know anything about how it will be displayed to the user or how it will be persisted to the database. It is entirely focused on representing the code business abstraction invoice, and the rules that apply to its data. Nothing else clutters the code.
We will separate out the other two portions of our example, the view and the persistence,
into their own classes. We'll make a class called
PersistenceManager, which we'll come back to in a minute, but for now, assume it has a method called
saveInvoice that takes a single instance of
Invoice as a parameter.
The display class can then focus on managing the display of information from the invoice:
public class EditInvoice : Page
private Invoice invoice;
private PersistenceManager persistenceManager;
// series of fields with invoice data
protected TextBox invoiceNumber;
protected TextBox invoiceAmount;
protected DropDown invoiceCurrency;
// etc.
public btnSubmit_OnClick(object sender, EventArgs e)
} catch (Exception ex) {
// notify user of exception
} catch (Exception ex) {
// notify user of data exception
Now, the presentation layer is totally transparent to your business model. If your business model needs to change, there is a single codebase to look at, and not a lot of extraneous code to get in the way. Changes to the model do not necessarily need to affect the presentation layer, and vice versa.
The persistence layer is the same way. By separating out your persistence logic into
another class (
PersistenceManager) you abstract away the common, non-business-
specific functionality of interacting with a database to a transparent part of the code. To
PersistenceManager, you have a variety of choices. You can implement the
transactional script pattern, which is essentially what we did in the first page above.
That is to say, you use the native data interaction objects provided by .NET (
SqlDataAdapter, etc.) to manually pull values out of the
Invoice instance and modify the
database, manually controlling any transactional semantics yourself.
On the other hand, you could use an object/relational (O/R) mapping framework to handle the work for you. O/R mappers are frameworks that, given a mapping file that relates class definitions with database schema, can auto-generate the SQL scripts needed to perform persistence activities. These kinds of frameworks simplify your code greatly by eliminating all of the hard-coded SQL scripts used by the transactional script pattern, and free you to work in terms of your domain model only. Currently, the major O/R mapping framework available to .NET developers is NHibernate, a .NET port of the popular Java Hibernate framework. NHibernate is an open source project found at nhibernate.sourceforge.net. Microsoft has its own O/R mapping technology called ObjectSpaces that is going to be released with Longhorn and/or Whidbey, but unless you are a beta tester for Microsoft, you can only get NHibernate at present.
NHibernate makes the persistence effort totally transparent to your code. You start by
providing mapping entries for your domain model. You create one mapping file per
persistent class, name it classname.hbm.xml, and put it next to your .cs file. The
mapping file for
Invoice (invoice.hbm.xml) might look like this:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="com.relevance.transparency.Invoice,
com.relevance.transparency" table="invoices">
<id name="invoiceId" column="ID" type="int">
<generator class="assigned" />
<property name="Amount" column="amount" type="double"/>
<property name="Currency" type="char(3)"/>
<!-- etc. -->
When mapping properties to columns, be sure to use the name of the public property, not the private field. If the property isn't publicly accessible, NHibernate won't be able to access the values.
Finally, you need to configure NHibernate itself so it can find the datasource used for persisting all these classes. You can add that configuration information to your application's .config file, like so:
<?xml version="1.0" encoding="utf-8" ?>
<section name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System,
Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
catalog=transparency;User ID=webuser;Password=webpwd"
The last step is to implement the
saveInvoice method of
PersistenceManager. The
PersistenceManager class must reference the
nhibernate assembly. Then, the class looks
like this:
public class PersistenceManager
private Configuration config;
private IsessionFactory factory;
public PersistenceManager()
Configuration config = new Configuration();
IsessionFactory factory = config.BuildSessionFactory();
public void saveInvoice(Invoice invoice)
ISession session = factory.OpenSession();
ITransaction tx = session.BeginTransaction();
Furthermore, adding a
Load method to the
PersistenceManager is just as easy.
public Invoice loadInvoice(string invoiceId)
ISession session = factory.OpenSession();
Invoice result = (Invoice)session.Load(typeof(Invoice),invoiceId);
return result;
By employing an O/R mapper, you can make persistence totally transparent to the business model and can take the extra step of simplifying your code by eliminating hand- coded SQL scripts. The drawback to a scheme like this is that it is next to impossible to tune the SQL scripts, since they are auto-generated. If your application is dependent on highly customized and optimized SQL scripts, then you will want to either stick with the transactional script pattern, or use a modified NHibernate implementation where you pass the queries in manually using HSQL dialect (which is outside of the scope of this article).
Anyone who has heard me talk about enterprise development has heard me say, at least once, that the tools you use aren't just tools, they're risks. Every time you use somebody's framework, or IDE, or library, or interface, or what-have-you, you are essentially investing in that team/person/company. If that tool suddenly goes away, or takes a sharp right turn when you were hoping for a left, then your project might suffer as a result. Additionally, when you ship applications to your customers, if something goes wrong (even deep down in some third-party library you got from the Internet), your customer will come back after you, not the third party. Your application is always your responsibility; if you make use of a buggy framework, those bugs will reflect back on you.
In the Java world, there are a hundred ways to do anything. If you want an MVC framework, there's Struts, WebWork, SpringMVC, and one implementation for every J2EE vendor. For O/R mapping, there's Hibernate, JDO, Kodo, EJBs, etc. Heck, there are even five or six viable IDEs. On the Microsoft side of the world, we have tended to be less diverse. We use Visual Studio for development, ADO.NET for data access, and ASP.NET for our web front end. There aren't nineteen different web form strategies (Tapestry, Velocity, JavaServer Faces, etc.). However, that focus on a single vendor is starting to change.
If you take a look at SourceForge, you will notice that there are almost as many .NET projects as Java projects now. All of the major tools on the Java side are being ported to .NET. This list includes:
And the list goes on. As the world of alternatives begins to open, Microsoft developers will now have to face the decisions that Java programmers face all the time: which implementation is right for this team, and this project? Before, you just used what was available. Now, there are competing strategies at every turn.
Making the right decision about your tools always comes down to a cost/benefit analysis. The cost side of the equation is some amalgam of money, research time, training, performance, and sustainability ("Will this product be around for as long as my project?"). The benefits can take the form of simplified development and maintenance, better performance or scalability, or simplification of the code. Tool choices should never be based on either of the following propositions:
Microsoft may or may not be right about whether a given tool is the right fit, and Joe may or may not be a good arbiter of what's hip. You should think carefully and make your own decisions about whether a certain tool brings you the most benefit for the costs, and implement accordingly.
It is an axiom of distributed programming that no matter how small your user base is when you start, if you write a good enough application, eventually you will have to scale up. Therefore, distributed applications must always be architected for scalability in the face of future need. Likewise, any application written well enough will someday be put to uses its authors never intended or imagined. Therefore, applications should be written in such a way as to allow for extension.
In general, this means writing code that allows for the unknown. This sounds like an impossible proposition, but in reality, the key factor is understanding where future users are likely to want to change the way your application works, and making those areas as loosely coupled to the rest of the application as possible.
Let's examine the notion of loose coupling first. Many developers think of loose coupling as using interfaces. That is, instead of:
Document document = new Document();
IDocument document = new Document();
The code is now bound to an abstract interface called
IDocument instead of the concrete
Document class. However, that call to new
Document() is still tightly coupled. Changing
it later is impossible without recompiling, which defeats the whole purpose of loose
coupling. Instead, what is needed is a factory method. This is usually a static method on
the class itself that can return new instances of a given type.
IDocument document = Document.CreateInstance("some_document_type",
The beauty of factory methods is that they can return any concrete type that implements
IDocument, not just the original
Document class, and they can look up the actual
implementation at runtime using reflection. The implementation of
CreateInstance might
look like:
public static IDocument CreateInstance(string type, string asm)
Assembly assembly = Assembly.Load(asm);
return (Idocument)assembly.CreateInstance(type);
As long as the calling code has passed in an accessible assembly, and the type they asked
for implements the
IDocument interface, then it doesn't matter what the concrete type is,
or even if it existed when the application was first written.
To allow future users to add or replace types this way, usually you will add a section to your application's .config file that contains references to the appropriate assemblies.
<?xml version="1.0" encoding="utf-8" ?>
<section name="documents"
type="System.Configuration.NameValueSectionHandler, System,
Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
When allowing your users to choose a type of document to interact with, you simply grab the list of configured document types from the .config file and display them in some sort of selection interface. Once the user makes a decision, your factory method can load the assembly and type and return the appropriate implementation.
A special note about reflection: it gets a bum rap. Reflection is slower than direct coupling, but usually measured at about two or three times slower. That means you shouldn't do everything via reflection, but its judicious use for something like loading a dynamically assigned class at runtime (but binding it statically to a known interface) is perfectly reasonable, especially if you are talking about a modern distributed application, where the two more important criteria for boosting performance are limiting round trips on the network and minimizing hits to the database. If you can solve those problems, then maybe you can think about how a little reflection affects performance. I find that extensibility is usually a more important factor for me.
As you can see, there is plenty of needless complexity piling up all over the development landscape, and one of the principal tasks of any programmer is recognizing the bloat for what it is, and avoiding it where possible. .NET is no more immune to this problem than Java is. For that matter, as my good friend Ted Neward points out in his blog, ".NET is Microsoft's solution to the bloat build-up in COM." If we know anything about the technology industry, it's that history repeats itself. Programmers need to take it upon themselves to limit the bloat, and prune the complexity that is keeping their applications from living the good life. I hope these five principles give you a starting point for examining the choices and assumptions you have made about your projects, and give you some ideas of ways to make your programming life more simple and fun again.
Justin Gehtland is a programmer, author, mentor and instructor, focusing on real-world software applications.
In June 2004, O'Reilly Media, Inc., released Better, Faster, Lighter Java.
Sample Chapters 3 and 10 are available free online.
You can also look at the Table of Contents, the Index, and the full description of the book.
For more information, or to order the book, click here.
Return to ONJava.com.
Copyright © 2017 O'Reilly Media, Inc.