text:
Pennsylvania is far more rural than most of us realize: of its 12 million residents, three and a half million (a larger number than in any other state) live in non-urban areas.
Pennsylvania is also a great deal more important agriculturally than we generally suppose. It ranks seventh in the nation in tobacco production, sixth in the slaughter of hogs, fifth in the production of grapes, chickens and milk, fourth in apples, peaches and tart cherries, third in eggs, and — alone — produces more of this country's cultured mushrooms (140,500,000 pounds, or 61 percent of the annual U.S. crop) than all the other 49 states put together.
Altogether, the Keystone State produces over $1 billion worth of farm products annually. Or, to put it another way, Pennsylvania is not just your casual agricultural state.
And Jim McHale, Secretary of Agriculture for the state of Pennsylvania from January of 1971 to December of 1975, was most certainly not your casual modern secretary of agriculture.
For one thing, he didn't enter office straight from an exalted executive position in some huge agribiz corporation. Nor had he spent 15 or 20 years teaching in one of the country's agricultural colleges. (What the heck! Jim McHale didn't even make it to college as a student, much less a professor.)
And for another, McHale took office determined to make the Pennsylvania Department of Agriculture responsive to the real needs of all the farmers and all the other three and a half million rural residents of the Keystone State. Maybe even the real needs of the eight and a half million urban citizens of Pennsylvania, too, if that's what was necessary. But, at any rate, responsive to the real flesh-and-blood needs of real people...and not the dollar and power demands of the corporate agribiz establishment.
And so, before the "good ole boys" of corporate agriculture could even believe what was happening, McHale was holding hearings throughout Pennsylvania on the subject of rural poverty. He was taking money out of Penn State University's comfortable dead-end "research" projects and plowing it directly into rural housing, health, sewage, and transportation programs. He was passing out free plants and low-cost seeds to 300,000 poor people who were willing to raise their own anti-inflation gardens. He was promoting farmers' markets and co-ops that allowed small producers to sell meat, fruit, and vegetables (at much higher prices than they'd normally receive on the farm) directly to inner city blacks and other urban residents (at much lower prices than they'd normally pay at big city supermarkets).
Naturally, the guys in the middle — the dealers, processors, distributors, and wholesalers getting fat, rich, and powerful at the expense of the family farmer on one end and the consumer on the other — didn't like these and other related programs at all. So they launched a campaign that eventually forced McHale out of office.
It is to Pennsylvania Governor Milton Shapp's everlasting credit, however, that he immediately put Jim right back on the Keystone State's payroll as Special Coordinator for Rural Planning and Programs. And that s where McHale is today...happily rocking the boat and making large waves for the big, vested agribiz interests in the state of Pennsylvania.
But wouldn't it be great if we could put a man like this into office as the United States Secretary of Agriculture (are you listening, Jimmy Carter)? At least that's what some of MOTHER's staffers have been asking each other for the past three or four years. And that's what we've been asking each other with even greater intensity since Kennedy Maize and Ed Vitale recently conducted the following interview with Jim McHale in his Harrisburg, Pennsylvania office.
Jim, you've been a farmer all your life, haven't you?
Well not quite. Actually I was 9-years-old before I got my real start in agriculture. You see I was born in western Pennsylvania about 10 miles from the Ohio line — in 1928. And my father, who was a railroad man, died in 1933...when I was 5-years-old. This was in the middle of the depression and times were pretty tough back then for my mother. But she married David Royer, a veterinarian, when I was seven. And when I was nine, he bought a little 35 acre farm out of James town, Pennsylvania, on the road to Kinsman, Ohio.
Well I thought that place was just grand. I used to ride my bike or a horse out there every chance I got. And when I was big enough to see over the dash, I'd drive out in the family car. You couldn't keep me away from there. I loved to work on that farm...or the neighbors' farms, for that matter. By the time I was 14 I could husk 80 bushels of corn, tie the fodder and set it up. All in one day.
Did you eventually take over that 35 acre farm?
No. When I was 15 I went to work for Don Leach. Don had one hell of an operation. He had 112 acres of his own and he farmed four or five other places besides. His barn was 108 feet long and he milked 50 cows — altogether he ran well over 100 head of cattle, which was a lot for a farm in that part of the country in the early 40's — and he owned a truck and drove a milk route.
Don was really in the "big time" as far as I was concerned. So I went to work for him when I was 15, and boy did I learn to farm! I drove the tractor and did all kinds of farming chores. I even delivered milk before I had a driver's license...I'd finish the route every morning before I went to school.
And this was...?
This was in the early 40s, during World War II. Students were allowed to take off two days a week at that time, to do farm work. And I really took advantage of those two days. I could earn two dollars a day every day I hired out back then, which wasn't too bad for a teenager. And when I husked corn or dug potatoes, I was paid four dollars a day. Hot dog! That was real money, and I saved almost everything I made. By the time I was 18, I had $2,000.
And then, two weeks after I'd graduated from high school, Don called me up to his room. He'd been having trouble with his throat and he was sick in bed and, at the time, he thought it was serious. Anyway, he asked me how long I planned to stick around.
"Well," I said, "I think I'm going to study to be a vet, like my stepfather. He's offered to loan me $5,000 for college...but I'll stay on here with you until the crops are in this fall. "
And Don said, "It seems to me you'd make a pretty good farmer. Why don't you just buy this place instead?"
And I said, "With what?"
And he said, "Well, you've already got $2,000...and your stepfather's offered to loan you another five for college. Maybe he'll loan you that five as part of your down payment on this place. "
And that's what happened. My stepfather loaned me $5,000, my mother loaned me another two, and I already had two. That made $9,000...which was enough to cover a down payment on Don's farm, cattle, dairy equipment, and the milk route. I even took over his lease on an adjoining 200 acres and Don financed the whole deal for me at $100 a month.
And there you were at 18, a full-fledged farmer.
It was 1946, I was 18 years old...and I was farming over 300 acres, milking 38 cows morning and night, and driving a milk route. I got married a year or two later. And as soon as I was 21 I borrowed money from Farm Production Credit and paid Don off. I never did go to college.
It sounds as if you were too busy working.
I was. I worked day and night. When we were putting the crops in I'd go a week at a time without shaving or taking a bath or going to bed. I'd just come in and lie down on the couch for a few minutes and then grab a plateful of something to eat and go right back out to the fields. I sometimes joke that my boy didn't even know who he was up until the time he was about 10...before that he thought his name was "Hurry".
Did all that hard work pay off?
Well, at first, it seemed to. I'd been reading Farm Journal and Pennsylvania Farmer and other publications in the field. And they were all preaching that the only way to go was to work harder and get more efficient and get bigger and squeeze your neighbor off his land. This was today's agribiz line, you see, back in the late 40s...and I fell for it hook, line, and sinker.
We damn near worked ourselves to death. But we bought that adjoining 200 acres, and we built bigger and bigger silos — I had the first 20-by-60 footer with a 60 foot auger feed in our neck of the woods — and we built a 40-by-80 foot addition onto the barn, and just did everything we could to make our operation more efficient.
And, by golly, we were efficient. Farmers were going out of business all around us — all over the country — but we were hanging right in there and getting bigger and more efficient all the time.
But then I began to notice that we were also getting deeper and deeper into debt all the time too. Here I was — one of the most efficient farmers around and doing everything the big agribiz publications told me I should do — and I was up to my neck in debt.
Of course the agribiz guys had an answer for that, too. They said that being in debt was a good thing. They said that that was the way General Motors, the largest corporation in the world, operated...and that if it was good enough for General Motors, it was good enough for us farmers.
What they didn't say, though, was that General Motors — which controlled one hell of a chunk of the automobile business in this country and other parts of the world — could just jack up the prices of all its new cars every year...or any time it felt like it. Could and did. Whereas not a single one of us little farmers enjoyed that kind of privilege. As a matter of fact, the more we improved our efficiency and the more we produced, the more we glutted the market...and the less we were paid for what we had to sell.
Which meant that...
Which meant that during the 25 years after World War II all the manufactured machinery, gasoline, feed and fertilizer that farmers bought went up and up and up...while the price of the grain and meat and milk and eggs they had to sell went down and down and down.
There's the real result of your agribiz "efficiencies" for you. The most important thing they've done is bust the little farmer, force people off the land and into the cities, and increasingly consolidate the production and processing and distribution of food in this country and other nations into the hands of just a few big multinational corporations. It's a shameful thing. It's a dangerous thing.
Dangerous. Big business and big government now own or directly control almost all the resources and means of production in the world. They own or directly control the mines, the oil wells, the factories...virtually everything, but that portion of the world's farmlands that is still in the hands of the family farmer.
The family farmer today is the last holdout against a complete corporate takeover of our lives. If the family farmer isn't saved, the people will no longer own the land...will no longer control their food supplies...and will, therefore, no longer control their destiny. And when that happens we'll no longer have any freedom. Period. We'll live in a corporate fascist state.
Perhaps that's something of an overstatement.
Is it? I've been thinking about this and checking into the idea for some time, and I've learned some things that I still find hard to believe.
Did you know, for instance, that only 12 landholders now own over half the state of Maine? Or that just 25 control 52 percent of California? Or did you know that the Tenneco corporation got a $21 million tax refund in 1970 because of its involvement in agriculture? Does a family farmer ever get that kind of tax break?
See. We're not talking about farming efficiency with these huge corporations. What we're really talking about is sheer, raw economic power...resources and money that are derived from other businesses and then used — with the help of the government — to lower agricultural prices and drive the little farmers off the land. That's not farming efficiency. That's the beginning of monopolistic control!
The beginning, maybe...but, gee, it'll take a long time to turn that into a real monopoly.
Will it? Let's look at the vertical and horizontal stranglehold that just a few big corporations already have on our whole food distribution system.
Go into any of the large chain supermarkets and look at all the different brand names on the shelves and you'll think there's a lot of competition in the field. But then start reading the small print on all those labels and you'll soon learn something else. Only four or five corporations control over half of almost any given food line. Del Monte alone supplies 16 percent of all U.S. canned goods. Campbell's totally dominates the canned soup business in this country. Just four companies control 90 percent of the breakfast food industry.
And what do these corporations do for you and me? To a large extent, they spend billions of dollars every year to persuade us to buy whatever kind of junk food they decide to sell. In some cases that "food" is mostly sugar and not even really fit to eat. So what are we paying for? The advertising that made us buy the package in the first place! It's a vicious circle.
And how much does the farmer actually get for the wheat in that dollar box of cereal? Pennies! Maybe two or three cents. All the rest goes for advertising and packaging and processing and sugar and profit to the cereal company. And even that isn't enough for these corporations. So they take a product like Wheaties and they add a half-cent of vitamins to it and they call it total and then they charge 15 cents a box more. This is total, all right. An almost Total rip-off of the consumer.
And the original producer, the individual farmer, isn't doing any better. The monster corporations are screwing him too. Take the big Russian grain deal, for instance. Most people think the farmers made a windfall profit on that one. All the man in the street ever hears is how wheat suddenly skyrocketed to $6 a bushel. What he doesn't know is that six multinational, American-based grain companies control most of the grain movements in the whole world! And those six corporations didn't let the price of wheat go up until they had nearly all the '73-'74 harvest in their hands.
The farmers sold that wheat for less than $4 a bushel. And it was only after the big grain traders controlled almost all of it at that figure that the price was jumped to $6 a bushel. The little guy — the individual farmer — got shafted. The people who made the money were all old cronies of Earl Butz. They were all big grain dealers.
Man! You surely don't think much of the big agribiz interests, do you?
I've been fighting these "bigger is better" guys for 20 years. They're always harping about the efficiencies of scale and how the farming and food industries should be consolidated for efficiency. And what they really mean is that all the little people in the farming and food business should wrap up their land and their life's blood — everything — into one neat package and hand it over to the big guys on a silver platter. I realized that with stark clarity for the first time back in 1957.
What happened then?
Well there I was, a damn efficient dairy farmer but in debt up to my neck...and all of a sudden — under Eisenhower's administration — the price of milk began to slip badly.
Now we were sending our milk to the processor in 10 gallon cans at the time and, especially in the summer, you had to try to keep those cans cold — in a springhouse or a refrigerated cooler — from the time they were filled until the processor's truck came to pick them up. And then they'd rattle around in the truck all the way to the milk plant and they probably wouldn't stay as cold as they should and it was awfully hard to get that milk all the way to the plant in first-class condition.
So I was interested — in 1957 — when Beverly Farms, a Pittsburgh processor, sent representatives around promising us dairy farmers a substantially better price for our milk. They said that if we'd switch from our unrefrigerated 10-gallon cans to refrigerated 600-gallon bulk tanks that Beverly Farms would send special bulk trucks out to pick our milk up. And that the milk would get to the plant in so much better condition when handled by this "bigger and better" system, that Beverly would be able to guarantee us a price of $5.75 a hundred pounds.
Well this sounded pretty good. The Beverly representatives, in fact, showed me how I would have been $1,718 ahead of the game if I had only been selling my milk to them under this new system during the first six months of that year. So I talked 20 of my neighbors into investing $3,000 to $5,000 each and we all went to bulk tanks.
And after we'd made the investment, the people at Beverly paid us what they damn well pleased. I remember one load that went in during February 1958 on which they paid us five different prices...prices that varied as much as a dollar a hundred, all on the same bulk load of milk.
Well couldn't you just quit selling to Beverly Couldn't you start selling to another processor?
No. That's just the point. Beverly Farms was the only plant in the area at the time that was set up to handle milk from bulk tanks. We were locked in.
So a few of us went down to see the plant's owner and the meeting didn't last very long. He said he'd changed his way of paying for milk and that if we didn't like it we could quit in the morning.
Well the situation just got worse and worse. By August of 1959 we were down to $3.06 a hundred take-home for our milk. This was less than it cost us to produce it and that man was just taking our farms away from us through those bulk tanks. So I organized 29 of the 33 farmers who sent milk to Beverly Farms and we held a three-week strike as Local 205 of the Teamsters Union. We were the only Teamsters local of dairy farmers in the United States at that time.
I'll bet that shook some people up!
It shook me up, I'll tell you that. I sure learned a couple of things from that strike.
Number one, I learned that our government's agricultural agencies didn't really give two hoots in hell about the real needs of the small farmer. Just before and during that strike a whole swarm of county agents, milk economists and people from Penn State University's extension services came in to see us. Not to help us, mind you...but to "educate" us. They came in and handed us that same old agribiz party line...that the price of milk was really high enough and that it was all our fault if we couldn't make a living selling our product at Beverly Farms' price. They told us we should get busy and get more efficient and produce more and that everything would be all right.
But, damn it, that's what we had been doing. And look where it had gotten us. We'd been working like dogs and expanding and producing more and more...and all it had done was make it possible for a milk processor to sit back and bleed us to death. Criminy! The last time those extension agents came out we damn near picked them up bodily and threw them right out of the county.
So that's one thing I learned: that, except for a few good people here and there, the whole agricultural establishment of the federal and state governments in this country has already been bought and paid for by the big agribiz interests. For the most part, those government agencies are simply no longer interested in helping the little guy.
And what's the second thing you learned from the strike?
That just because you finally settle such a confrontation doesn't mean you get what you bargained for. The Teamsters sold us out.
Our new contract guaranteed us a 70 percent Class One market but we never did get it. The union kept promising that the issue would be negotiated and that, at the end of the year, we'd be paid the difference between what we were actually getting and what we were supposed to get. But then the Teamsters signed another contract with the plant and we never did get our back pay. According to my calculations, Beverly Farms still owes me $2,500 on that deal alone.
It sounds as if the deck was really stacked against you.
It was. But I was good and mad by that time so I got a copy of the Pennsylvania milk control law and I dug around and I found that the state's milk marketing board had set the price to be paid to farmers at something like $6.25 a hundred. But we weren't getting anything near that and I wanted to know why.
So, to make a long story short, I went to see an attorney — F. Joseph Thomas — in Meadville and I called together 30 or 40 dairy farmers and we had a meeting. And as a result of that meeting we called another one, and 400 farmers showed up! And that was the beginning of the Western Pennsylvania Milk Producers Association. We all kicked in dues of a dollar a cow per year — that figured out to about $12,000?and we started looking into Pennsylvania's milk marketing practices.
And what did you find?
All kinds of illegal activities, kickbacks and deals. We found that while the dairy farmers were being screwed on one hand, the consumers of the state were paying millions of dollars more every year than they should have for milk on the other. As a result, Pennsylvania had — and still has — the lowest per-capita consumption of milk and dairy products of any state in the union.
Still has?
Oh sure. The work we began back there in 1959, 1960 and 1961 has paid off to some extent — it brought about the exposure of a $3.2 million kickback in Pittsburgh in 1965, for instance — but the Pennsylvania consumer is still paying far more than he should for milk. And the kickbacks now come out of Omaha and New York City, instead of Pittsburgh. I've testified about this to the state senate and Governor Shapp has proposed a couple of bills that would do away with the retail price fixing of milk in Pennsylvania...but the legislators here in the state won't do anything about it.
Win some, lose some.
That's about where it stands right now...but we haven't given up yet.
Tell me, Jim, did that organizing of 400 farmers into the WPMPA in 1959 or '60 eventually lead you into politics?
I guess my political turning point came in 1961 when I was contacted by a representative of the National Farmers Union. For the first time I began to realize that the battle I was fighting went far beyond what the Western Pennsylvania Milk Producers could do.
I'd just made the point to this guy, see, that I couldn't really go out and organize for the Farmers Union because I was already tied up with the group I'd put together. And then he picked up the phone and made a call to Orville Freeman — who was the new Kennedy administration's secretary of agriculture — and got F. Joseph Thomas and me invited to a national meeting of farm groups. I was impressed.
I was even more impressed after I'd made that trip to Washington and sat in Secretary Freeman's office and heard speeches by Jim Patton, the president of the National Farmers Union, and Hubert Humphrey. By golly, I'd never heard anyone speak the way Senator Humphrey spoke! He put me right up on the edge of my chair 15 years ago, and I've been there ever since.
I take it you were already a Democrat.
Well my dad had been a Democrat but he'd died, remember, when I was only five. And my stepdad, the elders of our church, and all our town leaders were Republican. The people I'd borrowed money from when I was building up my farm — all the people I'd dealt with were Republicans. It never occurred to me to be anything different.
But then, in the late 50s as I started to get fed up with the whole agribiz approach to farming, I began to notice that the American Farm Bureau Federation seemed to be all for agribiz and that it always seemed strongest when Republicans were in power. And I noticed that the National Farmers Union seemed to be more for the little guy and that it always seemed to have more say when the Democrats were in office.
And besides that, I'd just had a good feeling about Kennedy so I'd already switched and registered as a Democrat in order to vote for him. So, yeah. I was a Democrat when I made that trip to Washington.
And those guys at that meeting got me so damn fired up that I came home and, in addition to milking 70 cows and doing all the other farm work I had to do, I put on 1,200 members for the National Farmers Union that summer...the summer of '61.
I really drove myself. I honestly thought I could change the whole system single-handed in just one year. Then, as I began to realize what a job it was really going to be to bring about the change I wanted, I sold my cows and went into grain farming, so I'd have more time for the union.
Well, one thing led to another and I sold the big farm in '64 and went to work for the union full time. Then I sold the little farm in '67. It wasn't until I bought my new spread of 170 acres in January of '73 that I really got directly back into farming again. I was just too busy organizing for the union and working to put Democrats into office. And then, of course, once we'd helped Shapp get elected Governor of Pennsylvania, he asked me to be his state secretary of agriculture.
What did you find when you went into office, Jim?
I looked at the Pennsylvania Department of Agriculture and I couldn't believe what I saw. It was a passive, negative agency set up to do strictly regulatory work. There were no forward, affirmative programs to promote the farmers' bargaining position or research the marketing of farm products or boost farm income or help rural development or do anything else that would improve the quality of country life and help a farmer and his family stay on the land.
Almost every nickel the department had was mandated for the licensing of dogs or the certification of plant health or the control of communicable disease in cattle or the checking of scales for accurate weight or some other regulatory function.
The federal and most of the other state departments of agriculture in this country spend their money the same way.
I know...but that doesn't make it right! Sure we've got to do these things. But we've got to do some other things too. I don't think this country can survive if the family farm doesn't survive. And the family farm isn't going to survive if the rural community doesn't survive. And the rural community isn't going to survive unless somebody or something with some muscle begins to look out for it and to plan for its future.
And you think that the federal and state departments of agriculture should be that "somebody or something?"
Are there any other agencies better qualified? Listen. When I went into office I studied the makeup of Pennsylvania's population of 12 million, and I found that 3.5 million of those people lived in rural areas. They weren't all farmers by a long shot...but 3.5 million of Pennsylvania's people lived out there in what we call rural areas.
And you know what else I learned? None of those 3.5 million people had a real spokesman in our government. There were all kinds of representatives in the department of labor and the department of this and the department of that standing up for our urban residents. And every year millions and millions of dollars were getting spent by well-meaning people who were trying to correct our urban ills.
But nobody was standing up for our rural population. If you lived out in the country and you had a problem, that was just your tough luck.
That's the way the state looked at it anyway...but, actually, it was everyone's tough luck. Why? Because it was apparent to anyone who studied the problem — it was apparent to me, at least — that all those urban problems that everyone was so excited about solving today were really only yesterday's rural problems once removed.
What do you mean by that?
When I went into office one of the big questions was why had 400,000 people left Pennsylvania during the 60s. Four hundred thousand! This was the largest out-migration that any state in the nation had suffered during that period. Why were so many people leaving Pennsylvania? It raised some serious questions about the quality of life in our state.
So I looked into the matter and I found that 357,000 — more than seven out of every eight! — of that total out-migration had left our rural areas. And they had left because of lack of opportunity, and lack of public transportation, and lack of affordable medical services, and lack of sanitation facilities. Those people had left our rural areas during the 60s, in other words, for most of the same reasons that people in the 70s are leaving our urban areas. If you don't solve these problems when they first pop up out in the country, you're only going to have to face them — on a much more massive scale — a few years later when those same problems move to the cities.
But where...how do we begin? How did you begin?
I started in 1971 by trying to bring Pennsylvania's rural problems out into the open where we all could see them. But since my department didn't have a budget for such an investigation — it didn't even have a single bureau that concerned itself with people, for cripe's sake — I had to get help from some other agencies of the Pennsylvania government to do even that.
So I asked the Governor if we could cut across departmental lines — I asked him if the department of agriculture could work with the departments of health and community affairs and some other departments — to make the whole state government more responsive to the problems faced by our rural people. And Governor Shapp agreed completely with the idea. He even suggested that I get the legislative branch of government involved.
So Bill Wilcox, the Secretary of Community Affairs, and I put together a committee chaired by Senator Pat Stapleton and we went right out into the rural areas of Pennsylvania and, we held hearings. We got some people from the department of welfare involved and we asked the local senators and representatives to work with us as we went into their districts and we really got down to brass tacks. We really zeroed in on the problems that our rural people were facing.
And we uncovered some incredible things. We found, for instance, that there was more substandard housing in rural Pennsylvania, with 3.5 million people, than there was in urban. Pennsylvania, with its population of 8.5 million. There were people living under just some horrible conditions out there.
For example?
We held one hearing in Indiana, Pennsylvania...right in the middle of the coal mining country. And a lady came in from Stump Creek, a little town nearby. And she had some water in a quart jar that she'd taken from Stump Creek's city water system. There was a half inch of sediment in that jar and the water looked like coffee. But that didn't tell the whole story because the woman had skimmed off the green gook and filtered out the tadpoles before she'd brought the sample in. Anyway, this so-called water was costing her $7.50 a month and she'd been without even that for a total of 30 days during the previous year.
And, as if that weren't bad enough, the sewer system that she and the other residents of Stump Creek were living with was little more than an open ditch.
Why? How had this come about?
Well this had been a company town back in the big coal mining days. And when the mine had shut down, the company had sold the town — lock, stock, and barrel — to a real estate agency that, for this discussion, will remain nameless. And the agency was obviously more interested in the rent it was receiving from Stump Creek's residents than it was in keeping the town's houses or water system or sewers in good repair.
OK. But level with us, Jim. Did that hearing do any real good? Or did Stump Creek go right back to "business as usual" once your hearings moved on to another part of the state?
Oh no. This story had a happy ending. Once the facts were out we persuaded the Institute of Man and Science in Rensselaer, New York to buy Stump Creek. And then, through grant and loan money the Institute was able to attract, the town was completely refurbished: new water system, new sewer system, renovated homes.
And best of all — for about $5,000 per building — the residents of the community were able to buy, instead of rent, their homes. The Institute came out of the program with no profit and no loss...and a whole rural community was saved. All at no cost to the taxpayers!
Beautiful! That's great! You actually did some good. Did your hearings delve into any other subjects?
Oh sure. We looked into the need for some sort of organized health care program for rural people. And that led us to the question, "How do you get to a doctor or a clinic if you're a 65-year-old widow, without a car, living on $1,500 a year, 15 or 20 miles from the nearest town?"
Transportation! If you don't own an automobile today, our society really has you at a disadvantage...especially if you're poor, elderly, in ill health, and live out in the sticks.
But what could you do once you had these situations out in the open? Suddenly trying to provide health care and some sort of public transportation for hundreds of thousands of isolated, elderly people where these services haven't existed before is one hell of a big undertaking. Could you do it?
No. Not overnight. We didn't have any money for such programs. But I found a $402,000 contract that had been let to Penn State University to study the diet of mink. And I thought, "Boy. Mink must be pretty important to Pennsylvania if we're spending that kind of money just studying what they eat."
But then I learned that there were only 57 members in the state's association of mink growers and they were as upset about the research grant as I was. The report they got back every year consisted, basically, of one sentence: "Dry diets are as good for mink as wet ones, and the dry diets are more economical because they don't require refrigeration."
And besides that, there were 12 other land grant colleges throughout the country doing exactly the same research on the diet of mink and coming up with exactly the same answer. So I canceled the Penn State research grant. And I put that money into a pilot health screening program — just like we already had in the cities — for rural people.
We had people coming in for checkups that hadn't seen a doctor in 10 years. People who had cancer, lots of it treatable. People who were going blind and needed only a relatively minor operation so they could see again. That demonstration project really paid off...so well, in fact, that it was picked up and expanded in Pennsylvania by the department of health and other agencies.
And what about the need you'd uncovered for some sort of rural transportation program?
We really took the leadership in the nation on that one. The Pennsylvania Legislature had passed a bill to subsidize urban mass transportation with money from the state lottery. So I got hold of the Governor and asked him to think about our rural population when he signed the bill. And he told me to get together with the department of public welfare and set up a demonstration project and he'd see that we had a budget to work with.
And we did. We had buses running and a phone number that people could call for rides. And we found that 70 percent of the people using that service were widows, over 65, and living on less than $1,500 a year. This service was just a godsend to them. For the first time in years they could get out to see a doctor, or go to church, or get in to the county seat to conduct business.
So the Governor let me expand our pilot program into 23 counties and appointed me chairman of a task force to develop a totally integrated rural transportation system for that area. And I testified in Washington before the U.S. Department of Transportation and we got a large grant for the project. And one of these days, somehow, we're going to wind up with a solid, nationwide transportation system that serves us all.
What about the fundamental questions of farm income and food prices?
We got into those too, of course. During our original hearings we listened to a lot of farmers who testified — and they had the receipts to prove it — that all their costs had just skyrocketed out of sight...but that they were actually receiving less for everything they had to sell than they'd received back in 1948. Of course I already knew this, but it was an eye-opener for some of the other members of the committee. For the first time they realized that our farmers don't work for themselves anymore. They work for the banker, the machinery companies, the oil companies, the fertilizer outfits. And they just go deeper and deeper into debt every year.
What could you do about that? What have you done about it?
Well this is a tough one. Tough because the problem is so big. It goes far beyond Pennsylvania or, for that matter, even the whole United States. This trend for the big agribusiness interests to just squeeze and squeeze and squeeze until independent farmers can't afford to produce and consumers can no longer afford to buy is a worldwide problem. The giant multinational corporations that have a headlock on everything are getting too big for national governments to deal with...let alone the state of Pennsylvania.
But that hasn't stopped you from trying, has it?
Oh no. We've been giving them hell the best we can. Those hearings we held in '71 were only the beginning. As long as I was Pennsylvania's secretary of agriculture — and ever since — I've been hammerin' away on the theme that, thanks to the agribiz rip-off, our family farmers can no longer afford to produce and our consumers can no longer afford to buy.
I've given addresses on the subject, I've testified before Congress in Washington, I've put the message across with hearings here in Pennsylvania, I've said it over and over on TV and radio and in the newspapers, and I've worked with everyone I can who's been attacking the problem.
You got involved pretty deeply with U.S. Senator Fred Harris and Jim Hightower, the head of the Agribusiness Accountability Project, didn't you?
Sure did. They put together something called the Food Action Campaign and I was proud to be a part of it. It was all coordinated out of Washington, D.C., and I hit 26 major cities across the country on that one. We'd start out in a town at 6:00 or 6:30 in the morning on radio or TV and then work all day long giving television and radio and newspaper interviews and speaking to AFL-CIO and other groups.
We just blitzed the country telling people how the agribiz interests were exploiting the farmers on one hand and the consumers on the other. And then we wound up the whole campaign by testifying before Congress in Washington. We urged that the federal government bust up the agribiz monopolies and put a little free enterprise back into the farming and food industries.
And this was when?
Back in '72.
And what was the result of all that effort?
Well not a great deal happened right then. It's hard to move Congress, you know. But a good number of the things we were talking about back in '71, '72, '73 are starting to get pushed along now. Senator McGovern and some of the others have sponsored a bill to set up a commission that'll investigate the food processing and distribution system in this country. And Joe Vigorito has gotten a bill through Congress — it's now been signed by the President — that'll provide money and technical assistance to the states for their departments of agriculture to use in the establishment of direct farmer-to-consumer marketing projects. These things take time, but they're coming along.
They may take time, but that doesn't mean we've got to sit around and wait for them to trickle through Congress. As you well know. At least you certainly haven't been sitting around waiting for them.
No. We've managed to keep pretty busy. Joe's direct marketing bill, for example, came straight out of the direct marketing pilot projects we've been running here in Pennsylvania. We used $40,000 of department of agriculture funds to hire some consumer coordinators. And those coordinators then worked to put farmers directly in touch with consumer buying clubs and inner city black self-help groups across the state. And they worked to set up open air farmers' markets in a number of cities.
The whole idea, you see, was to open up channels that farmers could use in marketing their produce directly to the consumer. We were trying to do two things: help the little farmers sell their products at a higher price than the processors would pay them, and help the consumers buy their food for less money than the agribiz marketing system charged.
Were you successful?
Oh the whole program was just a huge success. Right here in Harrisburg, for example, the open-air market is open two days a week from June to the end of October. An average of 5,000 customers go through each day and purchase an average of $9,000 worth of produce.
You've done a thing with gardens too, haven't you?
Yeah. In 1974 we set up a project tailored after the Victory Gardens of World War II. We gave 400 welfare families each some shovels and hoes and rakes and seeds and plants and a 20-by-30-foot garden space. And then we kept track of what they harvested and found that those 400 families each came out an average of $256 to the good.
Governor Shapp was so pleased with that demonstration project that he kicked off an Anti-Inflation Garden Program the next year.
You know those little packages of seeds that are sold in the hardware stores for 39-to-59 cents each? Well we made a deal with a seed company that agreed to put a selection of 10 of those packages together for us for a total price of 51.9 cents each, if we'd buy them 100,000 at a time. And we started 400,000 tomato and cabbage plants in our state research centers and other institutions and gave them away on a first come, first served basis to low-income people. And we followed that up by plowing up 5-acre tracts of state-owned land at 25 different locations across Pennsylvania and dividing those pieces of land into 20-by-30-foot plots for gardens. And we let people come in and raise vegetables on those plots.
And the whole thing worked just great. People got a real chance to get their hands and feet into the soil and see where their food comes from. They saved money. They gained self-confidence. And it was really wonderful to see a 75-year-old, poor black man working alongside a 30-year-old, $20,000-a-year government employee...and talking and trading vegetables! Damn, that was satisfying. That's the way government programs should work!
What was that other thing you did with food...the thing with the meat?
Oh that was in October of 1974, when a farm woman from up by Scranton called me on the phone. She was in tears. She'd just sold a 90 pound calf and, after the trucking and commission were taken out, she'd netted $2.50. And this was when meat was hitting all-time highs in the supermarkets.
So I went out and I bought a 1,450-pound cow the following week for 15 cents a pound...the going price that farmers were being paid for that kind of cow at the time. And I sent her up to the meat evaluation center at Penn State. And I told the people there to butcher that cow and pull out the top cuts just the way the local grocery store would do it and to figure what those cuts were worth. And I told them to subtract the value of those cuts from what I'd paid for the cow and to grind the rest of the meat into hamburger and to let me know what that hamburger had cost me...including the cost of butchering and dressing out the meat, everything. And the computer printout showed the cost of that hamburger to be 29 1/2 cents a pound.
Now this was very interesting, because hamburger was selling all across Pennsylvania that week for $1.09 a pound. So I gave my information to the Governor and he publicly proposed that the state set up cooperatives that would buy and butcher cows and make the meat available to senior citizens' centers at cost.
Well that really upset the industry. As soon as the meat packers thought that Pennsylvania might get into the meat business, the price of hamburger dropped to 89 cents. It dropped from $1.09 to 89 cents within 10 days. The industry was really upset.
So I called a meeting in my office. I invited the chain stores, the cattlemen's association...everyone in the industry. And I passed my computer printout around the table and I asked if anyone could find anything wrong with it. I said that if anyone could, I'd make a public apology. But nobody could find a mistake in our figures.
So then I took a look at the printout and I said, "Gentlemen, these figures are wrong. We forgot that the offal, hide, and blood of that cow had a value too. We could have deducted another $45 to $50 from the cost of my hamburger. Now I'd like you fellows to go away and study this printout for two weeks. See if you can find any more errors. And if you can, I'll make a public apology to you."
So what happened?
Every last one of those guys called up before the next meeting and said he couldn't be there. To this day, no one has ever told me that printout was wrong.
Jim, you're an amazing fellow. I don't know how you've done all the things you've done since you were appointed Pennsylvania's secretary of agriculture in 1971. We've already talked about some of them...but we haven't even had a chance to get to others. Things like the rural housing projects you've set up. Or the fact — unknown to most people, I'm sure — that it was work done by you and Governor Shapp which led directly to the World Food Conference in Rome in late 1974.
lf we were to go into all those other activities, however, I'm afraid this interview would fill a whole issue of THE MOTHER EARTH NEWS ® And, anyway, I think we've already covered enough of your career to convince our readers that you're exactly the kind of guy we need as the United States Secretary of Agriculture. I surely hope our new President slips you right into that Cabinet position.
In the meantime, what would you try to do if you did, indeed, land in that spot?
Oh golly. There are so many things that need to be done. Let me just list a few of the ideas that come to mind.
One, there should be a state as well as a national land policy designed to keep the ownership of farms in the hands of the family farmer. We've also got to put a stop to the paving over of our best agricultural land with superhighways and shopping centers and the like.
Two, the government should get behind a concerted effort to encourage farmers — and show them how — to market their products directly to the consumer. This should be tied to an educational program for consumers that would help them realize the nutritional and the financial benefits of purchasing fresh, unprocessed food directly from the farmer. Urban consumers also should be encouraged to set up food-purchasing cooperatives.
Three, the whole thrust of agricultural education and research should be changed from the present emphasis on ever-bigger and ever-more technologically efficient farming methods,,,to an emphasis on the techniques that will help the family farmer, the consumer, and the planet. The environmental impact of the present energy-intensive agribiz rape of the land is horrendous. It's gobbling up the world's reserves of fossil fuels at the same time it's destroying the soil's capacity to grow food. This just can't be allowed to go on.
Four, there should be a full investigation of the food production, processing, marketing, and distribution systems in this country and the rest of the world. And the purpose of that investigation should be the breaking up of the agribiz monopolies.
Five, we need tax reforms that will eliminate the corporate farms' tax breaks and encourage urban dwellers to go back to rural areas.
Six, we need a national program that will enhance the quality of rural life in this country. Everything that's really important in a basic sense — our food, fiber, raw materials, energy — comes from the country. It's time we stopped relegating our rural residents to a second class citizenship.
And, seven, we should never again allow an agribiz executive to be a state or federal secretary of agriculture!
You know, we can do almost anything once we've decided we want to do it. We can put men on the moon and space probes on Mars. And I believe, once we realize the absolutely terrible ultimate consequences of our present farm policies, that we can phase the big corporations out of agriculture and put this most important of all industries back into the hands of the people.
Rural America has become decapitalized and depopulated during the past few decades. It's dying out there. And when it's finally dead, we're all going to die too. Or, at the very least, our most precious possession — freedom — is going to die.
We can't let that happen. We've got to have a national family farm policy that will revitalize and rejuvenate rural America. We've got to put people back into agriculture. We've got to put the ownership of our land directly back into the hands of families and individuals. Directly into the hands of those who will stop the rape of the land...and who will, instead, steward the land and care for it. And we've got to put real, fresh, unprocessed food back onto the tables of America. Real food, at a reasonable price.
And if we don't do these things, I don't have much hope for us. But if we do...well, by golly...I think everything can still turn out all right.


text:
The June weather report from Richard G. Hendrickson, the United States Cooperative weather observer in Bridgehampton, arrived this week — a little late but nevertheless still of interest to other South Fork weather watchers.
With such hot days this month, people may have forgotten that June was on the cool side. Although the temperature reached 94 on June 9 and 10, the high for the rest of the month was a more reasonable 85 on June 12. "There were two cool, cool daytime readings, on the 14th when it rose no higher than 66 degrees and on the 25th when it was only 67 degrees," Mr. Hendrickson wrote. "Why these cooler temperatures have prevailed to the month's end I do not know."
June nights were mild, and in two cases downright chilly. Mr. Hendrickson recorded 45 degrees on the night of June 4 and 46 degrees the night of June 5. "Mild nighttime temperatures continued throughout the month," he said. "Over the years in the month of June there is often frost, but not this June."
There was measurable rainfall on eight days, with the heaviest, 1.69 inches, on June 23. "June is often the month when there has been little rainfall and early crops have often suffered. Some of those with cash crops have put in irrigation. Often over the long term it pays. And the opposite is true when we have had ample or many extra rains, with muddy soils and some washouts, making for delayed maturity in crops. Such is one of many, many hazards or perils that affect the farmer, whether he be in crop or livestock farming," wrote Mr. Hendrickson, a retired farmer who has been watching the weather for more than seven decades.
The heaviest rain in two days came on June 22 and 23, when a total of 2 inches fell. The total rainfall for the month was 5.78 inches, about 2 inches more than the long-term average for June.
Mr. Hendrickson reported 5 clear days, 7 partly cloudy days, and 18 cloudy days. Winds were mainly from the southwest, as is typical in the summer.
He recorded thunder and lightning on June 1, 9, and 17.
He warned people: "Use extreme care when sudden thunderstorms visit our area, on the golf course, in your boat, in the hayfield, or when clamming." Mr. Hendrickson recalled a lightning bolt that "hit a barbed wire fence and killed chickens nesting in the tall grass under the fence. I have seen the hissing St. Elmo's ball of fire going from a telephone pole to a lightning rod on the farm home. Scared the living hell out of me, and it would you too."

subset: commoncrawl


text:
The ends of the 3 bones in the knee — the femur, tibia, and patella — are covered with cartilage. Cartilage is a smooth material that covers the ends of the bones and cushions them where they meet. It allows the joint to move easily and acts as a shock absorber. Between the bones of the knees are 2 crescent-shaped discs of connective tissue, called menisci. These also act as shock absorbers, protecting the lower part of the leg from the weight of the rest of the body.
Meniscus tears can occur during a rotating movement while bearing weight. One example would be twisting your upper leg while the foot stays in place during sports and other activities. Tears can be minor, with the meniscus staying connected to the knee, or major, with the meniscus barely attached to the knee by a thread f cartilage.
Symmptoms of a torn meniscus may be different for each person. Some of the most common symptoms are:
Pain, especially when holding the knee straight
Swelling and stiffness
Knee may click or lock
Knee may feel weak
The symptoms of a torn meniscus are similar to other medical conditions or problems. Always see your health care provider for a diagnosis.
In addition to a complete medical history and physical examination, diagnostic procedures for a torn meniscus may include the following:
X-ray. A diagnostic test that uses invisible electromagnetic energy beams to produce images of internal tissues, bones, and organs onto film.
Magnetic resonance imaging (MRI). A diagnostic procedure that uses a combination of large magnets, radiofrequencies, and a computer to produce detailed images of organs and structures within the body; can often determine damage or disease in a surrounding ligament or muscle.
Arthroscopy. A minimally-invasive diagnostic and treatment procedure used for conditions of a joint. This procedure uses a small, lighted, optic tube (arthroscope) that is inserted into the joint through a small incision in the joint. Images of the inside of the joint are projected onto a screen; used to evaluate any degenerative and/or arthritic changes in the joint; to detect bone diseases and tumors; to determine the cause of bone pain and inflammation.
Specific treatment for a torn meniscus will be determined by your doctor based on:
Your age
Your overall health and medical history
How bad your injury is
How well you can tolerate specific medications, procedures, and therapies
The length of time it will take to heal
Your opinion or preference
Treatment may include:
Medication, such as ibuprofen
Muscle-strengthening exercises
Arthroscopic surgery
See All News


text:
I'm getting a little behind in my posts, but better late than never. My outfit for yesterday, day 22 of Me Made June was definitely a cheater outfit. I had a cute skirt selected, complete with new strappy sandals, and then I awoke to rain, rain, and more rain. Added to the fact that it was cold out, and that I had two minutes to make a wardrobe change before leaving for work, and this is what I came up with.
** after seeing this photo – I realize the tunic top needs some altering. It was another clearance rack find ($4!), but it definitely needs to be brought in a little bit at the sides and armpits so that it looks less sloppy! **
The goods:
Infinity scarf – Me Made!
Eyelet tank – Old Navy
Jeans – Warehouse One
Sandals – Roxy
Earrings – Le Chateau
Hours worn: 12
Places visited: Work, dinner with bf.
Main activities: Working … watching the NHL Awards on TV… not by choice :)
Wear again? Yes! I've worn this scary so many times and love it more each time. It's so fun!
I also have a dress cut out of the scarf fabric that I need to get around to putting together… It's this Cynthia Rowley pattern, and I'm interested to see how it will turn out. Just as soon as I feel brave enough to tackle an invisible zipper.
I really love working with jersey. It's simple and forgiving, so you can't go wrong. Next up on my list is a few of these necklaces, in a bright coral!


text:
Distinguished Single Bezel Diamond Ring
In Stock | STYLE: HGRDTGSB0050PL-C
Available in 7-10 Business Days
This beautiful single halo diamond ring is simple and elegant . Avaliable in white gold, yellow gold, rose gold and platinum; this classic engagement ring is traditional yet still stunning.... *Prices are subject to change based on fluctuations in metal prices and currencies
A perfect ring of eight hearts when viewed from the bottom. A perfectly formed symmetrical fireburst of light when seen from the top. Diamonds cut and polished at 100X magnification - 10 times the industry standard. That's the perfection of a Hearts On Fire diamond. It's a perfection you can see. Hearts On Fire, The World's Most Perfectly Cut Diamond
General Details:
Available in 7-10 Business Days


text:
Nono: Prometeo (London Sinfonietta/Masson/Bailey/Richard) - Royal Festival Hall, 9 May 2008
Before this concert started, I had the sneaking suspicion it would turn out to be either (a) one of the musical events of the year or (b) like being chained to a rock having my liver pecked out by vultures. After all, it comes with the unsolicited baggage of labels like 'one of the best works of the last century' and 'the grand statement around which all Luigi Nono's other music orbits'.
It was almost a disappointment that it fell so roundly between the two extremes. No earth-shattering experience, but (nearly always) engaging. The 2+ non-stop hours passed without dragging, but without revelation either. The idea of leaving didn't cross my mind, though I noticed quite a few other audience members disappearing discreetly now and then. Incidentally, although the Royal Festival Hall's contemporary music events usually tend to draw a youngish audience, this was certainly not the case tonight - average age 60 at a guess, and very few under 40's, let alone young people.
And the audience was purposely a small one. To perform the work as closely as possible to Nono's original specifications, the customers were corralled into the front stalls (about 1/3 of the total space) with the many musicians, singers and speakers spread around - on the stage, in the side stalls, and tucked away on the balcony, with even a few in the stage side boxes.
Speakers were used, more to relocate the sound than to amplify it, with some skilful placement and mixing by André Richard separating the sound from its means of production. The music passed around the space from group to group, and matching the drifting pockets of sound to their visual source became near impossible.
With the gentle, ethereal choral singing rarely defined by anything as concrete as a word, and only occasionally broken by rude parps of brass or the mosquito whine of stratospheric violins, it was like a less comfortable and less fragrant version of a relaxing aromatherapy massage.
Perhaps it all seemed more revolutionary and exciting at its first performance in 1984, but that's a generation ago. I focussed in on the sound, as Nono intended, but then, like most regular concertgoers, I don't find it that hard to concentrate on music anyway. Deprived of the option to look at the performers or to understand how the sound was being produced, obliged to sit still for over 2 hours and hemmed in on all sides by sound, I found it hard also to understand how the work exemplified democracy or freedom. Perhaps it's simply a case of unreasonably raised expectations, but it all seemed like just another pleasant Friday night out.
Some programme notes.
III.b - Hölderlin from Prometeo
This (^) is a recording (not the performance I attended) of what is possibly the most 'accessible' part of the work.


text:
This week I have to make a program in Lisp that register a product by name, category and code, then save it in a .txt file.
The program must have a menu with options. The options are:
1. Create a product
2. Delete
3. Search by name
4. Search by category
5. Search by code
6. List sorted by name
7. List sorted by category
8. Save (must save in a txt. file using File I/O)
What I tried was create a list, then the user put the data (name, category and code). the program have to verify if the list already have the product, if doesn't, create it.
I don't how to use list functions, cause this is my first week learning this programming language, and my professor doesn't explain as well.
I need help to organize the list with products, cause I have no idea how to do search or list sorted by name or category. And I don't as well how to save in a txt file.


text:
Newbury Photo Booths -
Wedding and Event Photo Booths in Newbury MA
We now have the AMAZING MAGIC MIRROR as well as closed an open air photo booths. We are a premier photo booth company with 4hr event packages starting at just $695. We have everything you need to make... more photo booth info
941 recent listing referrals for Maine to Boston Photo Booth Rental
Enclosed and Open Air Photo Booth Rentals... more photo booth info
57 recent listing referrals for Atlas Photo Booths


text:
Bueche Real Estate
Located on the west bank of the Mississippi River, near the community of Erwinville, is the community of Bueche. Here you are hear to Airline Highway, and just a short drive from I-10. Near to this community are sporadically placed national chain convenience stores, gas stations, and grocery stores. If you're looking for a fun filled day of shopping, then take I-10 across the Mississippi River to the east bank into East Baton Rouge. Here you'll discover both indoor and outdoor shopping opportunities. The Cortana Mall offers national chain stores and places to dine. Just a short drive from there is The Mall of Louisiana, which offers locals and visitors the ultimate shopping experience. For bargain shoppers, The Flea Market is a family-friendly spot that features clothing, crafts, and food.
If you are interested in Bueche real estate expect to find beautiful spacious lots surrounded by mature greenery, and individualized homes set on well manicured yards. The homes for sale in Bueche range in size and are generally newly constructed properties that are one story and multi-level homes. Looking for a quiet community surrounded by beauty? Bueche is a rural community that offers scenic byways along Louisiana's natural backdrop.


text: Ela Stone is a contemporary Parisian label known for its strong, sensual jewellery, channeling the glamour and attitude of retro fashion. Alexandra Benitah left a career in finance to launch the label in 2006, quickly gaining recognition for her unique, unusual and wearable pieces. Chunky gold chains, lion head motifs, filigree cutwork and nature-inspired shapes are the hallmarks of Ela Stone rings. Eye-catching and statement making, each piece will transform a day or night outfit. Gold-plated brass provides a base for each design, while colourful, semi-precious gemstones add a high-octane twist.


text:
March 13, 2018
Download Movies
May 17, 2019
Ghayal Khiladi.Velaikkaran 2019 Hindi Dubbed 720p HD Full Movie Download Gayal Khiladi Velaikkaran 2019 New South Hindi Dubbed Movie 720p Download– This Movie South New Movie This Movie New South Dubbed Hindi Audio Movie Movie Information IMBD Rating:-7.4/10 Realese Date:- 7Jan 2019 Director:- Mohan Raja Actors:- Sivakarthikeyan, Fahadh Faasil, Nayanthara Movie Screenshot फिल्म कैसे […]
May 16, 2019
Mirzapur 2018 Hindi Season 01 Watch Online Mirzapur 2018 Season 1 Hindi Download. This Is Web Series Crime Series Bollywood. This Mirzapur Series All Part Download And Watch Online. Event Information Event Name: Mirzapur 2018 Hindi Season 01 Language: Hindi Genres: Comedy Quality: 720p HDRip Cast: Abhishek Banerjee, Sheeba Chaddha, Shaji Chaudhary Movie […]


text:
Seahawks cornerback Richard Sherman went to Stanford. Thus, he's smart. And better at life than Skip Bayless.
But Sherman swings and misses with an otherwise well-written item posted at TheMMQB.com in support of the position that NFL players should be paid for preseason games.
Here's the reality: The players already are paid for the preseason.
Not in their game checks, which as Sherman points out reflect a small percentage of their regular-season per-game pay. But when Sherman says "the only solution is to cut the players in on the profits," the truth is that they already are.
Under the 2011 CBA, the players get roughly half of every dollar generated, including the dollars earned in the preseason. Those revenues fund the salary cap, on which signing bonuses, roster-bonuses, and regular-season salaries are based.
Paying a player like Sherman for the preseason would consist of taking his regular-season base salary and giving it to him in 21 installments instead of 17. Either way, the total money would be the same because the available dollars for player salary are driven by all revenues — preseason, regular season, and postseason.
Actually, players who end up making it to the 53-man roster would end up getting less pay if full game checks were issued in the preseason, because the 37 players who are cut by the time the season starts would be siphoning off in the month of August bigger chunks of money that otherwise would go to the players who make the team from September through December.
Sherman also whiffs on the idea that a player like Giants safety Stevie Brown has been harmed financially by suffering a season-ending injury in a preseason game. Once he's placed on injured reserve, Brown will be guaranteed his full salary for all of the 2013 season. That's the same outcome for a season-ending injury in a game that counts.
If a player otherwise was destined to be cut by his current team and unwanted elsewhere, a torn ACL actually would represent a windfall — the player gets a full season of NFL salary for a season in which he otherwise would have been working at Target with half the guys who were drafted before Maurice Jones-Drew.
Sherman's third strike comes when he suggests as an alternative to paying the players to play in preseason games charging fans less to attend them. While there's nothing wrong with a little pandering to the paying customers, every dollar that isn't paid for preseason games is one less dollar from which the players get their cut. Thereby driving down the total money available for the salary cap.
All things considered, it was a subpar effort for a Stanford student. We can only wonder how much worse it would have been if Skip Bayless had written it.


text:
Python is a powerful, free, open source, general purpose, interpreted programming language. Python runs on a wide variety of platforms including Linux, Microsoft Windows (95/98/NT), Macintosh (including OS X), virtually every flavor of Unix, and many other platforms. Python is roughly comparable to Perl or Java, though it has several significant strengths (and a few disadvantages) over each. Python makes it very easy to write clean, maintainable, and powerful programs for a variety of tasks with minimum hassle.
This article is not a Python advocacy piece nor a general Python tutorial. There are already several excellent resources on the net for both tasks. In fact, one of the main joys of using Python is the well organized and ever useful Python web site. Few languages can boast such a wealth of clear and concise documentation gathered in one location.
For instance, you can go here for a summary of Python's features and comparisons to other popular languages. For a much more thorough introduction to general purpose programming in Python, please see the tutorial. Finally, you can obtain Python for your system here. (That is a generic download page and there may be easy to install packages available for your specific distribution or OS. See the end of this article.){mospagebreak title=Why should my next CGI project be in Python?} First of all, it should be stated that Python is a general purpose programming language. Though it is well suited for almost every type of web application, if you need a few simple SSI (server-side include) pages a language like PHP might be more suitable.
Perl is well known as the "King of CGI." Perl is uniquely suited as a text scanning and processing language, and its CGI related modules are extensive and well implemented. However, even an old-time Perl hacker will usually tell you that Perl really shines in one-person 'quickie' jobs that will never have to be maintained by another human being. The combination of Perl's line-noise-like syntax and "There's More Than One Way To Do It" philosophy often results in an unmaintainable mess of a program.
That's not to say that interesting and powerful applications can't be written in Perl. In addition, knowledge of the language itself is often necessary for cleaning up other people's messes. However, if you are starting a brand new web application, you should consider Python and its "There Should Be One Obvious Way To Do It" philosophy.
Python has a much cleaner syntax than most languages and object orientation is built right into the core. [Overt use of object features such as classes is entirely optional; Python can be used as a straightforward scripting language.] Python's clean, readable syntax is a blessing to new developers learning the language and also to people who have to maintain other people's code.
People developing with the Apache web server (and according to Netcraft, that's most of you) will be pleased to know about the mod_python module that embeds the Python interpreter directly into Apache, resulting in application execution speeds to rival Perl.
Lastly, Python has a very extensive, well documented and portable module library that provides a large variety of useful functions. The Internet-related collection is particularly impressive, with modules (Python function/class libraries) to deal with everything from parsing and retrieving URL's to retrieving mail from POP servers and everything in between. Other modules handle everything from GUI interfaces (using a variety of popular toolkits) to database access.{mospagebreak title=Your First CGI program in Python} In this section, I'm going to assume you have Python installed and have set up your web server to actually execute Python scripts (instead of, for example, sending the source code to the client.) There are so many variations of operating systems and web servers that I'm going to have to rely on you following the appropriate directions that came with your copy of Python.
A tip for Unix users: often a CGI script has to have the executable attribute set ("chmod +x script.py") and/or have a special extension or be in a special CGI directory. Consult your friendly local web administrator for details.
Please note that if you're using Apache, using mod_python is not absolutely necessary but is recommended for most applications. It doesn't affect anything in your program other than the (perceived) execution speed because it eliminates the start-up time for the interpreter with each connection.
Here is a (very) simple script to test your setup:
#!/usr/bin/python # Tell the browser how to render the text print "Content-Type: text/plainnn" print "Hello, Python!" # print a test string
Let's go over the script line-by-line to familiarize ourselves with the basic components of a Python script.
The first line is necessary for most Linux/Unix systems, but is harmlessly useless on all other systems. It is simply a signal to the shell that This Is A Python Program. You will need to change the path if Python is not installed in the usual place. (Sometimes it is in /usr/local/bin/python for example.) Other systems, such as Windows or Macintosh, will have to follow different procedures to inform the OS to execute this as a Python file. Since the first line begins with a # character, it is a comment and has no actual effect in the Python program itself.
Next we have another comment describing what the first line of actual code does: simply print a string (to "standard output") describing what kind of content follows. This is necessary for most browsers to know how to display the information. In this case it's just plain text, but we might want 'Content-Type: text/html' in the future. The 'n' is a special character that says "print a new line." Normally the print command will automatically add a newline for you, but in this case we need two (because that's what browsers expect.) The signals a special character. Use to actually print a slash.
Finally, we simply say hello to the world! Note that Python statements do not end with a semicolon or other punctuation, just a newline.
If everything went according to plan, visiting the URL of the above script should print "Hello, Python!" to your browser window.{mospagebreak title=Getting some real work done} Our little example script above didn't accomplish much real work, of course, but it was helpful (I hope) in making sure your web server is set up to run Python CGI scripts. Now we're going to delve into the nitty-gritty of writing a real CGI program in Python. It might be helpful to have the Python tutorial open in another window to refer to from time to time on matters of syntax or keywords.
The first thing that most web developers will want to know is how to get information out of HTML forms and do something with it.
Python provides an excellent module to deal with this situation. Coincidentally enough, the module is named cgi. So let me show you a simple example program that will gather information out of a browser form.
As you know, the data in HTML forms is referenced by the "name" attribute of each input element. For instance, this tag in a form: <INPUT TYPE=TEXT NAME=email SIZE=40> produces a 40 character wide text box with word "email" associated with it.
This information is passed to a CGI script by either one of two methods: GET or POST. However, the cgi module hides this complexity from the programmer and presents all form information as a Python fundamental data type; the ever-useful dictionary. Perl users will know this one as a "hash" (which sounds like more fun than a dictionary, but the word is less descriptive.) A dictionary is a type of array that is indexed by a string instead of a number.
For instance, if we had defined a dictionary called Bestiary, we could type something like this:
>>> Bestiary["Zebra"]
and Python might respond with:
"A black and white striped ungulate native to southern Africa."
[The little snippet above demonstrates an interesting and occasionally useful feature of Python: the ability to act as an interactive interpreter. ">>>" is the Python prompt. If you type an expression, as I did above, Python will print the return value. If you're only writing CGI scripts, you probably won't use the interactive interpreter much, but sometimes it does come in handy for debugging.]
Python's cgi module has a method (another name for a procedure or function) called FieldStorage that returns a dictionary containing all the form <INPUT>'s and their corresponding values.
If you know the specific item you want, you can easily access it:
import cgi The_Form = cgi.FieldStorage() print The_Form["email"].value
Note that just using The_Form["email"] returns a tuple containing both the field name and the value. When dealing with the dictionaries returned by cgi.FieldStorage, we need to be explicit in asking for the values in the forms.
Any generic method that works on dictionaries can be usefully applied. For instance, if you want to find out which keys are available on any given form, you might do something like this:
>>> The_Form.keys() ['name', 'email', 'address', 'phone']
or this:
>>> The_Form.values() ['Preston Landers', 'firstname.lastname@example.com', '1234 Main St.', '555-1212']
(Please note that Python will not guarantee any particular order for the keys() or values() methods. If you want that, use sort())
If you try to access a field that doesn't exist, this will generate an exception; an error status. If you don't catch the exception with an except: block, this will stop your script and the user will see the dreaded "Internal Server Error." Don't worry too much about it at this point because we'll be covering exceptions in great detail later on.
We can put these pieces together to write a simple program that prints out the name and value of each <INPUT> element passed to it. In this case, it's up to you to provide an actual web page that contains the form that points to this CGI script as its ACTION field. If you're not sure what I mean, don't worry, we'll go over forms again.
#!/usr/bin/python import cgi print "Content-Type: text/plainnn" The_Form = cgi.FieldStorage() for name in The_Form.keys(): print "Input: " + name + " value: " + The_Form[name].value + "
" print "Finished!"
As you can see, we used a simple for loop to iterate over each key, printing the key name, its value, and an HTML break to separate each line. Notice that blocks of code are set off by tabs in Python, not { } curlies like in C or Perl. When the indentation changes, as in the line that prints "Finished!," that signals the end of that code block.
We've also demonstrated the + operation for strings; as you might expect, + will concatenate (stick together) two strings. If you're not sure if the elements you're concatenating will be strings at runtime, use the str() or repr() methods. For instance:
{mospagebreak title=Defining a useful Display function} Since we've decided to build our Python application incrementally ("Oh have we?" you ask) rather than from some kind of master scheme, let's go ahead and define a function that might actually be useful to us. By the time this article series is complete, you will see how and why it is best to design an overall object framework for all but the simplest applications, rather than design from the ground-up like we're doing here for the purposes of instruction.
>>> NumberA = 55 >>> NumberB = 45 >>> print NumberA + NumberB 100 >>> print str(NumberA) + str(NumberB) 5545
We'll need a routine to actually display the content that we're going to assemble. This routine should take care of administrivia like the Content-Type line and basic HTML syntax like the  tags. Also, ideally, we want as little actual HTML in our Python program as possible. In fact, we want all this formatting stuff in an external file that can be easily modified and updated without delving into actual program code.
Your site probably has a standard HTML "style sheet" (even if you're not using actual CSS) that you're expected to follow. It would be a real pain to embed this HTML directly into your code, only to have to change on a daily basis. There is also the danger of accidentally modifying important program code.
So, we'll go ahead and define a simple template file that your Python scripts' Display() function will use. Your actual template will probably be much more complicated but this will get you started.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">   <META NAME="keywords" CONTENT="blah blah — your ad here"> <title>Python is Fun!</title>   <!– *** INSERT CONTENT HERE *** –>
The thing that should (hopefully) strike you about this template is the HTML comment
<!– *** INSERT CONTENT HERE *** –>. Your Python program will search for this comment and replace it with its goodies.
To perform this feat of minor magic, we will introduce a couple of new methods including file operations and regular expressions. Old Perl Hackers will rejoice to learn that Python includes complete and powerful regular expression (RE) support. The actual RE syntax is almost identical to Perl's, but it is not built directly into the language (it is implemented as a module.)
Those of you who are not Old Perl Hackers are probably wondering at this point what exactly are regular expressions. A regular expression is like a little mini-language that specifies a precise set of text strings that match, or agree, with it. That set can be unlimited or finite in size depending on the regexp. When Python scans a string for a given regular expression, it searches the entire string for characters that exactly match the RE. Then, depending on the operation, it will either simply note the location or perform a substitution. RE's are extraordinarily powerful in a wide range of applications, but we will only be using a few basic RE features here.
Please see the Regular Expression HOWTO for an excellent guide to using regular expressions in Python.
The basic tactic we're going to use to implement template support in our CGI script is to read the entire template file in as one long string, then do a regular expression substitution, swapping our content for that "INSERT CONTENT HERE" marker.
Here is the code for our
Display(Content) function:
import re # make the regular expression module available # specify the filename of the template file TemplateFile = "template.html" # define a new function called Display # it takes one parameter – a string to Display def Display(Content): TemplateHandle = open(TemplateFile, "r") # open in read only mode # read the entire file as a string TemplateInput = TemplateHandle.read() TemplateHandle.close() # close the file # this defines an exception string in case our # template file is messed up BadTemplateException = "There was a problem with the HTML template." SubResult = re.subn("<!– *** INSERT CONTENT HERE *** –>", Content,TemplateInput) if SubResult[1] == 0: raise BadTemplateException print "Content-Type: text/htmlnn" print SubResult[0]
Let's review some of the important features of this code snippet. First, reading the contents of a file into a string is fairly unremarkable.
Next we define a string called BadTemplateException that will be used in case the template file is corrupt. If the marker HTML comment cannot be found, this string will be 'raised' as a fatal exception and stop the execution of the script. This exception is fatal because it's not caught by an 'except' block. Also, if the template file simply can't be found by the
open() method, Python itself will raise an (unhandled, fatal) exception. All the user will likely see is an "Internal Server Error" message. The traceback (what caused the exception) will be recorded in the web server's logs. We'll go into more detail later about exceptions and how to handle them intelligently.
Next, we have the actual meat of this function. This line uses the
subn() method of the
re (regular expression) module to substitute our Content string for the marker defined in the first parameter to the method. Notice that we had to backslash the
* characters, because these have special meaning in RE's. (See the documentation for the re module for a complete list of special characters.) Our RE is relatively simple; it is simply an exact list of characters with no special attributes.
The second parameter is our
Content, the thing we want to replace the marker with. This could be another function as long as that function returns a string (otherwise, you'll get an exception.) The final parameter is the string to operate on, in this case, the entire template file contained in TemplateInput.
re.subn() returns a tuple with the resulting string and a number indicating how many substitutions were made. A tuple is another fundamental Python data type. It is almost exactly like a list except that it can't be changed; it is what Python calls "immutable." (From this we can deduce that lists can be modified "on the fly.") It is an array that is accessed by number subscripts.
SubResult[0] contains the modified result string (remember, programmers start counting from 0!) and
SubResult[1] contains the number of substitutions actually made.
This line also demonstrates the
method of breaking up long lines. If you put a single
character at the end of a line, the next line is considered a continuation of the same line. It's useful for making code readable, or fitting Python code into narrow HTML browser windows.
The next line of code says that if there weren't any substitutions made, this is a problem, so complain loudly by raising an (unhandled, fatal) exception. In other words, if our special "INSERT CONTENT HERE" marker was not found in the template file, this is a big problem!
Finally, since everything is okay at this point, go ahead and print out the special Content-Type line and then our complete string, with our Content inside our Template.
You can use this function in your own CGI Python programs. Call it when you've assembled a complete string containing all the special output of your program and you're ready to display it.
Later, we will modify this function to handle special types of Content data including objects that contain sub-objects that contain sub-objects and so on.{mospagebreak title=Putting the pieces together} Let's review what we've covered so far. We've learned how to get information from the user via a CGI form and we've learned how to print out information in a nicely formatted HTML page. Let's put these two separate bits of knowledge together into one program that will prompt the user with a form, and then print out the information submitted by that form.
We're going to go ahead and get fancy and use two templates this time … one, the same generic site template as before, and the other template will contain our form that will be presented to the user.
<FORM METHOD="POST" ACTION="sample1.py"> <INPUT TYPE=HIDDEN NAME="key" VALUE="process"> Your name:
 <INPUT TYPE=TEXT NAME="name" size=60>
 Email: (optional)
 <INPUT TYPE=TEXT NAME="email" size=60>
 Favorite Color:
 <INPUT TYPE=RADIO NAME="color" VALUE="blue" CHECKED>Blue <INPUT TYPE=RADIO NAME="color" VALUE="yellow">No, Yellow… <INPUT TYPE=RADIO NAME="color" VALUE="swallow">What do you mean, an African or European swallow?
 Comments:
 <TEXTAREA NAME="comment" ROWS=8 COLS=60> </TEXTAREA>
 <INPUT TYPE="SUBMIT" VALUE="Okay"> </FORM>
We'll use the same generic template file from before.
Here is the program itself:
#!/usr/bin/python import re import cgi # specify the filename of the template file TemplateFile = "template.html" # specify the filename of the form to show the user FormFile = "form.html" # Display takes one parameter – a string to Display def Display(Content): TemplateHandle = open(TemplateFile, "r") # open in read only mode # read the entire file as a string TemplateInput = TemplateHandle.read() TemplateHandle.close() # close the file # this defines an exception string in case our # template file is messed up BadTemplateException = "There was a problem with the HTML template." SubResult = re.subn("<!– *** INSERT CONTENT HERE *** –>", Content,TemplateInput) if SubResult[1] == 0: raise BadTemplateException print "Content-Type: text/htmlnn" print SubResult[0] ### what follows are our two main 'action' functions, one to show the ### form, and another to process it # this is a really simple function def DisplayForm(): FormHandle = open(FormFile, "r") FormInput = FormHandle.read() FormHandle.close() Display(FormInput) def ProcessForm(form): # extract the information from the form in easily digestible format try: name = form["name"].value except: # name is required, so output an error if # not given and exit script Display("You need to at least supply a name. Please go back.") raise SystemExit try: email = form["email"].value except: email = None try: color = form["color"].value except: color = None try: comment = form["comment"].value except: comment = None Output = "" # our output buffer, empty at first Output = Output + "Hello, " if email != None: Output = Output + "" + name + ".
" else: Output = Output + name + ".
" if color == "swallow": Output = Output + "You must be a Monty Python fan.
" elif color != None: Output = Output + "Your favorite color was " + color + "
" else: Output = Output + "You cheated! You didn't specify a color!
" if comment != None: Output = Output + "In addition, you said:
" + comment + "
" Display(Output) ### ### Begin actual script ### ### evaluate CGI request form = cgi.FieldStorage() ### "key" is a hidden form element with an ### action command such as "process" try: key = form["key"].value except: key = None if key == "process": ProcessForm(form) else: DisplayForm()
Notice that we defined the function Display() again. This isn't really necessary; in fact, it's a bad idea to cut-n-paste code from one script to another. A far better solution (which I will show you later) is to put all your functions that are common to multiple scripts in separate file. That way, if you want to improve or debug the function later, you don't have to hunt for each occurrence of it in all of your scripts. However, we can get away with it for this learning exercise.
Note that since Python is a dynamically interpreted language, functions have to be defined before they can be used. That's why the first thing this program does is define its functions.
The DisplayForm() function is very simple and uses the same principle as the Display() function (which it, of course, calls upon to do most of the hard work.) Using these kinds of functions rather than embedding static HTML forms will save you an incredible amount of aggravation. Sometimes, of course, you'll need to generate HTML on-the-fly; we'll talk about that later.
The ProcessForm() function has two main parts. The first extracts values from the <INPUT> fields of the form and stores them in regular variables. This is the section of your program logic where you validate the information in the form to make sure it is kosher by your application's definition.
It is a VERY bad idea to use form data provided by random people on the web without validating it; especially if you're going to use that data to execute a system command or for acting on a database. Naively written CGI scripts, in any language, are a favorite target for malicious system crackers. At the minimum, make sure form information doesn't exceed a certain appropriate length. Passing huge strings to external programs where they aren't expected can cause buffer overflows which can lead to arbitrary code execution by a clever cracker. We will be discussing security in greater detail in the next article. Fortunately, Python makes it easy to write scripts securely.
In our program, we enclose these validation statements in try: and except: blocks because if the value isn't present, it will generate an exception, which could potentially stop your program. In this case, we catch the exception if a given field was left blank (or simply not in the original form.) That variable will be assigned the None value, which has special meaning in Python. (By definition, it is the state of not having a value, similar to NULL in other languages.) A special case is the "name" field; we've decided that that field is absolutely required. If "name" is not given, then the program will use its Display() method to print a helpful message to the user: "Please go back and try again." It then raises the exception SystemExit, which in effect, stops the script then and there.
Once we have validated all of our form input, we can act on it however we choose. In this case, we just want to print a simple message acknowledging receipt of the information. We set up an empty string to use as a buffer for our output, and we begin adding to it. We can conditionally include stuff in this buffer depending on whether or not a value is defined is None. Sharp observers will note that we cheated a bit and put a little actual HTML directly in our code. Again, this is not ideal, but we can get away with it in this learning exercise. The next article in this series will address using objects to avoid the problems of embedding HTML directly in output statements.
The actual main part of the script follows the function definitions, and is very simple. We obtain the form, and conditionally execute one of our two action functions depending on the value of a hidden form element called "key". We know that if this key is present, and it is set to the value "process," we'll want to process the form. Otherwise, we'll just display the form. If you're not sure what I mean by hidden key, go back and look at our form.html template carefully.{mospagebreak title=Simple Database Access} The last thing we're going to learn about in this installment of our series on learning CGI programming in Python is how to make simple database queries. But instead of providing a complete demonstration program, I'm just going to give you a few code snippets for running SQL queries. You can combine these fragments with what you've learned about working with forms to make a useful web application in Python.
Python has a standard API (Application Programming Interface) for working with databases. The interface is the same for every database that is supported, so your program can work unmodified (in theory) with any common database. Currently, the Python DBI (Database Interface) supports most popular SQL relational databases such as mSQL, MySQL, Oracle, PostgreSQL, and Informix.
There is an excellent resource for people interested in interfacing Python program with databases: the Database SIG (Special Interest Group.)
This article will only cover simple read-only queries. In the next installment we'll cover more complex database operations.
While the programming interface is standardized across databases, it is still necessary to have the module that provides access to your particular database available to the Python interpreter. Often these modules are a separate download and are not included with the standard Python distribution. See the Database SIG mentioned above for instructions on obtaining the module for your database. The code that initializes the database connection will be somewhat dependent on a specific database, while the rest of the code that actually uses the database should work across all supported types of database.
Once you've installed the appropriate module on your system, make it available with an import statement.
>>> import Mysqldb
…loads the MySQL DBI module.
Now we want to initialize the database module by connecting to it. The database module must be given a string in a specific format containing the name of the database to use, your username, and so on. The format is "Database_Name @ Machine_Name User Password". If you don't know some of this information, you'll have to ask your friendly local database administrator.
For instance:
>>> import Mysqldb >>> SQLDatabase = "guestbook" >>> SQLHost = "localhost" >>> SQLUser = "gbookuser" >>> SQLPassword = "secret!" >>> connectstring = SQLDatabase + "@" + SQLHost + " " >>> connectstring = connectstring + SQLUser + " " + SQLPassword >>> connection = Mysqldb.mysqldb(connectstring) >>> cursor = connection.cursor()
Notice that the last statement returned a thing called a cursor. Coincidentally, we've also named the object that holds that 'cursor', but just as easily it could have been named 'bilbobaggins'. All database action is performed through a cursor, which functions as an active connection to the database. The cursor object that we obtained has a number of methods including execute() and fetchall(). execute() is used to actually execute SQL statements. Use fetchall() to get the results of the previous execute() as a list of tuples. Each tuple represents a specific record/row of the database.
Once you have the cursor, you can perform any SQL statement your database will support with cursor.execute(statement). Here is a simple example that will fetch all rows of a guestbook and display them as an HTML list. [Again, it's not a good idea to embed HTML directly into code like this; it's just an example.]
# get all entries from gbook table, ordered by time stamp myquery = "SELECT * FROM gbook ORDER BY stamp" handle.execute(myquery) Results = handle.fetchall() # fetch all rows into the Results array total = len(Results) # find out how many records were returned # we'll want a blank list to hold all the guestbook entries entries = [] if total < 1: print "There weren't any guestbook entries!" ### do something else here else: for record in range(total): entry = {} # a blank dictionary to hold each record entry["gid"] = Results[record][0] # field 0 = guestbook ID entry["stamp"] = Results[record][1] # field 1 = timestamp entry["name"] = Results[record][2] # and so on… entry["email"] = Results[record][3] entry["link"] = Results[record][4] entry["comment"] = Results[record][5] entries.append(entry) # add this entry to the master list # we'll pretend we set up an HTML table here… ### parse variables into table for entry in entries: print "
" + entry["name"] + "@" + entry["email"] + " said: " + entry["comment"]
Notice that we copied the information out of the Results list into a list of dictionaries. It's not absolutely necessary to do this; in fact it will slow down your program a tiny bit. The benefit to doing that is that you can access each column of a record by name, rather than the number. If you use the record more than once, it becomes much easier to keep the mnemonic names straight than arbitrary numbers. {mospagebreak title=Other Resources and Links} There are several good books in print on Python, including:
Internet Programming with Python (Watters, van Rossum, Ahlstrom; MIS Press): this one I personally own. Though it is slightly outdated, covering Python 1.4, most of the information is still relevant and useful. Provides a good tutorial on Python and lots of sample code for Internet applications. One of the co-authors is Guido van Rossum, the inventor of Python. Recommended, but due for a new edition.
Programming Python (Lutz; Oreilly & Associates): also slightly outdated, but highly recommended by people who have it. More of a reference than a tutorial.
Python Documentation: the starting point for all official Python documentation including the Library Reference.
The Python Tutorial: a gentle but effective introduction to Python.
The Python FAQ: many questions and answers about specific features and problems. Come here when you can't find your question answered in any other documentation.
Language Comparisons: also known as Python vs. Perl vs. Tcl vs. Java vs. the world. Most articles here are reasonably objective and balanced comparisons. Always pick the right tool for the job. Often, Python is the right tool.
Downloading Python for your platform. Both source code and binaries for a wide variety of platforms can be found there. However, if you are running a Linux distribution such as Debian or Red Hat it will be easier for you to obtain the appropriate package for your system from your distributor.
Regular Expression HOWTO: mastering those tricky but useful regexp's in Python.
Database SIG: a gathering place for people interested in and information pertaining to using tabular databases with Python.