text:
Cases of younger onset Alzheimer's disease growing
People as young as 30 are now being diagnosed with Alzheimer's disease, and the numbers are growing.
"We had planned, after the kids were gone, to go down to Staples, buy a map of the world and a box of flag pins, put that map up in the family room ,you know, and mark our travels," said Alan Holbrook, whose wife, Bernadette was diagnosed at 57 years old.
That was eight years ago.
The former teacher was a victim of younger onset Alzheimer's disease, a form of Alzheimer's that affects people younger than 65, but in hindsight, Holbrook said there were signs years before that.
"One day, I got a call at work. 'Come get her.' They couldn't trust her around kids anymore," Holbrook said.
Dr. Robert Stern is director of the clinical core of Boston University's Alzheimer's Disease Center.
"The disease starts around 15 to 25 years before the first symptoms, and it's only when enough brain tissue gets devastated by the disease that the symptoms begin," Stern said.
Right now, 5½ million Americans have Alzheimer's disease. As few as 1-in-25, or as many as one-in-10, could suffer from younger onset.
"It's probably more. That's just my hunch," Stern said.
The younger someone gets it, the faster Alzheimer's seems to progress. Researchers don't know why.
"The course is much more rapid." Stern said.
"She (had) no cognitive ability. She (had) no vocal ability," Holbrook said. "The heart (was) still beating in that body, and it's still taking breaths, but my wife's (was) not in there anymore," Holbrook said.
"When it starts having an impact on someone's life, earlier in their life, in their 50s, early 60s, it has a bigger impact," Stern said. They want to have this full life ahead of them. They have dreams."
"If nine years ago you had asked me if I thought any of this kind of stuff was going to happen to me, I would of laughed at you. A year later, and in the eight ensuing years, I don't laugh anymore," Holbrook said.
Holbrook's wife passed away on Memorial Day.

subset: commoncrawl


text:
Pentax Optio S7 Digital Camera Announced
The Pentax Optio S7 is a new addition to the slim and stytlish S line of Pentax Optio cameras. A successor to the S6, the S7 features a 7 megapixel sensor, 2.5 inch LCD (with 232K pixels), 3x optical zoom, and some of Pentax' newer technologies, like Face Recognition AF & AE. The S7 will be available on a limited basis in September for under $300.
The Face Recognition technology from Pentax detects faces within a portrait to correctly set focus and exposure on the face. Having this technology simplifies portrait-taking since you have less of a chance of missing the focus point, which should be the face. The camera also has the Tracking AF system seen on some of their other cameras announced at PMA in February, like the Optio T10.
The S7 also features a Blur Reduction High ISO mode. In this mode, the ISO (sensitivity) of the sensor is boosted, up to ISO 1600, to increase shutter speed and reduce the blur. Note that in this mode, the sensor resolution is bumped down to 4 megapixels in order to attempt to control noise that occurs that high ISO values.
Additionally, the S7 captures movies up to a resolution of 640×480 at 30 frames per second with an MPEG-4 DivX format and has 23MB of internal memory. It is the first Pentax compact camera that is able to use the recently announced SDHC format, in addition to your standard SD format cards. (SDHC allows memory card capacities over 2GB by using a FAT32 file system.)


text:
Birth Announcement
Congratulations on the birth of your baby. We would like to announce the good news. We are excited to share your news in the Malvern Daily Record. The cost for submitting your announcement is free up to 50 words with no photo. If you would like to include a photo, the cost will be $10.00 in our Wednesday through Saturday publication and $13.00 in our Tuesday publication. Fill out the form below and click Submit. A newspaper representative will contact you to confirm your order and to make any necessary adjustments. If your birth announcement is more than 50 words, please contact our lifestyles department for cost. Announcements will be published within 30 days of receiving your payment. Announcements are subject to editing.


text:
The 2010 edition of the LLVM Developer's Meeting has come and gone, and it was a great event. It featured 17 great talks, several BOF sessions, and lots of informal discussions between all sorts of people interested in LLVM and its subprojects. Lang Hames wrote up a great summary of his experience at the meeting.
Unfortunately, there was more people who wanted to attend than we were able to accomodate, but fortunately the slides and videos of all the talks are available the web page. Many thanks go our to our sponsors: Apple, QuIC, Google, Qualcomm.
Happy holidays,
LLVM Project News and Details from the Trenches
Thursday, December 23, 2010
Subscribe to: Posts (Atom)


text:
Napoli, Wood could be answers
Vladimir Guerrero is gone for a long spell with his torn pectoral muscle. It might be mid-June before we see him swing a bat again with meaning. Something needs to be done to generate more power, more force, in the Angels' lineup. But it doesn't necessarily require a deal.
The Angels need to at least try to make better use of two potentially lethal weapons already at their disposal: Mike Napoli and Brandon Wood.
With Guerrero out, this would be an ideal time to see what Napoli can do as a designated hitter. My feeling is that he's a natural-born slugger who would emerge as a consistent power source once he's liberated from the taxing physical demands of catching. That job beats a guy up, drains him. There have been few players like Johnny Bench, who played in an era when games were much shorter and strike zones were larger, meaning fewer pitches to call and absorb.
Jeff Mathis is a superior receiver, as athletic as any catcher I've seen. Playing regularly, he'll hit in the .250 range with some power. Napoli as DH is an idea whose time has come. With his long swing — we've seen what he can do when he's locked in — he could be 35-homer, 110-RBI guy.
Which brings us to Wood. We'll never know what Brandon can do until he gets a shot at some consistent playing time. His power is as real as Napoli's. Brandon made big strides this spring in selectivity and discipline. He looks ready to become a solid player, perhaps a big-time run producer. And there is nothing at all wrong with Wood's defense, at shortstop or at third base. There must be a way to work Wood into the rotation on the left side of the infield.
As this is written, we're 15 games and six innings into the season. The Angels have 12 home runs — six by Torii Hunter, three by Napoli, three by everybody else.
Wood had four home runs and eight RBIs in seven games at Triple-A Salt Lake, batting .346. Bobby Wilson, who would be summoned as the backup catcher, is hitting .300 and slugging .733 with three homers and six RBIs in eight games.
The Angels are carrying 12 pitchers. Eleven should be enough. If you're using your 12th guy, it's pretty much a lost cause anyway.
6 Comments
I completely agree with this thought. We know that we have challenges with our pitching. We've looked for a spark and have been left searching.
Maybe a different approach can produce something?? We have prospects that need and deserve a chance to do something. As well as Aybar played in the offseason, I've yet to see anything from him and I think we've lacked since Cabrera was traded for Garland. Wood needs to be given a chance and can hopefully generate more offense to take some pressure away from our pitching staff.
Why not let Napoli DH and have Mathis catch?? Use your resources where they can achieve more success. It's obvious that we've been pressing too much.
I like the OF set with Abreu, Hunter, and Jr.
I like Morales at 1st and Howard at 2nd.
I've never been hot on Figgie at 3rd. He's a little better than adequate defensively; he has to be in the lineup. He'd be better at 2nd, but Howard can't move. So Figgins stays at 3rd. That leaves SS . . . where Aybar can be solid, but won't hit like Wood. That means Wood should play.
For me, Izturis and Aybar could be dealt. With Figgie out of position (at 3rd) and Brown ready, both of those role players could go. Along with Rivera and Quinlan for a pitcher who can make a difference (Peavy). If one of the 3 hurt starters doesn't come back .. they are still one short. Escobar is a crap shoot at best. It's not like he was indestructible before…
I think they made a substantial mistake trying to get through this 6-8 weeks with resources from within. They've fouled up their rotation AND bullpen, compromising the year. Moseley's on the DL; Oliver is on the DL; Shields is post-WBC and a mess. They did NOT have the depth to deal with this, even had Nick not been tragically lost. Stretching like this has put a huge burden on the entire organization. Now they are going to rush Ortega into the breech. Loux is horrid. This is a BAD way to start the year.
The Angels have a wonderful offensive potential. They could begin to score enough runs to soften this all a bit. But holding in to Izturis, Wood, Brown, Rodriquez, Figgins, Kendrick, and 5 catchers at the top three levels of the system are luxuries this team cannot afford this year. It's not time to panic. But it is time to fall out of love with professed strategies and go fill needs, before they get buried.
I'm not hot on the Napoli at DH and Mathis behind the plate notion. I'd rather that Nap catches a reasonable amount so that Wood can get the ABs at DH. Then when Mathis rests Nap, he can go to DH. I don't see the point of trading Wood's bat for Mathis' bat . . . though I do understand the issue about the rigors of catching AND I know that Mathis is a bit better defensively. IF Napoli's hitting seems to be negatively impacted by catching, then I'd agree. I don't see it (but I'm not there like Lyle is).
let's take a look at how many wins the Angels have gotten this year, AND how many of them have been caught by MATHIS! I believe they have only lost one when Mathis had been catching and have ONLY won ONE when Napoli had been catching AND we ALL know NAPOLI has been catching more. I have been saying this from the beginning when the season started, let Nap DH and let MATHIS do the catching. MATHIS is much more solid defensively and with more ABs he could be a productive hitter, yeah he doesn't have the power that Nap does, AND that's why NAP should DH! They need to change something becuase it seems also the pitchers work better with MATHIS and their ERA is lower when he catches because I believe he calls a better game. They need to change something because right now it's not working…
It's time for Brandon Wood to play everyday! Take Aybar and put him on the bench! Aybar is struggling and adds nothing to the offense. As for his defense, well, lets just say it's terrible to say the least.
Brandon can add power and, hopefully, a consistent swing to the Angels lineup!
There's more than one way to keep both Figgins and Wood in the lineup at the same time. It seems to me that Figgins could be playing left-field, and Wood could be at 3B. Or alternatively, Wood could play shortstop (he is one), and Figgins could remain at third.
Figgins 3B
Abreu RF
Napoli DH
Hunter CF
Kendrick 2B
Morales 1B
Rivera LF
Wood SS
Mathis C
Figgins LF
Abreu RF/DH
Napoli C
Hunter CF
Kendrick 2B
Morales 1B
Rivera DH/RF
Wood 3B
Aybar/Izturis SS
With Napoli's high on-base average, ability to take pitches, and power, I don't see why he isn't an everyday three-hole hitter for us.
It comes down to an infatuation with Aybar and Izturis. UZR doesn't think either are defending well, and they don't hit or get on base enough to deprive Wood of at-bats at this point. They should be on the field half-time at best.
Hey Lyle,
What is going on with my favorite team. Fuentes is not K-Rod. Boston has alot of young arms that could be closers just like Papelbon. I say trade Brandon Wood to the Red Sox for Michael Bowdon or Masterson.. Good columns Lyle


text:
Town of Herndon, VAHome Menu
Departments » Communications & Economic Development
Request Public Records (FOIA)
The Virginia Freedom of Information Act (FOlA) is set out in § 2.2-3700 et seq., of the Virginia Code. It guarantees citizens of the Commonwealth and representatives of the media access to public records held by public bodies, public officials, and public employees.
A public record is any writing or recording -- regardless of whether it is a paper record, an electronic file, an audio or video recording, or any other format -- that is prepared or owned by, or in the possession of a public body or its officers, employees or agents in the transaction of public business. All public records are presumed to be open, and may only be withheld if a specific statutory exemption applies.
The policy of FOIA states that the purpose of FOIA is to promote an increased awareness by all persons of governmental activities. In furthering this policy, FOIA requires that the law be interpreted liberally, in favor of access, and that any exemption allowing public records to be withheld must be interpreted narrowly.
The Code of Virginia allows any public body to withhold certain records from public disclosure. The town commonly withholds records subject to the following exemptions:
- Personnel records (§ 2.2-3705.1 (1) of the Code of Virginia)
- Records subject to attorney-client privilege (§ 2.2-3705.1 (2)) or attorney work product (§ 2.2-3705.1 (3))
- Vendor proprietary information (§ 2.2-3705.1 (6))
- Records relating to the negotiation and award of contracts, prior to a contract being awarded (§ 2.2-3705.1 (12))
- Police investigative files (§ 2.2-3706 (A) (2) (a))
- Land purchase or sale records prior to the transaction being concluded (§ 2.2-3705.1 (8))
You may have to pay for the records that you request from the town. A public body may make reasonable charges that do not exceed its actual cost incurred in accessing, duplicating, supplying, or searching for the requested records. The town cannot impose any extraneous, intermediary, or surplus fees or expenses to recoup the general costs associated with creating or maintaining records or transacting the general business of the public body. Any duplicating fee charged by a public body shall not exceed the actual cost of duplication. All charges for the supplying of requested records shall be estimated in advance at the request of the citizen as set forth in subsection F of § 2.2-3704 of the Virginia Code.
If town staff estimates that it will cost more than $200 to respond to your request, you will have to pay a deposit, not to exceed the amount of the estimate, before proceeding with your request. The five days that the town has to respond to your request does not include the time between when the deposit is requested and when you respond.
You may request that town staff estimate in advance the charges for supplying the records that you have requested. This will allow you to know about any costs upfront, or give you the opportunity to modify your request in an attempt to lower the estimated costs.
If you owe the town money from a previous FOIA request that has remained unpaid for more than 30 days, the town may require payment of the past-due bill before it will respond to your new FOIA request.
To request records from the town, you may contact the town's Chief Communications Officer, at firstname.lastname@example.com or 703-435-6800, ext. 2010.
To request records from the Herndon Police Department, you may contact the police's Public Information Officer, at 703-435-6881, ext. 2332, or email@example.com.
You may request records by mail, fax, e-mail, in person, or over the phone. FOIA does not require that your request be in writing, nor do you need to specifically state that you are requesting records under FOIA.
- From a practical perspective, it may be helpful to both you and the person receiving your request to put your request in writing. This allows you to create a record of your request. It also gives us a clear statement of what records you are requesting, so that there is no misunderstanding over a verbal request. However, we cannot refuse to respond to your FOIA request if you elect to not put it in writing.
Your request must identify the records you are seeking with "reasonable specificity." This is a common-sense standard. It does not refer to or limit the volume or number of records that you are requesting; instead, it requires that you be specific enough so that we can identify and locate the records that you want.
Your request must ask for existing records or documents. FOIA gives you a right to inspect or copy records; it does not apply to a situation where you are asking general questions about the work of the town, nor does it require the town to create a record that does not exist.
You may choose to receive electronic records in any format used by the town in the regular course of business.
- For example, if you are requesting records maintained in an Excel database, you may elect to receive those records electronically, via email or on a computer disk, or to receive a printed copy of those records.
If we have questions about your request, please cooperate with staff's efforts to clarify the type of records that you are seeking, or to attempt to reach a reasonable agreement about a response to a large request. Making a FOIA request is not an adversarial process, and we may need to discuss your request with you to ensure that we understand what records you are seeking.
In addition, the Freedom of Information Advisory Council is available to answer any questions you may have about FOIA. The council may be contacted by email at firstname.lastname@example.com, or by phone at 804-225-3056 or [toll free] 1-866-448-4100.
The general policy of the town is to invoke the personnel records exemption in those instances where it applies to protect the privacy of employees and officials of the town.
The general policy of the town is to invoke the contract negotiations exemption and the purchase or disposition of real estate exemption whenever they apply to protect the town's bargaining position and negotiating strategy.
The general policy of the town is to invoke the investigative files exemption for applicable police records as necessary to protect the privacy of crime victims and witnesses and to avoid harming investigations or prosecutions.
The general policy of the town is not to release legal records exempt under § 2.2-3705.1 (2) or § 2.2-3705.1 (3).
Virginia law prohibits the release of tax records covered by Virginia Code § 58.1-3 from being disclosed.
The town reserves the right to utilize any exemption provided under the Freedom of Information Act.
The town must respond to your request within five working days of receiving it. "Day one" is considered the day after your request is received. The five-day period does not include weekends or holidays.
The reason behind your request for public records from the town is irrelevant, and you do not have to state why you want the records before we respond to your request. But, as a practical matter, sometimes it can make it easier to respond to your request if staff understands your goals. FOIA does, however, allow the town to require you to provide your name and legal address.
FOIA requires that the town make one of the following responses to your request within the five-day time period:
- The town provides you with the records that you have requested in their entirety.
- The town withholds all of the records that you have requested, because all of the records are subject to a specific statutory exemption. If all of the records are being withheld, the town must send you a response in writing. That writing must identify the approximate volume and subject matter of the records being withheld, and state the specific section of the Code of Virginia that allows the town to withhold the records.
- The town provides some of the records that you have requested, but withholds other records. You must be provided with a written response stating the specific section of the Code of Virginia that allows portions of the requested records to be withheld.
- The town informs you in writing that the requested records cannot be found or do not exist, (the town does not have the records you want). However, if the town knows that another public body has the requested records, it must include contact information for the other public body in its response to you.
- If it is practically impossible for the town to respond to your request within the five-day period, the town must state this in writing, explaining the conditions that make the response impossible. This will allow seven additional working days to respond to your request, providing a total of 12 working days to respond to your request.
If you make a request for a very large number of records, and town staff cannot provide the records to you within 12 working days without disrupting other organizational responsibilities, the town may petition the court for additional time to respond to your request. However, FOIA requires that the town make a reasonable effort to reach an agreement with you concerning the production or the records before going to court to ask for more time.
The following is a general description of the types of records held by the town:
- Personnel records concerning employees and officials of the town.
- Records of contracts that the town has entered into.
- Law enforcement records held by the police department.
- Land development records maintained by the community development department.
- Records of Town Council actions, such as contracts, ordinances, resolutions and minutes, in the town clerk's office.
- Records relating to public improvement projects held by the public works department.
You have the right to request to inspect or receive copies of public records, or both.
You have the right to request that any charges for the requested records be estimated in advance.
If you believe that your FOIA rights have been violated, you may file a petition in district or circuit court to compel compliance with FOIA. Alternatively, you may contact the FOIA Council for a nonbinding advisory opinion.


text:
The boldest and best idea in Gov. Jerry Brown's budget is his plan to eliminate redevelopment agencies and instead give local governments more power to raise taxes to pay for local economic development. This is exactly the kind of structural reform California needs -- making government more rational, more accountable and simpler by giving local communities the power to spend money and the responsibility to raise revenues as they see fit. That's how most states -- particularly the ones who have less profound fiscal problems than California -- set up their fiscal systems.
Not coincidentally, this is the piece of Brown's budget that will be most difficult to enact.
That's because the people who would benefit from this style of reform most -- local governments -- are the ones rising to oppose it. They say they will fight this proposal in the legislature, on the ballot and in the courts. (Here is an interesting look at the constitutional problems that could face this kind of reform -- take careful note of the fact that it is voters themselves that created the main obstacles to reform).
Why do locals oppose something that would enhance their power and responsibility? Because they like free lunches. And redevelopment agencies are, in a narrow way, such a lunch. They provide an easy way for politicians -- with money from the state -- to grab land and hand it over to developers (who not coincidentally fund local political campaigns). A system in which politicians themselves had to both spend money and to make the case for tax increases to fund economic development would require more work.
The Brown proposal, if enacted, also would require more accountability than the redevelopment system. There is little evidence that redevelopment agencies produce real economic growth, in part because local governments have little incentive to be careful about the decisions they make. But if local officials were the ones who had to ask for the tax increases for economic development projects, it stands to reason they'd ask better questions about projects -- and only push forward projects for which the benefits were very clear.
Brown's approach to redevelopment agencies should be the standard approach to all local services and revenues. Make the local government that spends the money on a program find a way to pay for it by setting tax rates. Common sense reform in that direction should be a no brainer. The fact that Brown's attempt to dip his toe in this water has drawn such quick and strong opposition shows just how profound California's problems are, and just how hard real reform will be.


text:
CHICAGO – Ed Nixon tried to craft his best composed, politically correct, answer, but teammate Brandon Rozzell wasn't having any of it. As Nixon tried to describe how it felt to be headed to the Sweet 16, the first such trip in VCU history, Rozzell – amidst a jubilant locker room celebration – butted into the conversation.
"Woooooowwww. Wow," Rozzell blurted.
Far from an eloquent, but dead on in its raw emotion and simplicity, Rozzell's sentiment was essentially perfect. Wow.
Playing their third NCAA Tournament game in five days, the 11th-seeded Rams shot 57 percent from the field to shred third-seeded Purdue's vaunted defense in an NCAA Tournament third round 94-76 victory.
Make no mistake, this was the biggest win in VCU history. There's room for you to debate whether Eric Maynor's "Dagger" against Duke was a more memorable moment or whether the powerhouse squads of the J.D. Barnett era in the early 80's were better from top to bottom, but there is no dispute that Sunday's victory was the program's greatest.
Superior defense keyed VCU in first and second round wins over USC and Georgetown, respectively, but the Rams' triumph over Purdue highlighted a multifaceted, up-tempo offense clicking on all cylinders. The Boilermakers boasted one of the top defenses in the Big Ten and had allowed more than 80 points once this season, but the Rams made Purdue look ordinary, and, at times, even helpless.
VCU pounded the ball inside with deadly efficiency, scoring 48 points in the paint. In Friday's victory over Georgetown, the Rams scored just six baskets inside the 3-point line. On Sunday, 29 buckets came from inside the arc. The Rams attacked Purdue All-American forward JaJuan Johnson relentlessly, a strategy that paid off in spades. In addition to senior forward Jamie Skeen, who had 13 points, the Rams also received 18 points in 19 minutes from freshmen post players D.J. Haley and Juvonte Reddic.
"It's just an aggressive style, an attacking style and also, we knew that Johnson wanted to play pretty much the whole game," said VCU Coach Shaka Smart. "I think he's fouled 50-something (51) times this year. He doesn't have a lot of fouls, so we wanted to go at him inside and their other bigs and see whether he was going to stand up to us and foul us or let us shoot layups."
At the center of VCU's well-oiled offensive machine was senior point guard Joey Rodriguez, whose masterful, 12-point, 11-assist, zero-turnover performance would've left Maynor wide-eyed. Given the level of opponent and the stage, Rodriguez's effort belongs among the best in school history.
In this tournament, Rodriguez has been magnificent running the VCU offense. In three games, he's handed out 23 assists against just three turnovers, a jaw-dropping assist-to-turnover ratio of better than 7-to-1.
"I was interviewed a couple of days ago and they asked about Joey and I said that he's one of the best point guards in the country, in my opinion," said Nixon, who scored 11 points and handed out six assists. "He came out and played a hell of a game."
Rodriguez's flawless direction of VCU's attack, combined with a deep stable of scorers, essentially ran Purdue out of the United Center. VCU had six players score in double figures and the Rams' bench outscored Purdue's 29-5.
The Rams trailed, 18-13, after a Johnson jumper with 12:38 left in the first half, but embarked on a 13-0 run moments later to take a 36-24 lead that proved insurmountable.
"We attacked them," Rodriguez said. "Coach told us before the game to attack them and play loose and that's what we did. You don't want to play on your heels and tonight we didn't play on our heels at all. We attacked them and made plays and we've got guys who can make shots and that's what happened."
But there's more wow factor to be had. There's more than just history, stunning offensive outbursts and delightful point guard play. Perhaps the hardest fact to believe, or just the most impressive, is that VCU hammered three teams from the Pac-10, Big East and Big Ten, respectively, by an average of 16 points per game over a five-day span.
"On a neutral floor, VCU can beat any team in the country," said Purdue Head Coach Matt Painter.
That's a bold statement about a team that wasn't even supposed to be here. The Rams lost five of their final eight games, including heartbreakers at Drexel and to James Madison. Both Old Dominion and George Mason won in convincing fashion of VCU's home floor during that stretch as well.
VCU's inclusion in the field drew the ire of a handful of ESPN pundits. Those comments did little to distract the Rams. Instead, they served as a rallying cry and narrowed VCU's focus. From the time the Rams touched down in Dayton for their "First Four" game with USC, until the moment they stepped back onto their team charter flight in Chicago, VCU looked like one of the best teams in the country, bar none.
"We don't want to end on a loss, especially not letting analysts be right," said Skeen. "They've all been rooting against us and telling us, saying that we're going to lose to USC, we were going to lose to Georgetown and Purdue, so we just don't want them to be right.
"They said we wasn't supposed to be here. Look at us."
But the Rams' stellar play isn't just an act of defiance. Their NCAA Tournament dreams once seemed dashed, that is, until the Rams' saw VCU appear in that bracket on Selection Sunday.
"This is new life," Nixon said. "It's like, you appreciate every moment, every possession. So, we're just living it up, man."
"I think we lost focus sometimes on the road and against certain opponents we weren't as focused as we should've been," said Bradford Burgess, who led VCU Sunday with 23 points. "But I think this time around, with our second chance we didn't want to end the way we did. We've had an extreme amount of focus and determination to win game and play our style of play."
With Sunday's win, VCU became THE story of this year's NCAA Tournament. But these March darlings aren't ready for the ride to end. There's a date with another Cinderella, 10th-seeded Florida State, waiting in San Antonio Friday evening.
"It feels amazing. I'm excited that we're here, but I'm not satisfied, because we've got some more winning to do," Skeen said. "I'm trying to make more history. I'm trying to go deeper. I'm not satisfied."
While there may be more March madness in store for the Rams, the most memorable week in VCU Basketball history ended the way it began, with a wow.


text:
These files (referred to as the Local and Family History Vertical Files) have been donated to the Newberry by genealogists, their families, or genealogy societies. They include an eclectic mix of materials such as copies of original records, research notes, correspondence, newspaper clippings, personal diaries, and bibliographies.
The vertical files do not have call numbers. To request a file, write "vertical file" in the call number box and the surname or place name in the title box on the standard yellow call slip. Turn these slips in at the second-floor circulation desk.
If you have questions about this collection or would like a librarian to check the vertical file catalog for a specific place name, Contact a Librarian.
View the Single Folder Files, Surnames with a Box or More, or Family Papers in Special Collections.


text:
Army: Shooter injured self, no others at base in Fort Lee, Virginia
FORT LEE, Va. >> A soldier with a gun inside a major command's headquarters turned the weapon on herself, causing an injury, but didn't wound any others as a heavily trafficked Virginia Army base temporarily went on lockdown Monday morning.
Early reports indicated the soldier fired one shot inside the four-story building that is the headquarters for the Army's Combined Arms Support Command, according to an Army news release. The command is responsible for training more than 180,000 students annually, and Fort Lee is the Army's third-largest training site.
The shooter was taken to Virginia Commonwealth University Medical Center and her condition wasn't known, according to the Army. VCU confirmed that it received a patient from Fort Lee but did not give other details.
The Army statement did not identify the shooter. Army officials were expected to provide a statement to reporters at a news conference later in the day.
Army officials initially labeled the incident an "active shooter" situation. The Department of Homeland Security uses the term to describe someone actively trying to kill people, usually in populated areas, with no pattern of choosing victims.
The shooting is the fourth violent act at a Virginia military installation this year. In March, a civilian truck driver shot and killed a sailor aboard a Navy destroyer at Naval Station Norfolk before he was shot and killed by Navy security.
In June, authorities said a sailor repeatedly stabbed another near Naval Medical Center Portsmouth. The same installation was placed on lockdown in April when a sailor shot and killed himself inside a barracks there.
Fort Lee is 25 miles south of Richmond and 130 miles from Washington. Its daily population is about 34,000, with members from all branches, their families, civilians and contractors. The Army website also cites enormous growth and renovations at Fort Lee over the past decade as a result of realignment and closures of bases across the U.S.
The lockdown came days after Fort Lee announced in its official newspaper that a new mass warning and emergency notification system was going to be activated in the coming weeks. It wasn't immediately clear whether that notification system was used. Soldiers had to register their contact information with the system, which allows users to input land line and cell phone numbers, email addresses or a pop-up alert on any computer that's part of the main Fort Lee network, and a faxed message, the newspaper said.
Associated Press writer Brock Vergakis contributed to this report from Norfolk.


text:
Zingku? Jaiku? I Feel Like I'm Taking Crazy Pills!
Zingku, Jaiku. Jaiku, Zingku. Sounds like the makings for a reprise of David Letterman's infamous Academy Awards "Oprah, Uma" gag. But really, they're the names of Google's latest acquisitions in the wireless communications space.
In late September Google purchased mobile social-networking start-up Zingku. Now it's gone and bought Jaiku, a Finnish company that offers an "activity stream and presence-sharing service" similar to the more widely known Twitter. Two months. Two mobile social-networking start-ups. Google never explained its plans for Zingku. What's it going to do with Jaiku? Who knows …
"We plan to use the ideas and technology behind Jaiku to make compelling and useful products," product manager Tony Hsieh wrote in a post to Google's corporate blog this afternoon. "Although we don't have definite plans to announce at this time, we're excited about helping drive the next round of developments in Web and mobile technology."
Ah. Helping to drive them the way you drove Dodgeball? To that happy place where social-networking apps go to die? Kidding, of course.
Anyway … Why did Google choose Jaiku over Twitter, a similar company with far greater brand recognition? "The answer seems pretty obvious to me," says Tim O' Reilly. "Jaiku isn't a 'lifestreaming' company per se. They are a mobile company in the business of creating smarter presence applications. Far from being a runner-up behind Twitter, they are a leader in a category most people haven't fully grasped yet. Google is clearly thinking a lot about mobile, and so they do grasp it."
Of course, there's another answer to that question as well. Twitter founder Evan Williams, whose previous company, Blogger, was acquired by Google in February 2003, may not have wanted to see another of his creations doomed to irrelevance by the search giant.
Which is not to say Twitter won't be acquired. As RedMonk analyst James Governor points out, the company is probably looking pretty good to Yahoo right now. "Google and Yahoo are in dueling acquisition mode, and Yahoo is almost certain to respond," said Governor. "Especially since Twitter has begun to use a footer on SMS messages it sends out–which could of course be used as a microbillboard."


text:
That was a super clip Rob, thanks. And the one after it with Albert Watson was a cracker, too!W
Walter, I chickened out.I think life's grim enough already! I'm afraid I seek beauty and brighter, not more depression to add to the sack that I can bring along to the party as it is.Frankly, either she or I have problems. I'd imagine, possibly both.;-)Rob C
Why have we all forgotten about him?http://www.loustettner.comRob C
A link to multiple photographers. Mostly documentary, with maybe an occasional hint of street.
Nice work Rob,I have seen him before. The video is interesting but reinforces my firmly held belief that photographers should not be allowed to speak particularly about themselves.


text:
Veteran gets his diploma 72 years late
At a very special graduation ceremony Friday morning, a veteran received his 72-years overdue diploma.
Dressed from head to toe in their green caps and gowns, the North High School class of 2013 walked across the stage to accept their diplomas.
"It makes me feel my age a little more, walking around with all these young people and being on my feet," said Vernon Young.
But for one graduate, a diploma has been more than 7 decades in the making.
"It's kinda tying up one loose end that's been out there," said Young.
Young was going to graduate in the spring of 1942, but on December 8, 1941, one day after Japan attacked Pearl Harbor, Young's plans quickly changed.
"I officially went in January 16th of '42," said Young.
That's when Young was deployed and started to fight for the United States Navy.
"I had the necessary credits so that was taken care of but I never received a diploma," said Young.
In front of a packed auditorium with his family and friend by his side and dressed in his cap and gown, Young was given an honorary diploma.
Now the United States Navy veteran can finally say he, too, is a North High School graduate.
Vernon's older brother, Marion, graduated from North High in 1939. He was also honored Friday morning.
Marion was killed, along with 133 other American Service members, in Pearl Harbor. A kamikaze pilot crashed his plane onto the deck of their ship.


text:
See More Photos PornXN Exclusive Photo Samples PornXN is the most extreme hardcore network in the world featuring hardcore fisting and many more crazy things!
Watch All Scenes Top Scenes from PornXN All Streamed In Crystal Clear HD Format In Various Formats
PornXN features the hottest girls in the dirtiest extreme action!EXPLORE
Constant updates New exclusive videos and photos
Our site is daily updated with 2 new exclusive hardcore porn scenes.JOIN NOW
Member benefits The only one of its kind!
PornXN offers you the best of the best:


text:
An Introduction to Compiler Design - Part II - Parsing
A. Introduction
Welcome to part II of the compiler design tutorial! (See part I) Parsing is a pretty complex subject, so the examples I will present are basic but good enough for you to see how you can extend them to support a progamming language. We'll parse a conditional statement (if/then), arithmetic statements, and a few others.
After the source code has been tokenized, the parsing phase commences. At the end of this stage, if the source code is syntactically valid, the compiler has generated either (1) an abstract syntax tree (AST) or (2) a syntax-directed translation (SDT) of the source code. These are known as immediate representations (IR). They are forms that can be optimized easily and later translated into assembler code. An AST is a simpler form of the source code that represents the syntactical structure of the code, and SDT is an assembler-like language that closely represents the actual layout of runtime instructions. SDT sort of skips the syntax tree all together. I'll cover SDT in part III.
B. Grammar and Language
Grammar provides a precise way to specify the syntax (structure or arrangement of composing units) of a language. In grade school we take grammar lessons that teach us to speak and write proper English. They teach us the correct way to form sentences with subjects, predicates, noun phrases, verb phrases, etc.
Subjects, predicates, and phrases are some of the composing units of a sentence in English; similarly, if/else statements, assignment statements, and function definitions are some of the composing units of source code, which itself is a single sentence of a particular programming language. There are a very large number of valid English sentences one could compose; likewise, there are a large (probably infinite) number of valid source code programs one could create.
If someone says "on the computer she is," we immediately recognize that the sentence is ill-formed. It's structure is invalid, because the noun phrase should proceed the verb phrase. It should be: "She is on the computer." Diagramming is used to validate the sentence, or rather to specify the syntax of it. If you take a look at that diagramming article, you'll see that the model is exactly like an AST. So it goes without saying that parsing, or more formally, "syntactical analysis," has its roots in Linguistics.
Moreover, just as in English, programming languages need to be specified in a way that allows us to verify whether a sentence of the language is valid. That's where context-free grammars (CFG) come to into play; they allow us to specify the syntax of a programming language's source code.
C. Context-Free Grammars
A context-free grammar is a set of rules that specify how sentences can be structured; this set of rules can be defined recursively. All CFGs have (1) a start symbol, (2) a set of non-terminal symbols, (3) a set of terminal symbols, and (4) a set of productions or "re-write rules." The following is a CFG that describes simple mathematical expressions that aren't aware of precedence or associativity rules.
expr → expr op expr
expr → (expr)
expr → -expr
expr → id
op → * | / | + | -
id → a | b | c
Note: The division and addition symbols should be bold.
Each line is a production (or "rule"). expr, op, id, *, /, +, -, a, b, c are all symbols. The pipe (|) indicates that each symbol can serve as the replacement for the left side of the production, but you can only choose one. When I say "left side of the production" I mean to the left of the arrow. You can see that some of the productions are recursively defined.
The start symbol is the symbol for which all sentences in the language can be derived from. It's also where we begin. Usually, the symbol on the left side of the first production is the designated start symbol, but sometimes it's specified explicitly if it's not in the first production. So expr is the start symbol.
Non-terminals are symbols that can be replaced by the right side of their productions. They are symbols that represent a set of strings that may contain other non-terminals and terminals. They are a syntactical "variable" or "category" because there are many strings they can be replaced with. Each symbol on the left side is a non-terminal. Terminals are the symbols that can't be re-written. They are the tokens, or basic units, of which strings in the language are composed of. The terminals correspond to the set of tokens returned by the lexer. The bold face symbols are terminals. Here's another simple CFG that describes a few common programming constructs.
stmt → if equality_expr then stmt else stmt
stmt → do stmtList while equality_expr
stmtList → stmt | stmt; stmtList
Here's a set of productions that describe the Integer class in part I. This CFG partially describes our notion of a Java class, not just a class named Integer.
D. Derivations
When we apply the productions starting from the start symbol we try to derive a sentence in the language, that is, a string of terminals. a + b * c is a sentence of the language defined by our first CFG above. Similarly, the source code we write is a sentence of some language defined by some CFG. Let's walk through a derivation of the mathematical expression a + c using the first CFG above.
- Expand or "reduce" the start symbol, expr. This means replace the non-terminal in question with the appropriate string on the right side of its production. There are several to choose from: expr op expr, (expr), -expr, and id. Pick the one that you think will derive a + c in the least amount of steps. expr op expr seems like the right one, but why? If we look at the expression we can see it that matches up (or will match up in a few steps) with the production exactly. The terminal a is an id, which is an expr; + is an op and c 's case is the same as a's. As you can see a little intuition has to be exercised here. Note that we just did a recursive expansion. The current derivation is as follows:
expr → expr op expr
I will use the term "expansion" many times throughout this part of the tutorial; what I call an "expansion" is commonly referred to as a "reduction."
- We are now working on expr op expr. Expand the first non-terminal from the left. Replace expr with the most appropriate production. Like we said above, since a is an id, we ought to use the production: expr → id. The current derivation becomes:
expr → expr op expr → id op expr
- We are now working on id op expr. Since id is a non-terminal we expand that instead of moving on to op. id only has one production: id → a | b | c. We can choose between the three. We choose a. The current derivation becomes:
expr → expr op expr → id op expr → a op expr
Because we keeping expanding the leftmost non-terminal first, we call this a leftmost derivation.
- op is now the leftmost non-terminal, so we expand it to *, /, +, or -. We choose op → + . The current derivation becomes:
expr → expr op expr → id op expr → a op expr → a + expr
By now, you probably understand what's happening.
- expr is now the leftmost non-terminal, so expand it to id.
expr → expr op expr → id op expr → a op expr → a + expr → a + id
- And lastly, we expand id to c. Our full derivation becomes:
expr → expr op expr → id op expr → a op expr → a + expr → a + id → a + c
And that's it folks! We've ensured the expression is syntactically valid and is therefore a sentence of the language described by our CFG. The final string is all terminals. This must be true for all derivations of any string in the language. If you had any trouble following along, this example should help to clarify the procedure.
Suppose the expression was a + d. At step 6, when we try to expand id to d, we fail, because there's no production for that. If the expression was d + a, we would have failed at step 3. If the expression was b % a, we would have failed at step 4.
Here's the derivation for ( ( ( -a * b ) - ( c + b ) ) / c ) using the CFG above:
expr → ( expr ) → ( expr / expr ) → ( ( expr ) / expr ) →
( ( expr – expr ) / expr ) → ( ( ( expr ) – ( expr ) ) / expr ) →
( ( ( expr * expr ) – ( expr ) ) / expr ) →
( ( ( expr * expr ) – ( expr + expr ) ) / expr ) →
( ( ( -expr * expr ) – ( expr + expr ) ) / expr ) →
( ( ( -id * expr ) – ( expr + expr ) ) / expr ) →
. . . . . . →
( ( ( -id * id ) – ( id + id ) ) / id ) → ( ( ( -a * b ) – ( c + b ) ) / c )
And, here's the derivation for our Integer class using the CFG defined in the spoiler above:
program → PUBLIC CLASS id LCURLY classBody RCURLY →
PUBLIC CLASS ID LCURLY classBody RCURLY →
PUBLIC CLASS ID LCURLY declaration RCURLY →
PUBLIC CLASS ID LCURLY fieldDeclaration RCURLY →
PUBLIC CLASS ID LCURLY type id SEMICOLON RCURLY →
PUBLIC CLASS ID LCURLY INT id SEMICOLON RCURLY →
The first ID terminal would be associated with the string Integer and second with the string value, which are returned together by the lexer.
Let's extend upon our source code CFG (see spoiler) to support simple methods with variable initialization statements. We won't support the notion of an instance variable.
program → PUBLIC CLASS id LCURLY classBody RCURLY
classBody → declarationList
declarationList → declaration declarationList | epsilon
declaration → methodDeclaration
methodDeclaration → PUBLIC STATIC VOID id LPAREN RPAREN LCURLY methodBody RCURLY
methodBody → variableInitializationList
variableInitializationList → variableIntializationStatement variableInitializationList | epsilon
variableIntializationStatement → type id ASSIGN literal SEMICOLON
literal → intLiteral | strLiteral | true | false
type → INT | BOOLEAN | STRING
intLiteral → INTLITERAL
strLiteral → STRLITERAL
id → ID
Note that epsilon means "nothing" or that there's no match available. So in the sixth production a variableInitializationList can be reduced to nothing, meaning the method didn't have any initialization statements or that we've matched several initializations and there aren't any left. INTLITERAL is a terminal that corresponds to a lexer token returned when an integer literal is matched. Examples of integer literals are -123, 0, 432434, etc. The regular expression is:
STRLITERAL is a terminal that corresponds to a lexer token returned when a string literal is matched. String literals are strings in double quotes: "one", "_two?", "\n\t three". Its regular expression is similar to the one for ID, which I talked about earlier.
Now, let's create our new source code:
public class IntegerTest { public static void main() { int num = 20; boolean isNegative = false; } public static void toString() { String formattedString = "%1$-7d"; } }
Let's derive it! If you pay attention to the non-bold face non-terminals you can capture the essence of the derivation quickly.
My point in doing this incredibly long leftmost derivation is to show you that the derivation proceeds in the same order as the execution of the program instructions. This is the first important point! We derived the first integer assignment first, not second or third. Then, we derived the boolean assignment second, and so on.
As you can see CFG is very powerful, having the ability to describe sentences of a potentially infinite size (as long as your system memory can accommodate it). I could have added 100,000 methods to IntegerTest and still validated its syntax.
E. Abstract Syntax Trees
An AST is a type of parse tree that's used in source code compilation. It's abstract because minor details in the code like semicolons and braces are omitted. Parse trees that include those details are called concrete syntax trees. Enough information is stored to preserve the meaning of the program.
Each tree node represents a grammar symbol. Every node that represents a non-terminal in the tree has a collection of child nodes that are either non-terminals or terminals. The child nodes represent the symbols that were produced from expanding the non-terminal. The leaves in the tree are always terminals and the interior nodes are always non-terminals. Terminal nodes are usually variable identifiers or literals.
During a derivation, for each non-terminal expansion that we do, if we create a tree node to represent the non-terminal and add it as a child to the node representing the non-terminal we expanded beforehand, we'll build up a tree of nodes representing the sentence structure. This is the second important point.
Here's a partial AST for IntegerTest:
It just so happens that a preorder tree traversal on our AST visits nodes in the same order as the derivation, so logically it follows that the traversal follows the order in which instructions are executed. This is the third and final important point. And that my friends is the way we generate assembler that preserves the exact order in which high-level instructions are written! We recurse through the AST, generating the corresponding assembler for the node type. Beautiful isn't it?
Translating assembler instructions line for line isn't difficult. No parsing is needed. This is essentially what an assembler does. It translates assembly statements to their binary counterparts. The nice thing is that the instructions execute in sequence.
0x1 li $v0, 1 0x2 syscall
It's guaranteed that the system call instruction will be executed directly after the load immediate instruction for this program. So an assembler doesn't have to worry about maintaining the order of executing instructions. An assembler literally goes through each line and translates it to machine code.
What makes compilation more difficult is that you have to translate a program where high-level instructions jump from one method to another.
Line 0: void bar() { Line 1: System.out.println(1); Line 2: } Line 3: void foo() { Line 4: System.out.println(2); Line 5: }
I can't just go from line 0 to 5 and translate each statement into a runtime instruction. foo() may never even be called in the program. In short, there isn't a direct translation like with assembler. In assembler, when you see a load immediate instruction you just translate it to 010101011010101010 or whatever the ISA calls for.
When you generate assembler from a node in the AST for a method call, there's a lot more to do. You have to save the state of your registers (save the local variables), plop arguments onto the stack (send the method parameters), set stack and frame pointers (don't destroy another method's state!), check the symbol table (how much stack space do I need?), etc.
The other nice thing about ASTs is that they can be represented in computer programs. It's just a regular ol' node-based tree. As the parser runs through its parse algorithm, it builds a tree with nodes that are specialized. The visitor pattern is very useful when working with ASTs because it allows the compiler to be extensible (supporting more CPU architectures). An example of AST nodes:
class ProgramNode { ClassBodyNode classBody; ProgramNode(ClassBodyNode classBody) { this.classBody = classBody; } void generateMIPSAssembler(FileWriter wtr) { wtr.append(".text\n"); classBody.generateMIPSAssembler(wtr); } } class ClassBodyNode { DeclarationListNode declList; ClassBodyNode(DeclarationListNode declList) { this.declList = declList; } void generateMIPSAssembler(FileWriter wtr) { declList.generateMIPSAssembler(wtr); } }
F. Regular Expressions vs. Context-Free Grammars
CFG can describe all regular sets, but it's overkill for regular expressions. Regex is a concise and powerful notation for describing patterns. Here's an example of Regex vs. CFG.
Our regular set:
S = {"ab-", "ab-dd", "ac-", "ac-ddd", . . .}
Regex pattern:
S → aA
A → ( b-B ) | ( c-B )
B → dB | e
e – is the empty string
Do the derivation if you want, it works.
The process involved in creating a parse table is quite complex; it's inefficient to use CFG when an easier array-based regex solution exists. Regex implementations are much, much easier to construct than parsers, as we're about to see. I'm totally disregarding advanced regex features like lookahead, reluctant quantifiers, capturing groups, etc.; but even with those added, parsers are still more complex. Allowing regex to handle lexing allows the compiler to be modular, where front-ends are interchangeable.
G. Parsing Methods and Implementations
We saw how lexers were built programmatically in the last section, and in the future parts of this tutorial we'll see how to programmatically generate assembler. In this part we saw how to define a CFG for the beginnings of a programming language and how to derive a given sentence while building an AST for it. However, all of what we've learned about parsing is useless if we can't do it programmatically. There are many parsing methods, each of which require a fair bit of detailed explanation, so we're only going to hit the tip of the iceberg, mainly focusing on top-down parsing.
There are two types of parsing methods: top-down and bottom-up. Everything I've showed you up to this point is an example of top-down parsing. "Top-down" is pretty much self-explanatory. From left to right, we drill down through each non-terminal until we get to a terminal. We also build our tree from the root node down to the leaves in a top-down fashion. It's important to note that we drill down from left to right replacing the leftmost non-terminal first. The definitive meaning of top-down parsing is "an attempt to find a leftmost derivation." In bottom-up parsing we are doing a rightmost derivation, where we replace the rightmost non-terminal first.
Ambiguous grammars are those in which a string of the language has more than one parse tree. This is problematic because it may be hard to interpret the intended meaning of the string. Here's an example from Wikipedia's entry on ambiguous grammars.
x * y;
That C statement can be interpreted as the multiplication of two variables, x and y, or as the declaration of a variable y whose type is a pointer to x. To resolve the conflict the compiler must locate y's type information in the symbol table. If it's a numerical type the statement is interpreted as an expression.
Generally speaking, ambiguity is an unwanted feature of any grammar and may pose a threat to the correctness of both top-down and bottom-up parsers. Different parsers handle it with varying efficacy. In spite of all this, ambiguity isn't always a problem. It's possible to generate a non-ambiguous language from an ambiguous grammar. Even if there are two parse trees that generate a string, as long as it has one intended meaning there's no problem. Some parser generators allow specifying precedence and associativity rules to remove any ambiguity.
Bottom-Up Parsing
In bottom-up parsing the derivation starts from the string of terminals (our sentence) . We try to derive the start symbol of our CFG. It's essentially a top-down derivation backwards. Initially, instead of replacing a non-terminal with another non-terminal or terminal (drilling down), we replace a terminal with non-terminal (drilling up). At certain points we may even replace several non-terminals with one non-terminal. Since the derivation is the exact reverse of a leftmost derivation, we are then replacing non-terminals from right to left (a rightmost derivation). When we make a replacement we create a node that becomes the parent of some other node instead of its child.
Top-Down Parsing
There are several problems with top-down parsing. (1) Left-recursion can lead to infinite parsing loops, so it must be eliminated. Left recursion in a CFG production occurs when the non-terminal on the left side appears first on the right side of the arrow. For some bad input, we might find ourself continuously expanding the same non-terminal. At the beginning of this tutorial we had
expr → expr op expr
expr → (expr)
That's left recursion. There are simple algorithms to remove it, but the CFG becomes twice as long in many cases. (2) Top-down parsing may involve backtracking. Backtracking is the act of climbing back up the derivation (the parse), reversing everything you've done to try another derivation path. We end up re-scanning the input as well. If you're inserting information into a symbol table (explained later) as the parse proceeds, everything has to be removed. That's pretty costly in a 10 million line application. The need for backtracking can be eliminated by parsing with lookahead. Note that backtracking isn't restricted to top-down parsers. There are backtracking LR parsers as well. Finally, (3) the order in which we choose non-terminal expansions can cause valid inputs to be rejected without information as to why.
Types of Top-Down Parsers
There are two types of top-down parsers: recursive-descent parsers and predictive parsers.
A recursive-descent parser consists of a set of functions that construct a leftmost derivation of the input. The functions don't actually have to be recursive, but they can be. Each function implements a grammar rule. RD parsers may need to implement backtracking.
Below is an example of a grammar that requires backtracking.
S → cAd
A → ab | a
The input is cad.
After matching c, when we go to expand A and we have a as the next character in the input. We don't know exactly whether the alternative ab or a will be chosen without looking at the next character in the input after a, which is d. We have to look ahead two characters in the input to know the right alternative to choose, but we only have access to a. We choose the first alternative expansion, ab. We match a in the alternative and go the next input token, d. We then try to match b in the alternative, but the next token is d, so we have to back track and choose a as the alternative. To implement backtracking in the code we have to save a pointer to a previous place in the input before we try an expansion and possibly remove information we have saved. It's costly when your deep into a parse of many lines of source code.
A predictive parser is a recursive-descent parser that needs no backtracking. It can predict the derivation path it'll take by specifying a certain amount of lookahead. Lookahead is the number of tokens in the input the parser needs to examine to decide which non-terminal expansion to take. This type of parser only works for LL(k) grammars, where k is the amount of lookahead the parser needs to make its decision. Lookahead is looking at a few more input items to determine the correct path to take. An LL(k) grammar must not be ambiguous or contain left recursion. This is a major restriction for compiler designers, so LR parsers are preferred.
An LL parser is a predictive parser that reads the input from left to right and constructs a leftmost derivation on LL(k) grammars.
Lets go back to one of the CFGs from before.
program → PUBLIC CLASS id LCURLY classBody RCURLY
classBody → declaration
declaration → fieldDeclaration | methodDeclaration
fieldDeclaration → type id SEMICOLON
methodDeclaration → PUBLIC VOID id LPAREN RPAREN SEMICOLON
type → INT | BOOLEAN | STRING
id → ID
This grammar only allows for one class declaration, so you can either have a member field or a member function signature, but not both. Below is a code snippet for a recursive-descent LL parser for the above grammar. It directly mimics the CFG. The code is an LL(1) parser since we only use the next token in the input to make our expansion decisions. As you can see we don't need to save a pointer to a place in the input or logic to backtrack and try another path through the derivation.
I've left out code to build the tree, but I've commented where you'd insert the tree-building statements.
The input is formatted for easy tokenization to keep things simple.
Easy enough. In parts IV and VI I will add in the tree building statements, so that we have an AST to experiment with. You'll be able to implement your own semantic analysis and code generation from the tree.
It's impractical to think this is an effective way to parse sentences for all grammars. The parsing logic is hard coded. We need something dynamic that we can load with parsing logic. We need a table-based parser.
Table-Based Parsing
A more flexible way of implementing a parser is to make it table-based, where we introduce a parsing table (a 2d array) and a stack. Each entry in the parse table represents a reduce action, and each entry on the stack is a symbol.
Here's a simple run-down of a table-based LL(1) parsing algorithm:
The bottom of the stack starts with $ and the grammar's start symbol is on top of that. Look at the symbol on the top of stack, we'll call that X, and then look at the current token of the input, we'll call that a. If X is a terminal and it equals a, pop X off the stack and remove a from the input. If it doesn't equal a, an occur has occurred. If X is a non-terminal, retrieve the reduction from the table and swap it with X. Table(X, a) returns the string that X is reduced to when a is the next token in the input. That string is one of the alternatives on the right side of the production. The string of symbols are actually thrown on the stack backwards since we're doing a leftmost derivation. If there's no entry in the table for X and a , an error has occurred. Repeat the steps until X equals $, where there are no more stack symbols to be processed. That's literally the entire algorithm. If that example was difficult to understand, here's another example showing how the algorithm works.
So how do we compute the parse table? You have to construct the first and follow sets. The input to these algorithms are a CFG. You can find the algorithms here. They aren't too complicated.
The important thing to know is that the parsing algorithm utilizes a table that's dynamically generated from the output of the first and follow sets, which can be programmatically generated from a grammar specification. No more hard-coding your grammar rules! And no more having to write code to support more language syntax! This gives rise to what we call the parser generator. This is the sane way to create a complex parser.
Types of Bottom-Up Parsers
One form of bottom-up parsing is called shift-reduce parsing. This method of parsing uses a table of actions and a stack of symbols. The Wikipedia entry has an easy-to-understand example. It's a relatively simple algorithm that only supports a small class of grammars. The major disadvantage with shift-reduce parsers is that they don't support associativity or precedence rules, nor do they handle ambiguous grammars well. They are used to describe operator grammars and are commonly used to parse mathematical expressions.Operator-precedence parsing is a bottom-up shift-reduce parser that supports defining precedence rules for grammars. Perl 6 and GCC parsers use some form operator-precedence parsing for optimization purposes.
LR Parsing
LR parsers are a class of parsers that scan the input from left to right, but constructs a rightmost derivation. It's a bottom-up parser because it constructs a rightmost derivation instead of a leftmost derivation like the top-down parsers. LR(k) parsers require k lookahead. They are deterministic.
LR parsers have some advantages over their counterparts:
- They can handle virtually all CFG grammars (including left recursive ones), giving them the ability to handle many more languages than LL parsers.
- They have better error reporting than backtracking parsers.
LR parsers consist of a stack of symbols, an input buffer, and a parser driver but also have a few more components. The parse table for an LR parser is filled with states. There is also an action and a goto table. I said I wouldn't go to deeply into the details of bottom-up parsers, because it would be very time consuming, so I'll just give a high-level overview.
There are three general types of LR parsers: SLR parsers, Canonical LR parsers, and LALR parsers. SLR parsers are the simplest to implement, but fail to produce tables for certain grammars. Canonical LR parsers are the most powerful of the three but are also the hardest to implement. They cover the widest range of grammars. Lastly, LALR parsers cover the middle ground: they are between SLR and Canonical parsers in complexity and coverage but can handle grammars for most programming languages.
GLR parsers are an extension of LR parsers that use a form of backtracking to handle ambiguous grammars. They work by forking sub-parsers at any point in the parse where they can't decide which transition to take. If any match in the sub-path fails, that sub-parse is thrown away and the next sub-parse is tried. If several sub-parses pass, the parser accepts both. In this sense, backtracking takes on a more general meaning: building up candidates as possible solutions and discarding them as soon as they fail.
It's worth mentioning that there are backtracking LR parsers as well.
Backtracking parsers go through greater troubles to give the exact location of a syntax error, because they have to try many candidates before they're absolutely sure that the string isn't valid. The parser may have to record each possible syntax error and include logic to figure out the correct one upon failure. When deterministic parsers fail to match a token, the process as a whole fails at that point and the location of the failure is known at that point.
Unlike the table-based top-down parser, an LR parser uses a table of states rather than productions. The LR parsing algorithm jumps from state to state. It's essentially a deterministic finite automaton. The algorithm is fairly simple, but constructing the parse tables is not.
To construct an LR parse table you have to turn the grammar into a DFA. From the DFA, you construct the parse table. The DFA is able to recognize prefixes in the grammar, and that allows the parser to determine what actions it needs to take without having to scan down the stack to make decisions. This is the "power" of LR parsers. To create the DFA you must perform the canonical sets-of-items algorithm, which depends on 3 other algorithms: augmenting grammars, closure, and goto. The inputs to these algorithms are a CFG. The algorithms are somewhat complicated. They are certainly harder to understand than those of a table-based predicative parser. Here's a overview of LR parse tables.
LR parsers are hard to implement by hand because the sets-of-items construction will result in LR tables with several thousand states. The parse table for a typical programming language will have 20,000 entries; that's 20 KB! It gets messy quickly, even for very small grammars, so parser generators are normally used to create the parse tables. Generators are implementations of the aforementioned table-construction algorithms, which of course can do things much more efficiently than humans.
Saving space is particularly important in constructing parse tables because many table entries (array elements) will be empty. One might use linked lists instead. There are also many duplicate rows that can be eliminated with the use of pointers, where you could compress many rows into one long row whose elements contain the index of the duplicate row.
Parser Generators
Parser generators are fantastic, and they're easy to use! You just feed them a specification file with a bunch of CFG rules, and it spits out a parser in your language of choice. Usually you can embed code into the specification to specify how you want the parser to build your AST. There are also ways to specify the precedence and associativity rules. And furthermore, they can usually handle ambiguous grammars.
Yacc was one of the earlier parser generators developed and was the default generator on UNIX systems. Two popular generators based off Yacc are GNU Bison and CUP. Both produce LALR parsers. GNU Bison is probably the most popular generator today. It can produce parsers in C, C++, and Java code. It's been used to create YARV (Ruby interpreter), Zend parser (PHP scripting engine), Bash Shell, and GCC (initially). ANTLR is another generator and probably is the most popular of them all. The ANTLR package has some really nice tools that make easing into compiler construction a lot more comfortable.
CUP, formerly known as JCUP, is a parser generator for Java. I found it particularly easy to use and I would recommend it to anyone looking to build a Java parser or compiler. I had planned on showing a few examples of CFG for a simple language, but I ended up writing a post that goes somewhat in depth on how to do so using CUP. All the CFGs I wrote above can be translated into a CUP spec with minimal effort.
Bison and CUP require a lexer to produce a parser, usually Flex and JFlex, respectively. I covered how to use lexer generators in part I. The JFlex distribution has a few really good examples for generating lexers and parsers.
H. Conclusion
Luckily, we don't have to concern ourselves at all with how parsers are built. We focus only on specifying the CFG for our language and using a generator to create our parser. Creating an AST is an elegant way to represent the structure of source code that leaves the compiler open to optimization and code generation. To recap, we've covered the following important points:
- A derivation proceeds in the same order as the execution of the program instructions.
- During a derivation, for each non-terminal expansion that we do, if we create a tree node to represent the non-terminal and add it as a child to the node representing the non-terminal we expanded beforehand, we'll build up a tree of nodes representing the sentence structure.
- A preorder tree traversal on our AST visits nodes in the same order as the derivation, so logically it follows that the traversal follows the order in which instructions are executed.
- A table-based parsing algorithm utilizes a table that's dynamically generated from the output of the first and follow sets, which can be programmatically generated from a grammar specification.
- Parser generators are implementations of the table-construction algorithms.
If your interested, I found this awesome set of lecture notes for the dragon book. In part III, we will take a short look at the wonderful world of syntax directed translation.
Alfred V. Aho, Jeffrey D. Ullman. Principles of Compiler Design. Reading: Addison-Wesley, 1977.
Wikipedia: The Free Encyclopedia. Wikimedia Foundation, Inc. 22 July 2004. Web. 10 Aug. 2004.
This post has been edited by blackcompe: 25 September 2014 - 03:32 AM


text:
Welcome to Great Yarmouth, home to fun seaside holidays and great days out
Discover how you can respect, protect and enjoy Great Yarmouth when you visit.
Now is the time to start planning to visit Great Yarmouth
We look forward to welcoming visitors to Great Yarmouth in future, so start planning your trip today.
The risk of the coronavirus being passed on to others outdoors is now considered to be low as long as people maintain social distancing.
The Government have announced new rules on travel to and access to green spaces which includes beaches.
Please stay alert and stay safe.
Download our Activity Packs
Looking for something new to entertain you and the kids? Missing out on a trip to Great Yarmouth? Download our FREE Activity Packs now.
Find out what's on over the coming weeks with our events guide, there's loads happening and plenty to do.
Check out the options whether it's a quick leg stretch before a delicious pub lunch or a lengthy trek you've got in mind.
There's so much to do, indoors and out that whatever the weather you're guaranteed to have a great time in Great Yarmouth.
Food and drink in Norfolk is widely renowned to be excellent, and food near the coast, especially al fresco, is simply delicious.
Heritage exploring, golf championships and planning in case the British weather is unpredictable! Let us inspire you!
Want to know a little bit more about what makes tourism tick locally? Watch our videos and feel the passion for Greater Yarmouth.
Holidays and short breaks - what will you do?
Who doesn't love a day out, holiday or short break beside the sea, exploring coast and countryside or messing about on the river? Great Yarmouth's unique location means you can fit all this in to your getaway, whatever you want to do with your time off.
Great Yarmouth is Norfolk's premier beach resort where you and your friends and family can enjoy a fun-packed short break or seaside holiday. As one of the UK's top beach resorts we have loads to see and do, a superb choice of places to eat and drink, a bustling town centre, beautiful wide, sandy beaches stretching as far as the eye can see, lots of pretty Norfolk towns, villages and Norfolk Broads to explore in the surrounding area and of course loads of lovely places to stay for fantastic Great Yarmouth holidays.
Norfolk is known for its dry and sunny weather throughout the year making a holiday in Great Yarmouth well worth a visit - have a look at our seafront webcams and check out today's weather.
The Great Yarmouth Tourist Information Centre is at the heart of the Golden Mile on the seafront with everything you need to make sure you won't miss a thing during your holiday or short break. Free beach wheelchairs are available to hire, all year round. You can download a free map of the resort before you come, look through the What's On guide online as you're planning your trip or pick one up when you get here. You can also book on-line now.
Great Yarmouth, UK, is great for groups too, with plenty of accommodation and coach parking. We also have all sorts of choices for accessible holidays. Take a look at the full list of attractions to visit in the area, there's so much to do and a whole range of festivals to visit especially the Maritime Festival in September.
Come and enjoy yourself on a fun holiday in Great Yarmouth and make great memories to share with friends and family.
What's on 2020
Pick up your copy from racks in resort attractions and accommodation or flick through the online version of What's On in Great Yarmouth before you come.
Town centre & seafront map
Download a local map of Great Yarmouth seafront and town area before you visit.
Email eNewsletter
Join our e-news gang for information about what's on in Great Yarmouth straight to your inbox!
What's On Special Offers 2020
Save more than £100 with our savings vouchers and special offers.
Great Yarmouth App
Download the Great Yarmouth app for iPhone and Android - tourist information to hand all the time!


text:
Light Space & Time Online Art Gallery is very delighted to announce that its December 2012 online art exhibition is now posted on their website and is ready to view online. The theme for this art exhibition is "Seasons" and artists were asked to interpret and depict the four distinct times of the year, along with scenes and activities associated with those seasons in their art.
An international online art competition was held in November 2012 which determined and judged the art for this exhibition. The gallery received submissions from ¬¬13 different countries from around the world and they also received entries from 31 different states. Overall, there were 401 entries from 131 different artists that were judged for this art competition.
Congratulations to all of the artists who have been designated as this month's category winners, along with the winning Special Recognition artists. The gallery commends all of the winning artists for their artistic skill and their creativity, as this online art exhibition is indicative of their creativity.
To proceed to the gallery's "Seasons" online art exhibition follow this link: http://www.lightspacetime.com/seasons-art-exhibition-december-2012/


text:
Welcome to Watch List, where we identify five things on TV to watch while you elbow out that 85-year-old woman to grab that $100 LCD flat-screen at Best Buy. LET'S GO!
AUBURN VS. ALABAMA - 2:30PM Today (CBS) Stuck at work? Sucks to be you, because one of the most important college football games of the year takes place this very afternoon, with #1 Auburn taking on defending champion and arch rival Alabama in their classic Iron Bowl match-up. To advance to the national title game, Auburn has to beat the Crimson Tide today and then win the SEC Title game against South Carolina. Or do they? A lot of people assume that TCU or Boise State would immediately take Auburn's spot if that happened, but I could easily see Auburn losing today, winning the SEC title game, and still going over those two lesser conference teams. And if that happens, you playoff advocates should be doubly annoyed, because not only would a worthy team end up getting shafted, but because keeping a one-loss SEC team out of the national title game is just the kind of thing that would drive college football officials to consider going with a playoff. And only a century too late! ANTICIPATION: WAR EAGLE!
OUTRAGEOUS FOOD - 10:00PM Tonight (Food Network) Behold the 10-pound meatball! You can demolish small buildings with it! Don't let it fall off your plate. It'll kill your children! ANTICIPATION: ON TOP OF SPAGHETTI!
CANDYMAN: THE DAVID KLEIN STORY - 8:00PM Saturday (Documentary Channel) The story of the guy who invented the Jelly Belly jellybean. Oh, so I have him to blame for getting a seaweed-flavored bean in every Jelly Belly handful? Gimme his address. Mr. Klein will come correct once I get my hands on him. ANTICIPATION: MORE TOASTED MARSHMALLOW BEANS PLEASE!
SOUL TRAIN AWARDS - 9:00PM Sunday (BET) Celebrate as BET hands out awards named after a show that no longer exists but has an award named after it because everyone loves to say, Sooooooooooul train! R. Kelly will be performing. I'd keep your niece away from him. ANTICIPATION: GROOVY!
BRIDALPLASTY - 9:00PM Sunday (E!) Every bit as awful as it sounds, E!'s new reality show is a competition between future brides for free plastic surgery. For the two people out there that really missed "The Swan." ANTICIPATION: EVIL!
Weekend Watch List: The BCS Gets Busted
Welcome to Watch List, where we identify five things on TV to watch while you elbow out that 85-year-old woman to grab that $100 LCD flat-screen at Best Buy. LET'S GO!


text:
Shared Topic: What sort of Boss would you be?
This week's Shared Topic is another of those creative types! Sephrenia from Guild Mum asks, if we were a raid boss, what sort of boss would we be? Check out the thread at Blog Azeroth to see how everyone else answered the topic!
If you are looking for my boss form, you can find her roaming the streets of undead Stratholme, exploring the corners and grieving for all those who have fallen to the Scourge.
As for her appearance, I have to say, I've always felt a deep connection with the gigantic women bosses in WoW. Bosses like the Maiden of Virtue in Kara or Maiden of Grief in Halls of Stone. I suppose being the tallest kid in school most of my life has taught me to empathize with other tall ladies.
Except for instead of that silly staffmace thingy, I would totally be smacking the main tank with my Giant Spoon. My emotes would be along the lines of "Do you want the spoon? DO YOU WANT IT????"
Me, though, I'm used to working with small children. My summer/part time jobs have always involved teaching or being a camp counselor. See, I happen to love kiddie games. If I were a boss, a big part of my mechanics would involve a favorite game of mine:
Every minute, I call out a number between 2 and 5. Raiders have a few seconds to group up according to that number. For example, if I call out three, they have to get into groups of three. Anyone who isn't in a group of the correct number would be transformed into a stone figurine and stored on my shelf.
I squeal with glee at the drama that would arise from guilds deciding who will have to be sacrificed first.
Another of my featured mechanics would be my unrequited love of singing. As much as I enjoy singing at the top of my lungs, singing, unfortunately, does not enjoy me. Nor does the raid, as they flee in terror and attack each other every time my boss-self bursts into song.
Since I don't want to be a one tank fight, I would have a chance on hit to put a "submissive" debuff on the tank every time I wack him. Once the debuff reaches a stack of 5, that player becomes completely submissive and must do my bidding. Think madness on the Yogg fight. To avoid becoming my slave, the tanks must taunt me back and forth.
I guess I should give the raid healers a little something to do as well. I'll admit, I'd love to have fire summoning skills. Whenever my frustration builds up too much….bang! Half the raid gets hit by my angry fireball of doom! Hey, don't want those non-pally healers to be bored!
As for loot…
Loot is always touchy. I would drop a Giant Spoon, for sure. In case you were wondering, a Giant Spoon is a 2-hander that's classified as a mace. Otherwise, I would drop trinket. Wonderful, awesome, lovely trinkets that do nothing but be cool. Along the lines of the Deputy Pa'trolla Badge or the Super Simian Sphere.
Oh, I suppose I could drop a mount and a pet, just so that people would venture to my lair to kill me. I'm thinking of a pretty, flying mount. The style of the gorgeous Ashes of Al'ar comes to mind. As for a pet, I adore the Ammen Vale Lashling, but that already exists… Maybe a slightly more aggressive flower. A carnivorous plant that gobbles down critters. Oh yeah!
So what do you say? Do you have what it takes to defeat the Bossy Pally and her Giant Spoon?Explore posts in the same categories: General WoW
Tags: boss mechanics, fights, shared topic, sillyBoth comments and pings are currently closed.
15 Comments on "Shared Topic: What sort of Boss would you be?"
February 20, 2010 at 7:51 am
Dear god. I hated that game as a kid! <.< You, madame, would be my nemesis!
February 20, 2010 at 4:11 pm
"Every minute, I call out a number between 2 and 5. Raiders have a few seconds to group up according to that number. For example, if I call out three, they have to get into groups of three. Anyone who isn't in a group of the correct number would be transformed into a stone figurine and stored on my shelf."
This immediately brought me to Red Rover. Imagine a boss that forces certain classes, genders, races to run to the other side of the room. Not only would it be unique, it would force variety of every sort.
February 21, 2010 at 11:53 am
I rather like the idea of the number-calling boss fight idea (maybe you should work for Blizzard part-time) and Red Rover. I hope they add something like that one day. 🙂
February 22, 2010 at 2:12 am
I like the idea of a boss with fun mechanics like that that drop nifty novelty-type loot or mounts. I doubt I could come up with anything myself; I'd be apt to come up with a boss encounter insanely easy or impossible to defeat.
For example, even though I'll never, ever see the fight, I would wonder what the Lich King encounter would be like before it went Live. One thought I had was that it'd be cool if every player he killed was replaced by a Ghoul or some other Undead that the Raid would have to deal with in addition to the boss. (Meaning no Battles Rezzes.)
February 22, 2010 at 12:17 pm
"Somewhat similar to Yogg's madness but with a Scourge twist."
Ha ha; that went right over my head. I've never so much as seen Flame Leviathan. Heck, the last time I did VoA, it only had one boss. >.<
But anyway, it's always amused me, in a way, that we as players can storm Scourge strongholds and have absolutely no fear of the Plague.


text:
Enterprise Unix Roundup: Back in the Closet With the Penguin Suit
"Clear-eyed!" we raved. "Engaged and focused!"Sun closes the door on its Linux efforts; indemnification is the buzzword of the week; and we extol the virtues of screen.
Last week, we were happy to laud Sun for the moves it's been making with its Java Enterprise System, the long-awaited software licensing/packaging combo that promises to make provisioning enterprise IT simpler than ever. Because there was so much time to spend on that, we didn't get around to covering the moves Sun is making with its Solaris for x86 offerings, which has long been considered the red-headed stepchild of the Sun lineup, or at least red meat when tossed in the x86 Unix gladiator pit with the BSDs and Linux.
It's probably best we waited, because during the past week Sun focused on tooting its licensing horn. In this short amount of time, figuring Sun out has gotten tricky again, and the trickiness centers around Sun's ongoing confusion (or perhaps confused protests of clarity) where Linux is concerned.
In February 2002, Sun CEO Scott McNealy was seen capering around LinuxWorld Expo in a penguin costume, declaring his love of Linux. It probably played well to the audience there, and we'll be the first to admit there's no warmer feeling than the one that comes from the approbation of a room full of Linux nerds hearing what they want to hear. It played well enough with us, too: Everyone we knew who had dealings with it considered Solaris on x86 machines to be a bad joke ... a pale imitation of the OS's greatness on high-end gear. It made sense for Sun, still reeling around after The Bust, to be figuring out a way to crack into the low-end opportunities a commodity Unix on commodity hardware might provide.
We might have ruined the love affair for everyone earlier this year, though, when we sat down with some members of the Solaris marketing team and suggested Sun's heart wasn't really in the x86 port of its OS: The idea got a distinctly chilly reception, then Sun withdrew to plot the unveiling of the Java Enterprise System (née Orion), and we decided we probably had a point, but it might be rude to bring it up. When we learned in July that Scott McNealy refers to the penguin head from his 2002 LinuxWorld costume, which he keeps in his office, as a "decapitated penguin," we realized we might have gotten personal without meaning to.
Then, a week ago we noticed that in an interview with The Register, Sun executive VP Jonathan Schwartz admitted his company had fiddled while Solaris x86 burned, and the company frittered away the boom years pushing higher-end hardware. "There will be a transition back to Solaris," he promised.
We thought we might have a week or two before hearing anything more, but Schwartz was out the gate with the new meme just a few days later, telling reporters "let me really clear about our Linux strategy. We don't have one. We don't at all. We do not believe that Linux plays a role on the server. Period."
So much for the penguin costume.
Or rather, so much for life on this side of the looking glass, where Linux on the desktop is still a struggling concept in the minds of most enterprise managers, yet seems to be handling servers rather well. The new Sun line seems to be the opposite: Linux is a dangerous liability on servers and a perfect fit as an inexpensive, drop-in Windows replacement. Last week, when we cautiously noted the Sun Java Desktop System (née Mad Hatter) as a potentially good idea fraught with not unprecedented peril, we had no idea that the server side of the equation for Linux at Sun had been so decisively dismissed. Now, we're willing to say the Java Desktop System is a misapplication of Linux, if that's where Sun thinks its sole role should lie.
What does the rest of the world think? An Aberdeen analyst says Sun's Linux strategy (the one Mr. Schwartz says it doesn't have) is weak, and that if it's all about Solaris after all, Sun is risking a growing body of customers that want the Linux choice in a meaningful, well-supported way. We're inclined to agree.
In Other News
Sun and the JDS provide a nice segue into this week's other bit of important news, which is the burning question of indemnification of Linux users from IP-related law suits. The question is burning because SCO, which has its own, non-copyright reasons for hating Linux on commodity hardware, is attempting to extract $1,800 a server from corporate Linux users, and threatening legal action if those users don't come across. As we've previously noted, Linux's loudest enterprise proponent, IBM, says it won't indemnify users and doesn't need to. Sun has struck a middle ground, offering to indemnify its Linux desktop users, but withdrawing that legal protection if its Java Desktop System ends up running a server somewhere. We suppose that's one way to frighten would-be Linux customers back to Solaris.
Also in indemnification news comes word that SCO's mystery licensee, which we mentioned late last month, is not Hewlett Packard. How do we know? HP said so Wednesday: "We have not signed any deal with SCO and have not paid them any money to protect ourselves," said HP vice president Martin Fink.
The company also announced it's indemnifying all of its Linux customers if they buy a standard support contract with their Linux hardware. "We're going to provide indemnification whether SCO's claims are valid or not," said Fink. The only catch is that users may not modify the Linux source code. If they do, they lose HP's legal aegis.
Oddly enough, rather than waiting five minutes before announcing it would be suing HP for every one of its unlicensed Linux customers, SCO praised the deal, saying "HP's actions this morning reaffirm the fact that enterprise end users running Linux are exposed to legal risks," and "HP's actions are driving the Linux industry towards a licensing program. In other words, Linux is not free."
In other words, perhaps SCO's outrage over its "stolen" intellectual property is less an issue of copyright and more an issue of stopping the continued demolition of its own x86 Unix offerings at the hands of Linux, even if someone else rakes in a few licensing bucks on it.
Finally, we'd be remiss if we didn't mention Jupitermedia's own upcoming Enterprise Linux Forum in Washington, DC. Forum chair Jon "maddog" Hall says it's a "Linux conference for the rest of us," meaning the focus will be aimed at companies new to Linux, or not even using Linux yet. We were happy to moderate a panel or two at the last ELF in Santa Clara, and can attest that it's a tight show with an enterprise focus. The D.C. conference runs October 22 and 23, and features keynotes from Hewlett-Packard and Oracle.
Security Roundup
After last week's rush of ssh and sendmail patches, things quieted down in the Unix world. We did, however, find one patch of note after press time late last week: IBM's DB2 on all supported Unix platforms has a denial of service vulnerability. The vulnerability has been addressed in Fixpack 10a for IBM DB2 version 7, and the IBM support site provides information on fixes.
Tips of the Trade
Now and then we like to use this space to plug a piece of software that makes our lives easier. This week's plugee is the marvelous screen.
If you're like most busy admins, you probably maintain several servers from a single console. It can be a real pain moving between assorted servers, especially if you're prone to interruption or find yourself needing to look in on a process from somewhere else on your network. screen takes away some of the pain by, as the project page describes it, "[multiplexing] a physical terminal between several processes." In other words, you can open up more than one login shell on the same terminal at the same time. Moving between the different shells is as easy as pressing ctrl-a and the space bar.
What makes screen even better is that it can detach a process to run in the background, then pick that process back up again from another physical terminal with a simple reattach argument. screen is especially good for programs that don't handle simple control-z backgrounding very well (or at all).
Other advantages to screen: If a detached process needs user interaction, it will wait until the screen is reattached at another terminal rather than spilling the prompts out onto the console. screen lets you start a long process, perhaps a software build, at home, and pick the same build back up once you get to work without missing a beat, and without missing any error messages or prompts that may need to be dealt with.
There's a lot to do with screen, more than one week's worth of tips, in fact. Next week we'll look at configuring screen to make your life on the console more productive. See you then!
IT Solutions Builder TOP IT RESOURCES TO MOVE YOUR BUSINESS FORWARD
Which topic are you interested in?
Data Storage
IT Management
What is your company size?
What is your job title?
What is your job function?
Searching our resource database to find your matches...