text:
brand(redirected from brand-new)
Also found in: Dictionary, Thesaurus, Financial.
brandnoun badge, colophon, copyright label, earmark, emblem, hallmark, identification mark, identiiication tag, impress, imprint, insignia, label, mark, nota, owner's mark, owner's sign, piste, seal, sigil, sign, signet, smirch, stain, stamp, sticker, stigma, stigmatism, tag, taint, ticket, token, trade name, trademark, watermark
Associated concepts: brand name
brand(Mark), verb autograph, blaze, distinguish by mark, earmark, emblaze, emboss, endorse, engrave, identify, impress, imprint, inscribe, label, notam homini inurere, notare, print, put a mark on, put an indication on, seal, sign, stamp, tag
brand(Stigmatize), verb asperse, attaint, besmear, bespatter, blacken, blot, bring into discredit, cast a slur upon, cast aspersions at, corrupt, debase, decry, defame, defile, deride, derogate, dirty, discredit, disgrace, dishonor, disparage, excite disapprobation, hold up to shame, impugn, involve in shame, malign, pillory, put to shame, reflect upon, slur, smear, smirch, smudge, soil, stain, sully, taint, tar, throw dishonor upon, vilify, vilipend
Associated concepts: libel, reputation, slander
See also: arraign, attaint, burn, class, classify, condemn, defame, denigrate, denounce, derogate, disapprove, discredit, disgrace, dishonor, disparagement, disrepute, earmark, humiliate, ignominy, implicate, indicant, indication, infamy, involve, kind, label, manner, onus, opprobrium, pillory, reproach, scandal, shame, smear, specialty, stamp, stigma, sully, tarnish, trademark
TO BRAND. An ancient mode of punishment, which was to inflict a mark on an offender with a hot iron. This barbarous punishment has been generally disused.


text:
|TokuNation News & Rumors
|Interview with David Clarke of Bluefin Brands
|Chun-Li, the Blazing Phoenix Ranger, joins Legacy Wars
|Bluefin Announces more Kamen Rider merch coming to the US
|DX Zetsumerise Key Set Announced
|Happy 65th Anniversary to Godzilla
|TokuNation Galleries
|Power Rangers Lightning Collection Lord Drakkon Gallery
|S.H. Figuarts Kamen Rider Ohma Zi-O Gallery
|Power Rangers Lightning Collection Beast Morphers Red Ranger Gallery
|Power Rangers Lightning Collection Fighting Spirit Green Ranger & Putty 2Pack Gallery
|S.H. Figuarts Shinkocchou Seihou Kamen Rider Zanki Gallery
|More New Posts
|How is everyone today?
|Watchmen's Alan Moore and His Opinions on Adults and Superheroes
|Kamen Rider Zero-One Episode 11- "Do Not Stop The Cameras!" Discussion
|What Makes a Good Kamen Rider Monster of the Week?
|Ultraman Discussion Thread
|ET's Sales Thread
|Let's See Some Cool Stuff - Super Sentai/Power Rangers Edition
|DesignIncase Power Rangers Legacy 3D Print Accessory
|The All Encompassing TRANSFORMERS Thread
|Let's See Some Cool Stuff - Kamen Rider Edition
All times are GMT -5. The time now is 08:38 AM.
Powered by vBulletin®
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Powered by vBadvanced CMPS

subset: commoncrawl


text:
Location: WeatherAlamitos Bay Yacht Club
7201 East Ocean Blvd
Long Beach, CA USA 90803
Phone: (562) 434-9955
The premier small boat sailing center in Southern California renowned for its great sailing conditions. ABYC has excellent facilities for racing small boats with a large boat yard, good launching ramps, a great clubhouse including a snack bar open for breakfast and lunch!
From here you can:
- Select a shaded day from the mini-cal: 03
- Use the mini-cal to Navigate to a different month: < >


text:
St. John - Black & White Wavy Striped Zip Up Jacket Sz 8
St. John
Condition:Very Good
Size: Size Guide
- Size 8
- Black & White Wavy Striped Zip Up Jacket
- Made in USA
- Collared
- Padded shoulders
- Gold & black zipper pull
- Shoulder to shoulder 16"
- Sleeve length 23.5"
- Bust 38.5"
- Waist 37"
- Shoulder to hem 23"
St. John, is an upscale American fashion brand that specializes in women's knitwear. The company is best known for its classic styling and extensive use of primary colors. A St. John's garment can be identified by its knit-in hem. The St. John brand is popular professional and casual business attire as well as weekend wear.
Clothing and shoes bought online may be returned for online store credit or a full refund up to 14 days after receiving the item. Once we receive the item by mail we will credit your online account or issue a refund.
All Bags, Accessories and 50% OFF items are final sale.
All items marked as Final Sale are not eligible for return. We will review your items and process your return as quick as possible. *All in-store purchases are final sale.
We ship via USPS to street addresses in the U.S, and to many international destinations. We ship every Monday through Friday, excluding holidays.
You May Also Like
St. John Couture - Black Pleated Knit Skirt Sz 8$180.99
St. John Collection - Fuschia Knit Jacket Sz 8$200.99
St. John - Cream, Black & Tan Knit Jacket Sz 8$278.99
St. John Collection - Charcoal Grey Knit Skirt Sz 8$195.99
St. John Collection - Black Knit Pencil Skirt Sz 8$105.99
St. John Collection - Black Flared Mesh Skirt Sz 8$175.99


text:
You've got a twin- or quad-PS3 Eye setup for a multitouch solution? On linux? Then you probably noticed there is no way to uniquely identify the cameras for persistant device names, if you change usb ports you're out of luck.
On windows, the CL-Eye SDK from codelaboratories has GUID support, which makes assigning the cameras in your code very reliable. On linux, the way to implement this would be udev rules.
I wrote a patch to expose the GUID and hardware version attributes of the cameras in sysfs. This required adding 2 hooks to the gspca framework, and implementing them in the ov534 driver file - i have no idea about the side effects this causes for the other gspca drivers, i don't have any other device to test this with. Also, i have never used sysfs before, and i didn't really test the usb sound stuff after my modifications, but for my use case it works perfectly. Be warned: use at your own risk.
Get the patch for kernel 2.6.35 - i use Ubuntu 10.10. Rough usage instructions, assuming you have your kernel source ready in /usr/src/linux
# patch -p1 < ~/ps3eye-guid-support_linux-2.6.35.patch # make M=drivers/media/video/gspca # cp drivers/media/video/gspca/*.ko /lib/modules/`uname -r`/kernel/drivers/media/video/gspca # depmod -a
Then plug in the cam. The hardware version should be printed in the dmesg output, and /sys/classes/video4linux/video0/guid should show you the GUID of the cam. This can be used in ATTR{guid} - udev rules like this:
SUBSYSTEM=="video4linux", ACTION=="add", DRIVERS=="?*", ATTR{guid}=="123456-ABCD-DCBA-AAAA-BBCCDDEEFFAA", NAME="cam1"
This should create a device called cam1 for this (and only this!) camera.
Have fun!


text:
New Zealand has a power elite running the country. There should be no doubt about this - some people have significantly more power than others, and they live and work together. But is this abnormal, dysfunctional or anti-democratic? Certainly critics of Prime Minister John Key are attempting to paint a picture of Key as someone who, conspiratorially plots and operates with business leaders and the general Establishment to retain power and keep the masses under control. Perhaps there's some logic in that. But the latest attempts to besmirch Key's reputation seem rather lame. Labour and the Greens are highlighting the PM's personal connections with GCSB director Ian Fletcher, and are throwing around mud. MPs are using the words 'nepotism' and 'sinister', referring to Key's apparent 'conflict of interest', and complaining about a lack of transparency - see Adam Bennett's PM plays down friendship with GCSB boss.
The strongest criticisms are coming from the Greens - see Andrea Vance's Green MP says spy boss link with Key 'sinister'. Green MP Steffan Browning has made some harsh allegations: 'For them to have that sort of relationship, it's nepotism - it's more than that, it's something you might think [went on] in some sort of third world country where there aren't decent checks and balances'. He bases these allegations on what appears to be third-hand information that appears to be verging on gossip or bragging: 'Browning said he had been told by a friend who also knew Mr Fletcher that he and Mr Key continued to stay in touch after their school days'. Browning appears to descend into parody when alleging that while at Christchurch's Burnside High School: 'They all went to each other's places together, they all hung out together'.
Unsurprisingly, the Prime Minister is reported as hitting back 'angrily' calling the attacks 'totally unfounded criticism and pretty low rent' - see Andrea Vance's Key: Green MP needs to pull his head in. Certainly when the micro-scandal arose, Key dismissed in Parliament the idea of the two being 'mates', saying that he only 'vaguely' knew Fletcher, but admitting their mothers had once been 'best friends'. Key also claims to have advised the State Services Commission of the relationship. So for Browning to continue to label the situation as 'very, very disturbing' seems somewhat hyperbolic. While there is certainly room for investigations and questions about New Zealand's Establishment (the interlocking company directorships, relationships between politicians and bureaucrats, business power, and social connections), it seems a bit underwhelming to use examples emanating from Burnside High School. What's more, the Labour-Green attack has allowed various rightwing blogs to say what most of the public are already thinking: 'this is getting silly' and the Opposition is grasping at straws - see, for example, David Farrar's Scandal - their mothers were friends and Keeping Stock's Grasping at straws.
Other complaints about politician impropriety are also topical, due to the appearance yesterday of the deputy Auditor-General at a select committee, where she answered questions about the recent SkyCity and Shane Jones reports - which are well covered in Newswire's PM contradicted on SkyCity 'vindication' and Hamish Rutherford's Auditor General hearing on Shane Jones. It appears that scandalmongering is an activity that MPs can't quite help themselves from doing.
This is also partly the cause of current heat occurring in the parliamentary debating chamber, with the debate over Key's alleged friendships eventually leading to expulsion - see Isaac Davison's David Carter ejects Labour MPs from the House and Jane Clifton's Speaker's ruling sets stage for hostilities of biblical proportions. Again, hyperbole is evident in responses to the event, with MP Chris Hipkins (@chrishipkins) saying on Twitter, 'Today is a sad day for Parliamentary democracy'.
But clearly there is a rising anger in the Debating Chamber, especially over the role of new Speaker David Carter. According to one blogger, blame lies on all sides - see Pete George's Speaker troubles - Key's and Shearer's responsibility. For the question for Labour is, according to Scott Yorke, What to do about Question Time?. He evaluates various possibilities, and concludes that the Opposition just needs to harden up and work harder: 'It demands that MPs don't ask quite so many dumb questions, and that questions be directed to the weaker ministers. It requires humour. Above all it requires Labour's leader to lift his game'.
Other recent important or interesting items include the following:
• There's been a lot of hyperbole expressed over the gay marriage issue too. Some of this can be seen in Kate Chapman's report, Gay marriage: 800 gather outside at Parliament. But the legislation continues on its path - see Peter Wilson's Gay marriage bill through another stage. Meanwhile, one gay marriage supporter, Cathy Odgers, is growing tired of some of the legislaton's proponents - see: Once Was A Mormon.
• Conservative politicians are turning their attention to alleged problems occurring in prostitution - see TVNZ's MP to tackle growing underage prostitution numbers. David Farrar responds succinctly to say, 'Before one talks of further law changes, how about enforcing the current law. Shouldn't the Police be sending in a team to remove any under-age prostitutes and refer them to CYFS? Prostitution is only legal when the prostitute is aged 18 or older. I'm not sure the law is the problem here - it is enforcing it' - see: Police should act.
• Following on from yesterday's criticisms of the Department of Conservation job cuts - see: Are DOC job cuts really the end of the world? - the Southland Times has published a strong criticism, especially of the Government's desire to reduce DOC's advocacy role - see: DOC takes a huge knock. Vernon Small also has some interesting comments in his column, Rejig little help for conservation.
• New Zealand apparently performs exceptionally well in the areas of health and education - see Yvonne Tahana's NZ up there with the best.
• The Government is in the middle of performing a U-turn on road safety according to Kate Shuttleworth - see: Govt to reconsider roadside drug testing.
• Solid Energy's Don Elder is back in the spotlight, with further allegations about his departing payout - see Matthew Backhouse's Elder's extra $250k slammed as a 'golden handshake'. For more on the ins and outs and rights and wrongs of such deals, see employment lawyer Peter Cullen's Keeping a grip on the golden handshake.
• The Law Commission's proposed News Media Standards Authority is being given a thorough analysis by media lawyer Steven Price on his Media law journal blog - with the following series of post: One-stop-shop for media complaints - Law Commission, Labour's weird response to the Law Commission, TVNZ's weird response to the Law Commission, and The NZ Herald's weird response to the Law Commission. You can also watch Media3's very good discussion of the issues here. And on a different media issue, Karl du Fresne argues RNZ's bias needs to be tackled.
• Last night's TV3 programme The Vote - which debated introducing a tax on unhealthy food - might have kick-started an increased public interest in policies designed to improve our health at a time, according to Tim Watkin, just when the Labour Party is moving away from such an approach - see: Labour's GST-off policy could yet bear fruit.
• Finally, the Civilian's latest faux political news is out: ACT Party launches investigation into why John Banks is leader of ACT and 3rd Degree hosts spar over future of 3rd Degree.


text:
Select a Language:
There are various facilities and services at Christchurch
Airport that can help those that require business services whilst
Air New Zealand, Qantas, Emirates and Singapore Airlines all
have lounges available for their passengers and airline alliance
partners in the domestic and international terminals.
Please contact your airline to find out
what is available for you.
The 54 seat Theatre and Event Space is available for hire to
community groups, business or small conferences. Fore enquiries
please email email@example.com
If you have a wireless-enabled device you can use the wireless
Internet service available at Christchurch International Airport
for free. Find out more about wireless Internet access at
Christchurch Airport here.
The Express Park (covered car park building) provides the
closest car parks to the terminal. For more information on the Express
Park and our other car parking options click here.
Valet parking is available to specific Air New Zealand
passengers, please contact Air New Zealand for more
Craddocks Car Storage also provides secure
vehicle storage and grooming services within the airport campus
including free courtesy shuttle transfers to the terminal for
Avis, Budget, Europcar, Hertz and Thrifty all have service desks
within the terminal building. Visit our car rentals page for
contact details or to book.
A number of hotels and motels are within close proximity to the
airport including the Sudima, just a 5 minute walk from the
terminal. For assistance with accommodation bookings please
visit iSITE in the
International Arrivals hall.
No flights found. Try the full flight listings instead
Last Updated: 19:13 p.m.
Image x of x


text:
Opinion from Byers: Hash pipes at the gates of Dillon
Hash pipes at the gates of Dillon
I'm 11 years old. On Saturday our family went to the Pink Floyd concert at the amphitheater. I was really looking forward to the music. Shortly after the music started, the strong, pungent smell of marijuana filled the air. This ruined the concert for me. I decided to play with friends on the playground but was followed by the same smell. Hoping that the smoking stopped, I sat back down with my family. The smell only got heavier and gave me a headache. I found it hard to breathe, forcing us to leave the concert. For those of you who smoke pot in public maybe my letter will let you know it is selfish for you to share your smoke at a free event like this especially with so many kids and tourists around. It gives Dillon a bad reputation and I would not want to visit again. I don't understand why smoking pot is allowed at an event like this, but a dog is not?
Chase Byers
Start a dialogue, stay on topic and be civil.
If you don't follow the rules, your comment may be deleted.


text:
North Korea laid down rigid conditions yesterday for dialogue with Seoul or Washington, including the withdrawal of UN sanctions and a guaranteed end to South Korea-US joint military drills.
The list of demands from the North's top military body was swiftly rejected as "incomprehensible" by South Korea, which, together with the US, has made any talks conditional on the North taking steps toward denuclearization.
Dialogue has become the new focus of a blistering rhetorical battle that has sent military tensions soaring on the Korean Peninsula ever since the North carried out its third nuclear test in February.
Some analysts see the North's engagement in a debate over dialogue — no matter how unrealistic the conditions — as a welcome shift from the apocalyptic threats of nuclear war that have poured out of Pyongyang in recent weeks.
"I don't think Pyongyang really expects these conditions to be met," said Yang Moo-jin, a professor at the University of North Korean Studies in Seoul. "It's an initial show of strength in a game of tug-of-war that at least shows a desire to have a dialogue down the line."
The first step demanded by the North's National Military Commission was the withdrawal of "cooked up" UN sanctions that were imposed after the nuclear test in February.
North Korea has repeatedly cited the sanctions as a prime trigger for the current crisis.
The other main bone of contention has been ongoing joint South Korea-US military drills, which have involved the deployment of nuclear-capable B-52s and B-2 stealth aircraft.
Both countries must provide international guarantees that such "nuclear war drills" will never be repeated, the commission said.
"Dialogue and war games can never go together," it added.
South Korean Foreign Ministry spokesman Cho Tai-young called the North's pre-conditions "absurd" and said it was time for Pyongyang to choose engagement with the international community over provocation.
"We strongly urge the North to stop making such incomprehensible demands and to make the wise choice we have repeatedly urged," Cho told a press briefing.
Daniel Pinkston, a North Korea expert with the International Crisis Group, ruled out any suggestion that the North was softening its position and said those hoping a dialogue might emerge were being willfully naive.
North Korea, Pinkston argued, had bound itself to a course that could only end with its recognition as a nuclear power — a status that is anathema to Washington and the US' allies.
"So what is there to even talk about?" Pinkston asked.
"The North is committed. It's burned its bridges. Any reversal could only be made at immense domestic cost to the regime, and there is simply no way any US administration is going to sit down and confirm a change in the status quo with the North as a nuclear state," Pinkston said.
"We're still firmly on a collision course and it's not going to end well," he said.
South Korean President Park Geun-hye has made tentative — and conditional — offers of talks, which received the backing of US Secretary of State John Kerry during his recent visit to northeast Asia.
Both Park and Kerry stressed that any talks would have to be substantive and predicated on signals from North Korea that it "change its ways" and respect its international obligations, especially with its nuclear program.


text:
This Year's Nominees Include Brad Pitt, Ryan Gosling, LeBron James,
Scarlett Johansson, Kate Beckinsale, Liam Neeson, Kate Upton, Eli Manning, Louis C.K., Aaron Rodgers, Tina Fey, Sofia Vergara, Rooney Mara, And More
Voting Starts Today At guyschoice.spike.com
NEW YORK, April 26, 2012 - Spike TV has announced the nominees for one of Hollywood's hottest marquee events of the year, the sixth annual "Guys Choice" awards. This year's star-studded homage to the year in Guydom once again brings together the biggest names in entertainment and sports.
The show will be taped Saturday, June 2 at the Sony Pictures Studios in Culver City, CA and air on Saturday, June 9 at 9:00pm ET/PT on Spike TV. Voting opens today on Spike.com.
Among the notable mano-a-mano nominee match-ups this year are:
Guy of the Year: Brad Pitt vs. Louis C.K.
Biggest Ass Kicker: Ryan Gosling vs. Liam Neeson
Holy Grail of Hot: Scarlett Johansson vs. Sofia Vergara
Unstoppable Jock: Eli Manning vs. LeBron James
Our New Girlfriend: Kate Upton vs. Doutzen Kroes
Top Fantasy Leaguer: Albert Pujols vs. Aaron Rodgers
Comedy MVP: Louis C.K. vs. Will Ferrell
For the full list of categories and nominees, log on to guyschoice.spike.com. Voting for this year's nominees starts today at guyschoice.spike.com.
Casey Patterson and Carol Donovan will serve as Executive Producers.
Spike TV is available in 98.7 million homes and is a division of Viacom Media Networks. A unit of Viacom (NASDAQ: VIA, VIAB), Viacom Media Networks is one of the world's leading creators of programming and content across all media platforms. Spike TV's Internet address is www.spike.com.


text:
Background and motivation: I am teaching the "covering space" section in an introductory algebraic topology course. I thought that, in the last five minutes of my last lecture, I might briefly sketch how to compute the "fundamental group of a field," primarily as a way of illustrating the analogy between Galois theory and covering space theory, but also because this is the sort of thing that makes me eager to learn more about a subject when I am on the receiving end of a lecture.
Unfortunately, as yet, I myself know little more about the etale fundamental group than the definition and a bit of motivation (although I am certainly planning to learn more). In particular, I realized that there is an obvious question I don't know how to answer. When defining the fundamental group in an algebraic setting, we define it as an inverse limit because there is, in general, no natural analogue of a universal cover. However, if we are looking at Spec k, there is an obvious candidate, namely the Spec of the algebraic closure of k.
Question: Let $k$ be a field, with algebraic closure $K$. How does the etale fundamental group of Spec $k$ compare to the automorphism group of $K$ over $k$? Assuming they are different, what (in very general terms) are the reasons for working with one rather than the other?


text: Create die-cut sentiments and ornaments in record time with Framelits dies and the Big Shot. Framelits Dies help you create detailed die cuts with just a few turns of the Big Shot handle. * 24 dies * Largest die: 3-5/8" x 1-1/2" (9.2 x 3.8 cm)* Use with Big Shot


text:
Search Results
Filter search results by category, source or community area.
Save pages to MyPad using the green floppy disc icon.
Print your first ten results using the green 'printer' icon.
View results on a map using the green 'pushpin' icon.
Check our tips on buying care and support services in our disclaimer.
Information on diet, fitness, exercise and healthy eating.


text:
Nerve tonics
Pain and weakness caused by weak nerves was considered typically English in the 1600s and 1700s. Gentleman of leisure Horace Walpole wrote to a friend in 1742: 'I am afraid I have a little fever upon my spirits, or at least I have nerves, which you know everybody has in England.' Until the 1800s, medicine to treat weak nerves involved herbal substances found in any apothecary's shop. However, illnesses such as nervous breakdown and neurasthenia became widespread in the 1800s throughout industrialising countries of Europe and North America. Medical entrepreneurs, responding to this growing market for nerve medicine, patented and bottled nerve tonics made from secret recipes. 'Tonic' reflected a popular, though outdated, medical understanding that organs needed firmness, or 'tone', to work best. In this case those organs were nerves.
The variety of competing nerve tonics was enormous. This reflected the fact they were one of the few affordable treatments for nervous breakdown and neurasthenia. They had names such as Antineurasthin, Wincarnis, Hall's Wines, Sanotogen, Tidman's Sea Salt, VISEM, BYNO, Glycolactophos, Armbrecht's Coca Wine and Bromocarpine. Many of these tonics used potent, poorly understood and often addictive ingredients. These included strychnine, morphine, opium, quinine, lithium salts and cocaine. Many nerve tonics were banned in the early 1900s when new laws required patent medicines to specify their ingredients.
Related links
Techniques and Technologies:
BibliographyJ Oppenheim, 'Shattered Nerves': Doctors, Patients, and Depression in Victorian England (Oxford: Oxford University Press, 1991)
A naturally occurring drug derived from trees. In small doses strychnine functions as a central nervous system stimulant, but in higher doses it is extremely poisonous.
A painkilling drug derived from opium. Morphine is used in hospitals around the world due to its relative lack of side effects.
A drug derived from the opium poppy. It has been used to cause sleep and provide pain relief for many centuries.
A substance taken to fight malaria. Quinine is found naturally in the bark of the cinchona tree. It is also an ingredient in tonic water.
White, crystalline powder extracted from the leaves of the coca plant. Once used as a local anaesthetic, it is now an illegal drug. It is habit-forming and harmful to the body.


text:
|March 27, 2013
|12:15 - 1:15 pm
|Rogers 207
|Presenters - Dr. Kara Poe Alexander (English) and Dr. Bill Booth (Computer Science)
Audience - Faculty
The Teaching with Technology FIG will provide an opportunity for faculty from across the university to learn about and discuss effective and innovative ways technology is being used to enhance the educational experience. The modern university student has never known a time without ubiquitous technology, and teaching can be made more effective by utilizing the technological skills of the learner. This FIG will provide a safe and supportive environment for faculty to discuss ways to enhance their teaching and the instructional environment through the use of technology. These sessions will take place during the lunch hour, so feel free to bring your lunch and join us in these important conversations on teaching with technology.
This session is entitled:
Merging Social Media and Education (Facebook, Twitter, Pinterest, Instagram, Online Identities, etc.)
Details on all of these FIGs are available here: Teaching with Technology DetailsRead More »
|zz (old) Training & Development
|Download this event


text:
Today's managers acknowledge the importance of customer focus for growing a business and competing.1 Yet the often costly customer efforts they have implemented have not led to the expected gains. The reason: a superficial understanding of what customer focus really means. Fortunately, a few organizations are going beyond thinking up new technologies, products and services and, through comprehensive organizational change, are achieving the deep customer focus that is nearly impossible to imitate.
Deep customer focus is not about buying customer-relationship-management software that tracks customers' purchases. It is not about designing sophisticated new products like mobile phones or iPods — or even about processes that allow a car to be built with customer-requested features. It's about an attitude that gets deep inside a company into what it is, what it does and what it prides itself on.
Many observers have suggested what needs to be done to create organizational change, but no one has spelled out how to get there, particularly how to make the changes that lead to a customer focus deep enough to become part of the lifeblood of an organization.2
Becoming Indispensable to Customers
Because companies with deep customer focus are constantly thinking about better, quicker, easier ways of doing things that customers need, they ultimately become indispensable. Whatever customers need to do (say, use information to make critical decisions differently, ensure employees' lifetime well-being, manage energy or do on-demand computing), the company with deep customer focus excels at offering the outcomes each customer seeks. Through constant innovation, customer feedback and the use of knowledge, the enterprise becomes indispensable. And as the relationship intensifies, truly sustainable gains ensue. No product or service on its own can accomplish all that.
The company's activities become so interwoven with its customers' activities that clients end up spending more money with the company on a greater variety of offerings over longer periods. Thus customers reward the enterprise, giving it many opportunities for profitable growth.3
Think about being the customer.


text:
- Home
- Editor's Desk
- Features
- Columns
- Arts & Culture
- Special Editions
- Advertising
Thursday November 14, 2019; 06:57 pm EST
Annmarie Garden's newest public art challenge wants you to Make a Splash
Fire hydrants are the latest foray into public art at Annmarie Sculpture Garden & Arts Center in Solomons. Also the most practical, satisfying the Calvert County Commissioners' desire for fresh paint on county hydrants.
You, by yourself or with a team, are invited "to submit designs and compete for the privilege — and fun — of painting a fire hydrant in the Solomons-Dowell community," says Garden director Stacey Hann-Ruff.
"There are plenty of hydrants. We'll choose at least a dozen artists or teams. Maybe more," says Hann-Ruff.
There are two rules: Your design must be inspired by life in and around Chesapeake Bay. It's got to be fun.
"You don't have to be a professional, just enthusiastic," says Hann-Ruff.
You've got until March 31 to create your design. All designs will be posted on Facebook for public voting. Judges will announce final decisions at a Garden reception on April 20. Win and you'll be painting your hydrant between June 1 and 17.


text:
Shooter Kills Three, Injures 16 at Fort Hood
Officials Identify the Suspect as Active-Duty Soldier Ivan Lopez
KILLEEN, Texas—For the second time in five years, an active-duty soldier is believed to have gone on a shooting rampage at Fort Hood, killing three people Wednesday at the U.S. Army post here and wounding 16 others before turning the gun on himself, officials said.
The incident comes even as emotions remain raw from a 2009 shooting at the post that ended with 13 dead and more than 30 injured. Wednesday's rampage also marks the third time in the past seven months there has been a shooting at a U.S. military base....


text:
A Google Lunar X PRIZE LEGO MINDSTORMS Challenge!
6 May 2010
MoonBots is an exciting new contest that challenges teams of students (ages 9 and up) and adults from around the globe to learn about robotics, the Moon, and space exploration by designing and constructing a LEGO MINDSTORMS robot that performs simulated lunar missions.
The MoonBots challenge is divided into two phases:
Phase 1 (April 15-May 28) During Phase I, teams study the Moon's surface and an illustration of the challenge field and use the results of this study to digitally design a LEGO MINDSTORMS robot that can solve the MoonBots challenge. A team of judges select 20 teams to move on to Phase II.
Phase II (June 21-August 14) During Phase II, teams are given a LEGO MINDSTORMS set and a MoonBots challenge field and must build their robot and solve the lunar challenge. A live, online video demonstration caps the team experience! Prizes will be awarded to the top three teams of Phase II with the grand prize being a trip for the team to the LEGO Company headquarters in Billund, Denmark! All Phase II team members will receive a two-year subscription to Wired magazine.
To learn more or register a team, visit www.MoonBots.org! Registration is open April 15-May 15. There is no cost to participate.
Search IYA2009 Updates
National Nodes: 148
Organisational Nodes: 40
Organisational Associates:33
National Websites: 111
Cornerstone Projects: 12
Special Task Groups: 11
Special Projects:16
Official Products:8
Media Partners:22


text:
share:Remind Me
powered by AFI
Brief Synopsis
An art thief tries to double cross his gangster boss.
In an Italian museum, art thief Sam Conride executes a meticulously planned robbery of a Renaissance painting of Christ that is on loan from a Taormina, Sicily church. He hides the small wooden painting in the base of his portable typewriter, then hires a boat to sail to Tunisia. Just before landing, Sam sets fire to the boat, grabs the typewriter and wades ashore as the craft explodes. Later, Sam goes to a cocktail party in Tunis and makes contact with Felix Guignol, an art dealer specializing in stolen art. Although Felix is skeptical about Sam's claim that the painting was burned, when he verifies that the boat exploded, he grudgingly accepts the story. Because Felix does not want to lose his $100,000 sale to Mr. Aramescu, a wealthy client desperate to own the painting, which purportedly has mystical powers, Sam suggests that they hire a forger to recreate five or six copies of the painting and sell each for a similar amount. Felix suggests that Sam ask Anna Vasarri, a talented young painter who has mastered the Renaissance style. After being introduced to Anna, Sam takes her home and mentions the forgery, but she is insulted. Sam apologizes, but thinks that she is holding out for more money. The next morning, when Aramescu goes to Sam's hotel room begging to buy the painting, Sam denies having it, thus convincing the suspicious Felix, who has been listening in the hallway. Sam takes Anna to lunch that afternoon and tells her that a Sicilian nobleman wants to finance a copy of the painting so that it can be placed on the altar of the Taormina church, as a comfort to the people who loved it. Touched by what she thinks is an unselfish gesture, and falling in love with Sam, Anna agrees to paint a copy. After telling Felix that Anna will do the work, Sam is visited by European art dealer R. F. Hawkley, whom Sam secretly contacted to buy the real painting. Hawkley agrees to buy the painting after his companion, MacWade, who is a chemist, verifies its age. Hawkley gives Sam a $1,000 deposit, then returns to Europe to arrange to wire the money, but insists that MacWade stay to administer a final test when the transfer is made. When Felix learns from his underlings, Charles and Anton, that a man with a large case visited Sam's room, they go to his hotel and threaten him. Sam says that MacWade was a jeweler from whom he planned to buy something for Anna. Felix, Charles and Anton then go to Anna's to see how the copy is coming, and the dense Charles lets it slip that it is to be sold. Anna then angrily goes to Sam's hotel and says that she pities him. Sam admits his guilt, but says that he loves and wants to marry her. Although he does not want to get married, Sam realizes that he must go through with it and later talks Felix into financing a honeymoon. They agree that, after the wedding, Sam and Anna will sail to Taormina, where Sam will sell the forged painting, then meet Felix in Rome. After the wedding, Sam calls MacWade to complete the sale, but learns that Hartley has called it off because of the notoriety surrounding the case. After the call, Charles enters MacWade's room and threatens him. A short time later, as Sam and Anna's boat departs for Sicily, Charles rushes to the dock with MacWade and tells Felix everything. On the boat, while Sam is on deck, his typewriter falls open onto the floor. Anna picks it up and sees the real painting, then goes to Sam. He finally admits everything, and because he now really is in love with her, tries unsuccessfully to convince her to go away before she is hurt. In Taormina, Sam visits Aramescu's hotel but is told that he is out. After he leaves, the desk clerk telephones Felix, who is also in Taormina. Meanwhile, Anna visits the local church and sadly looks at the painting's empty place on the altar. As she is about to leave, she is approached by Lt. Massiro, who tells her that he will arrest her husband for the theft, but if the painting is returned, things will be easier for him. Without admitting anything, Anna asks him not to do anything until Sunday at 8:00 p.m. The next day, while Sam is out, Anna takes the painting from the typewriter case and hides it under a table. She then takes her copy to the Roman ruins and puts it through the various processes which Sam had told her would make a new painting appear old. When the process is complete, she puts it back in the typewriter case. When Sam returns, he asks her to leave for an hour and calls Aramescu to come over with the money. Anna is meanwhile followed by Charles, who, despite Felix's orders to the contrary, threatens, then beats her to find out where the real painting is. While Aramescu is in Sam's room, Felix and Anton arrive, but Sam hides with Aramescu while they search unsuccessfully for the painting. After they leave, Sam gives Aramescu the painting from the typewriter case, but Aramescu recognizes immediately that it is a forgery. That evening, when Anna comes home, Sam bitterly confronts her because Massiro had called and talked about the Sunday agreement. Because Anna has not turned on the light, Sam does not immediately know that she has been beaten. When he sees the marks, she says that she did not reveal where the painting was because it belongs in the church. She then reveals where it is and runs off. The next morning is Sunday and Massiro awakens Sam, telling him that he only has until 8:00 pm. That evening, Felix, Anton and Charles come to Sam's room. Felix is genuinely sorry about Anna and does not interfere when Sam slugs Charles. Sam then gives Felix Aramescu's telegram offering $100,000 for the painting, and they agree to split the money. Felix, Charles and Anton leave with Anna's copy, thinking it is genuine, and Sam calls the lobby to alert the waiting Massiro. After Massiro arrests them, Sam takes the real painting and goes to the church. In the confessional, Sam talks to the priest, then leaves the painting and disappears. After verifying that the painting is genuine, the priest places it on the altar. Outside the church, Massiro tells Sam not to come back and lets Felix, Charles and Anton go. Seeing Sam and Anna walk away together, Felix philosophically says "we've lost him" and stops Charles from shooting Sam.
Cast & Crew
Additional Details
|MPAA Ratings:
|Premiere Info:
|not available
|Release Date:
|Production Date:
UCLA has 16mm print R-A4-312-2, M55918
|Black and White
|Distributions Co:
|Loew's Inc.
|Mono (Western Electric Sound System)
|Production Co:
|Metro-Goldwyn-Mayer Corp.
|90, 92 or 106-107
|Italy and United States
Leonard Maltin Ratings & Review
User Ratings & Review
This title has not been reviewed. Be the FIRST to write a review by CLICKING HERE >
User Ratings & Review
User Reviews:
Cinema History:
Lead Performers:
Supporting Cast:
Screen Play:
Music Score:
Title Sequence:
User Ratings:
the light touch
kevin sellers 2016-03-29
Kind of an ironic title considering that director Richard Brooks was one of Hollywood's more ponderous directors. Certainly in this, his second film,... MORE>
RedRain 2013-03-11
Pier Angeli was only 19 when she made this film and she was never lovelier; however, she still had a very thick Italian accent and it made her speech... MORE>
"The Light Touch"
Diane Wilmanski 2012-01-30
This was an excellent movie. I had heard of it before, but never saw it until it appeared on TCM. Both George Saunders and Stewart Granger worked well... MORE>


text: The official site for straight college fraternity guys getting hazed into gay sex. You get your pledges to do gay sex acts and we give you a chance to win $10,000 cash. Sound fun and easy? Well, your gosh darn right it is. Crazier the video the better your chances at winning. So what are you waiting for? Watch and enjoy real frat boys sucking and fucking cock..!


text:
Great58 wrote:Shaky Walton wrote:I is time for a change and something has to give. But just like MAF, Danny boy gets a free pass because he won a CUP. That is ancient history and it is now going into 2014. Things must change in order to move forward. Let the ax fall, the sooner the better
A three game slump isn't going to get anyone fired.
If you think any of this is about a 3 game losing streak, you're not paying attention.
The same negatives and weaknesses year after year. You could easily argue regression in some facets of the team.
As much as I wanted DB gone years ago, I don't think he's going anywhere until after the season. We get to hear him blame everything and everyone else for their issues until next off season. He ranks up there with Beaudreau's tenure with Washington and Stevens' tenure with Philly in terms of lack of personal accountability. I lose respect for the guy every time he comes up with an excuse for his team of all stars coming up short.


text:
I'm in graduate school for computer science and the department is offering a game design class. This is the only class that is offered by the cs department that has anything to do with games.
I have been focusing on software engineering and computer graphics in my studies so far and have to choose between this game design course and a course that focuses on GPUs and Visualization in a virtual reality environment.
I think both would be fun, but in the long run I want to make games. Either as a hobby or professionally. I feel that I will eventually work for a software company and do game development on the side, after hours, until I was able to support myself doing it.
I've never actually created a game yet. I've just been studying software engineering, graphics, and have read a couple books on game design.
The class is project based. We are put into teams and told to make a prototype with development times of like 2 weeks( first project ), 4 weeks( second project ), and 6 weeks( final project ). I do feel like the class is basically learn on your own with the pressure of a deadline to get you motivated.
Does this sound like a class that would be helpful? Everything I would learn in the other class, which I feel would be advancing my graphics skills, I also want to learn either on my own or in class.


text:
In a culture starving for truth, God is calling us to do more than read His Word, He is calling us to know it and live it. That's why Explore the Bible provides book-by-book Bible studies for groups of adults, students, and kids. Each session takes participants deep into Scripture, revealing context essential to understanding the text's original intent, and promoting transformation through God's Word in everyday life.Read Why Context Matters
Browse Current Studiesshop all products
"When you align your ministry on a book-by-book discipleship plan, you see testimonies like Sophia's and you attract leaders like Mike."watch the whole story
Every age level follows a book-by-book study plan at their own age-appropriate depth and pace. Each plan is carefully crafted to provide regular study of all types of biblical literature. For families that wish to explore together, a family discussion piece is provided for each session. View detailed study plans for kids, students, and adults by clicking below.Download the Study Plans
This free video training library will help you understand how to implement age appropriate, book-by-book group Bible study for adults, students, and kids.Watch Now
Personal Study GuidePersonal Study Guides* are the key to engaging and equipping the people in your groups. Learn more about these effective and affordable resources for adults, students, kids, and preschoolers.
*Called Explorer Guide for Kids and Activity Pages for Preschoolers
Explore the Bible is available in Spanish!Learn More
Need help building your order? Start herex


text:
Mystery man: Ukraine's U.S. fixer
His friends once called him the Count of Monte Cristo.
Today, Paul Manafort is more like The Invisible Man — a worldly political pro whose latest adventure, whispering in the ear of Ukrainian presidential candidate Viktor Yanukovych, has handed him a supporting role in a bona fide international crisis.
Story Continued Below
Over three decades in Washington, Manafort built a storied career as a Beltway man of mystery: a famously discreet operative who worked for Ronald Reagan and George H. W. Bush, steered the 1996 GOP convention and built not one but two white-shoe D.C. lobbying shops, a pair of firms that bore Manafort's name and catered to an eclectic stable of clients including anti-communist Angolan rebels and Ferdinand Marcos, the dictator of the Philippines.
Then, Manafort all but vanished from the Washington scene.
( PHOTOS: American political consultants in Ukraine)
Once-intimate colleagues say they have not seen Manafort, 64, in years and hear from him only in occasional email missives. His most recent firm, Davis Manafort, functionally broke up shortly after the 2008 presidential election.
As that campaign was unfolding in the United States, the notorious political fixer emerged overseas, playing a familiar role in an unfamiliar place: advising Yanukovych, the pro-Russian strongman whose ouster last month has triggered an international crisis reminiscent of a Cold War spy novel.
On Monday, as Russian gunships menaced the Ukrainian fleet in the Black Sea, Manafort's former business partner Roger Stone sent out an email to a small group of friends asking wryly: "Where is Paul Manafort?"
A multiple-choice list of options followed, including: "Was seen chauffeuring Yanukovych around Moscow," and "Was seen loading gold bullion on an Army Transport plane from a remote airstrip outside Kiev and taking off seconds before a mob arrived at the site." The final option was: "Is playing Golf in Palm Beach."
( Also on POLITICO: What the White House is thinking on Ukraine)
The answer to Stone's query is currently unclear. Manafort's current location and involvement in Ukraine, not surprisingly, are a mystery. He did not respond to messages sent to half a dozen email accounts or answer calls to nearly as many phone numbers at addresses in Virginia and South Florida.
What's already certain is this: Even among the many American strategists who test their fortunes abroad, Manafort's journey from the front lines of the Reagan revolution to the right hand of a Moscow-backed Eastern bloc pol straight out of central casting ranks as one of the more unusual escapades of the Washington consulting class.
To past associates of Manafort, it comes as little surprise that he would be tied into tumult half a world away.
"We fondly used to refer to him as 'The Count' — 'The Count of Monte Cristo.' It was just the whole air about him," recalled Scott Reed, who managed Bob Dole's 1996 presidential campaign. Another Manafort colleague said the nickname came from Manafort's penchant for swirling his coat around his shoulders dramatically.
Manafort's friends describe his relationship with Yanukovych as a political love connection, born out of Yanukovych's first downfall when he was driven from power by the 2004 Orange Revolution. Feeling that his domestic political advisers had failed him, Yanukovych turned to a foreign company, Davis Manafort, which was already doing work for the Ukrainian oligarch Rinat Akhmetov. The former Ukrainian PM and Manafort, the Georgetown-educated son of a Connecticut politician, hit it off.
Manafort's firm had a set of international clients and produced an analysis of the Orange Revolution that Yanukovych found instructive, according to one operative involved in Yanukovych's political rehabilitation. Manafort became, in effect, a general consultant to Yanukovych's Party of Regions, shaping big-picture messaging, coaching Yanukovych to speak in punchy, American-style sound bites and managing teams of consultants and attorneys in both Ukraine and the United States ahead of an anticipated Yanukovych comeback. While it's difficult to track payments in foreign elections, a former associate familiar with Manafort's earnings say they ran into the seven figures over several years.
After Yanukovych's 2010 victory, Manafort stayed on as an adviser to the Russia-friendly president and became involved in other business projects in Eastern Europe. In 2012, then-U.S. Ambassador to Ukraine John Tefft told the newspaper Ukrainska Pravda that he had met with Manafort, though he declined to elaborate on the American's role there.
( On POLITICO Magazine: The steel in President Obama's spine)
Several consultants who worked with Manafort during the Yanukovych election say the Republican truly believed in the now-deposed politician's capabilities as a leader and doubted that his competitors — widely seen as more pro-Western — had more productive aspirations for the country.
To view foreign political schisms less in terms of ideology than pure power politics would be characteristic, Manafort's colleagues say, of such an experienced political mercenary — a deliberately secretive man who was advising Ferdinand Marcos a decade before Yanukovych even entered politics in the mid-1990s.
"Paul is a very, very smart and experienced political strategist," said Charlie Black, the veteran Republican consigliere who co-founded the lobbying firm Black, Manafort and Stone in 1980. "I do know that Yanukovych kept him around as an adviser, so he must have thought he had done a good job for him."
( Also on POLITICO: Putin: U.S. doing lab rat experiments)
When Black and Manafort worked together, the Yanukovych booster was no stranger to controversy. In 1989, Manafort was hauled in front of a congressional panel for allegedly working to steer funds from the Department of Housing and Urban Development into a slum-like New Jersey real estate development. Manafort, caused a stir then on the Hill with a tart defense of his profession. "You might call it influence-peddling," he said, according to reports. "I call it lobbying."
Stone, another named partner of the long since disbanded firm, described his former collaborator as "charming, entertaining, well-tailored and he certainly understands power and how it works." And Stone would know: Manafort, helped run Stone's campaign to lead the Young Republicans.


text:
Latest News
Detainee who won Guantanamo habeas case to go to France
France says it will take in an Algerian who has been held prisoner by the United States at Guantanamo Bay for the past seven years.
Lakhdar Boumediene, 43, was arrested along with five other Algerians in 2001 in Bosnia, suspected in a bomb attack plot against the U.S. Embassy in Sarajevo.
A U.S. federal judge ruled in November that the evidence against Boumediene was not credible and ordered him set free.
He arrived in Guantanamo in January 2002, and has been on a hunger strike to protest his detention since Christmas 2006. His attorney says the five-foot, nine-inch detainee, who now weighs 130 pounds, is fed daily a nutritional shake through a tube that U.S. military medical personal snake up his nose and into his stomach.
France's Foreign Ministry did not say Wednesday why Boumediene was not going back to Algeria or when Boumediene would be transferred from the base in southeast Cuba.
President Barack Obama has promised to close the prison at Guantanamo by Jan. 22, and has urged other countries to help take prisoners from there.
France agreed to accept Guantanamo prisoners when Obama attended the NATO summit in April.
Boumediene's lawyers say he has sisters-in-law and nieces or nephews living in the south of France who can help him resettle there. His wife and children moved back to Algeria after his detention in Sarajevo.
Boumediene's case may be better known than some of the other Guantanamo detainees because it was in his name that civil liberties attorneys argued at the U.S. Supreme Court the most recent case of the captives' rights to seek their release through habeas corpus petitions.
The court ruled for the detainees in Boumediene v. Bush.


text:
This chapter describes how STREAMS multiplexing configurations are created and also discusses multiplexing drivers. A STREAMS multiplexer is a driver with multiple streams connected to it. The primary function of the multiplexing driver is to switch messages among the connected streams. Multiplexer configurations are created from the user level by system calls.
This chapter contains the following information:
STREAMS-related system calls are used to set up the "plumbing," or stream interconnections, for multiplexing drivers. The subset of these calls that allows a user to connect (and disconnect) streams below a driver is referred to as multiplexing. This type of connection is referred to as a one-to-M, or lower, multiplexer configuration. This configuration must always contain a multiplexing driver, which is recognized by STREAMS as having special characteristics.
Multiple streams can be connected above a driver by open(2) calls. This accommodates the loop-around driver and the driver that handled multiple minor devices in Chapter 9, STREAMS Drivers. There is no difference between the connections to these drivers. Only the functions performed by the driver are different. In the multiplexing case, the driver routes data between multiple streams. In the device driver case, the driver routes data between user processes and associated physical ports. Multiplexing with streams connected above is referred to as an N-to-1, or upper, multiplexer. STREAMS does not provide any facilities beyond open and close to connect or disconnect upper streams for multiplexing.
From the driver's perspective, upper and lower configurations differ only in the way they are initially connected to the driver. The implementation requirements are the same: route the data and handle flow control. All multiplexer drivers require special developer-provided software to perform the multiplexing data routing and to handle flow control. STREAMS does not directly support flow control among multiplexed streams. M-to-N multiplexing configurations are implemented by using both of these mechanisms in a driver.
As discussed in Chapter 9, STREAMS Drivers, the multiple streams that represent minor devices are actually distinct streams in which the driver keeps track of each stream attached to it. The STREAMS subsystem does not recognize any relationship between the streams. The same is true for STREAMS multiplexers of any configuration. The multiplexed streams are distinct and the driver must be implemented to do most of the work.
In addition to upper and lower multiplexers, more complex configurations can be created by connecting streams containing multiplexers to other multiplexer drivers. With such a diversity of needs for multiplexers, providing general-purpose multiplexer drivers is not possible. Rather, STREAMS provides a general purpose multiplexing facility. The facility enables you to set up the intermodule or driver plumbing to create multiplexer configurations of generally unlimited interconnection.
The example in this section builds a protocol multiplexer with the multiplexing configuration shown in Figure 13–1. To free users from the need to know about the underlying protocol structure, a user-level daemon process is built to maintain the multiplexing configuration. Users can then access the transport protocol directly by opening the transport protocol (TP) driver device node.
An internetworking protocol driver (IP) routes data from a single upper stream to one of two lower streams. This driver supports two STREAMS connections beneath it. These connections are to two distinct networks; one for the IEEE 802.3 standard through the 802.3 driver, and another to the IEEE 802.4 standard through the 802.4 driver. The TP driver multiplexes upper streams over a single stream to the IP driver.
Example 13–1 shows how this daemon process sets up the protocol multiplexer. The necessary declarations and initialization for the daemon program follow.
#include <fcntl.h> #include <stropts.h> void main() { int fd_802_4, fd_802_3, fd_ip, fd_tp; /* daemon-ize this process */ switch (fork()) { case 0: break; case -1: perror("fork failed"); exit(2); default: exit(0); } (void)setsid();
This multilevel multiplexed stream configuration is built from the bottom up. The example begins by first constructing the IP multiplexer. This multiplexing device driver is treated like any other software driver. It owns a node in the Solaris file system and is opened just like any other STREAMS device driver.
The first step is to open the multiplexing driver and the 802.4 driver, thus creating separate streams above each driver as shown in Figure 13–2. The stream to the 802.4 driver may now be connected below the multiplexing IP driver using the I_LINK ioctl(2).
The sequence of instructions to this point is:
if ((fd_802_4 = open("/dev/802_4", O_RDWR)) < 0) { perror("open of /dev/802_4 failed"); exit(1); } if ((fd_ip = open("/dev/ip", O_RDWR)) < 0) { perror("open of /dev/ip failed"); exit(2); } /* now link 802.4 to underside of IP */ if (ioctl(fd_ip, I_LINK, fd_802_4) < 0) { perror("I_LINK ioctl failed"); exit(3); }
I_LINK takes two file descriptors as arguments. The first file descriptor, fd_ip, is the stream connected to the multiplexing driver, and the second file descriptor, fd_802_4, is the stream to be connected below the multiplexer. The complete stream to the 802.4 driver is connected below the IP driver. The stream head's queues of the 802.4 driver are used by the IP driver to manage the lower half of the multiplexer.
I_LINK returns an integer value, muxid, which is used by the multiplexing driver to identify the stream just connected below it. muxid is ignored in the example, but it is useful for dismantling a multiplexer or routing data through the multiplexer. Its significance is discussed in Dismantling a Multiplexer.
The following sequence of system calls continues building the Internetworking Protocol multiplexer (IP):
if ((fd_802_3 = open("/dev/802_3", O_RDWR)) < 0) { perror("open of /dev/802_3 failed"); exit(4); } if (ioctl(fd_ip, I_LINK, fd_802_3) < 0) { perror("I_LINK ioctl failed"); exit(5); }
The stream above the multiplexing driver used to establish the lower connections is the controlling stream and has special significance when dismantling the multiplexing configuration. This is illustrated in Dismantling a Multiplexer. The stream referenced by fd_ip is the controlling stream for the IP multiplexer.
The order in which the streams in the multiplexing configuration are opened is unimportant. If intermediate modules in the stream are necessary between the IP driver and media drivers, these modules must be added to the streams associated with the media drivers (using I_PUSH) before the media drivers are attached below the multiplexer.
The number of streams that can be linked to a multiplexer is restricted by the design of the particular multiplexer. The manual page describing each driver describes such restrictions (see SunOS Reference Manual, Intro(7)). However, only one I_LINK operation is allowed for each lower stream; a single stream cannot be linked below two multiplexers simultaneously.
Continuing with the example, the IP driver is now linked below the transport protocol (TP) multiplexing driver. As seen in Figure 13–1, only one link is supported below the transport driver. This link is formed by the following sequence of system calls:
if ((fd_tp = open("/dev/tp", O_RDWR)) < 0) { perror("open of /dev/tp failed"); exit(6); } if (ioctl(fd_tp, I_LINK, fd_ip) < 0) { perror("I_LINK ioctl failed"); exit(7); }
Because the controlling stream of the IP multiplexer has been linked below the TP multiplexer, the controlling stream for the new multilevel multiplexer configuration is the stream above the TP multiplexer.
At this point, the file descriptors associated with the lower drivers can be closed without affecting the operation of the multiplexer. If these file descriptors are not closed, all subsequent read(2), write(2), ioctl(2), poll(2), getmsg(2), and putmsg(2) calls issued to them fail. That is because I_LINK associates the stream head of each linked stream with the multiplexer, so the user may not access that stream directly for the duration of the link.
The following sequence of system calls completes the daemon example:
close(fd_802_4); close(fd_802_3); close(fd_ip); /* Hold multiplexer open forever or at least til this process is terminated by an external UNIX signal */ pause(); }
The transport driver supports several simultaneous streams. These streams are multiplexed over the single stream connected to the IP multiplexer. The mechanism for establishing multiple streams above the transport multiplexer is actually a by-product of the way in which streams are created between a user process and a driver. By opening different minor devices of a STREAMS driver, separate streams will be connected to that driver. The driver must be designed with the intelligence to route data from the single lower stream to the appropriate upper stream.
The daemon process maintains the multiplexed stream configuration through an open stream (the controlling stream) to the transport driver. Meanwhile, other users can access the services of the transport protocol by opening new streams to the transport driver; they are freed from the need for any unnecessary knowledge of the underlying protocol configurations and subnetworks that support the transport service.
Multilevel multiplexing configurations should be assembled from the bottom up. That is because the passing of ioctl(2) through the multiplexer is determined by the nature of the multiplexing driver and cannot generally be relied on.
Streams connected to a multiplexing driver from above with open(2), can be dismantled by closing each stream with close(2). The mechanism for dismantling streams that have been linked below a multiplexing driver is less obvious, and is described in Disconnecting Lower Streams.
I_UNLINK ioctl(2) disconnects each multiplexer link below a multiplexing driver individually. This command has the form:
ioctl(fd, I_UNLINK, muxid);
where fd is a file descriptor associated with a stream connected to the multiplexing driver from above, and muxid is the identifier that was returned by I_LINK when a driver was linked below the multiplexer. Each lower driver may be disconnected individually in this way, or a special muxid value of MUXID_ALL can be used to disconnect all drivers from the multiplexer simultaneously.
In the multiplexing daemon program, the multiplexer is never explicitly dismantled. That is because all links associated with a multiplexing driver are automatically dismantled when the controlling stream associated with that multiplexer is closed. Because the controlling stream is open to a driver, only the final call of close for that stream will close it. In this case, the daemon is the only process that has opened the controlling stream, so the multiplexing configuration will be dismantled when the daemon exits.
For the automatic dismantling mechanism to work in the multilevel, multiplexed stream configuration, the controlling stream for each multiplexer at each level must be linked under the next higher-level multiplexer. In the example, the controlling stream for the IP driver was linked under the TP driver. This resulted in a single controlling stream for the full, multilevel configuration. Because the multiplexing program relied on closing the controlling stream to dismantle the multiplexed stream configuration instead of using explicit I_UNLINK calls, the muxid values returned by I_LINK could be ignored.
An important side effect of automatic dismantling on the close is that a process cannot build a multiplexing configuration with I_LINK and then exit. exit(2) closes all files associated with the process, including the controlling stream. To keep the configuration intact, the process must exist for the life of that multiplexer. That is the motivation for implementing the multiplexer as a daemon processs, see Multiplexing Driver Example.
If the process uses persistent links through I_PLINK ioctl(2), the multiplexer configuration remains intact after the process exits. These links are described in Persistent Links.
As demonstrated, STREAMS provides a mechanism for building multiplexed stream configurations. However, the criteria by which a multiplexer routes data are driver dependent. For example, the protocol multiplexer might use address information found in a protocol header to determine the subnetwork over which data should be routed. You must define its routing criteria.
One routing option available to the multiplexer is to use the muxid value to determine the stream to which data is routed (remember that each multiplexer link has a muxid). I_LINK passes the muxid value to the driver and returns this value to the user. The driver can therefore specify that the muxid value accompany data routed through it. For example, if a multiplexer routed data from a single upper stream to one of several lower streams (as did the IP driver), the multiplexer can require the user to insert the muxid of the desired lower stream into the first four bytes of each message passed to it. The driver can then match the muxid in each message with the muxid of each lower stream, and route the data accordingly.
Multiple streams are created above a driver/multiplexer by use of the open system call on either different minor device, or on a cloneable device file. Note that any driver that handles more than one minor device is considered an upper multiplexer.
To connect streams below a multiplexer requires additional software in the multiplexer. The main difference between STREAMS lower multiplexers and STREAMS device drivers is that multiplexers are pseudo-devices and multiplexers have two additional qinit structures, pointed to by fields in streamtab(9S): the lower half read-side qinit(9S) and the lower half write-side qinit(9S).
The multiplexer is divided into two parts: the lower half and the upper half. The multiplexer queue structures allocated when the multiplexer was opened use the usual qinit entries from the multiplexer's streamtab(9S). This is the same as any open of the STREAMS device. When a lower stream is linked beneath the multiplexer, the qinit structures at the stream head are substituted by the lower half qinit(9S) structures identified in the streamstab for the multiplexers. Once the linkage is made, the multiplexer switches messages between upper and lower streams. When messages reach the top of the lower stream, they are handled by put and service routines specified in the bottom half of the multiplexer.
A lower multiplexer is connected as follows: the initial open to a multiplexing driver creates a stream, as in any other driver. open uses the st_rdinit and st_wrinit elements of the streamtab structure to initialize the driver queues.. At this point, the only distinguishing characteristics of this stream are non-NULL entries in the streamtab(9S) st_muxrinit and st_muxwinit fields.
These fields are ignored by open. Any other stream subsequently opened to this driver will have the same streamtab and thereby the same mux fields.
Next, another file is opened to create a (soon-to-be) lower stream. The driver for the lower stream is typically a device driver This stream has no distinguishing characteristics. It can include any driver compatible with the multiplexer. Any modules required on the lower stream must be pushed onto it now.
Next, this lower stream is connected below the multiplexing driver with an I_LINK ioctl(2) (see streamio(7I)). The stream head points to the stream head routines as its procedures (through its queue). An I_LINK to the upper stream, referencing the lower stream, causes STREAMS to modify the contents of the stream head's queues in the lower stream. The pointers to the stream head routines, and other values, in the stream head's queues are replaced with those contained in the mux fields of the multiplexing driver's streamtab. Changing the stream head routines on the lower stream means that all subsequent messages sent upstream by the lower stream's driver are passed to the put procedure designated in st_muxrinit, the multiplexing driver. The I_LINK also establishes this upper stream as the control stream for this lower stream. STREAMS remembers the relationship between these two streams until the upper stream is closed or the lower stream is unlinked.
Finally, the stream head sends an M_IOCTL message with ioc_cmd set to I_LINK to the multiplexing driver. The M_DATA part of the M_IOCTL contains a linkblk(9S) structure. The multiplexing driver stores information from the linkblk(9S) structure in private storage and returns an M_IOCACK acknowledgement. l_index is returned to the process requesting the I_LINK. This value is used later by the process to disconnect the stream.
An I_LINK is required for each lower stream connected to the driver. Additional upper streams can be connected to the multiplexing driver by open calls. Any message type can be sent from a lower stream to user processes along any of the upper streams. The upper streams provide the only interface between the user processes and the multiplexer.
No direct data structure linkage is established for the linked streams. The read queue's q_next is NULL and the write queue's q_next points to the first entity on the lower stream. Messages flowing upstream from a lower driver (a device driver or another multiplexer) will enter the multiplexing driver put procedure with the queue represented in l_qbot as the queue_t for the put procedure. The multiplexing driver has to route the messages to the appropriate upper (or lower) stream. Similarly, a message coming downstream from user space on any upper stream has to be processed and routed, if required, by the driver.
It is the responsibility of the driver to handle routing of messages between the upper and lower streams, or between any lateral stream that is part of the multiplexer. This operation is not handled by the STREAMS framework.
In general, multiplexing drivers should be implemented so that new streams can be dynamically connected to (and existing streams disconnected from) the driver without interfering with its ongoing operation. The number of streams that can be connected to a multiplexer is implementation dependent.
Dismantling a lower multiplexer is accomplished by disconnecting (unlinking) the lower streams. Unlinking can be initiated in three ways:
An I_UNLINK ioctl(2) referencing a specific stream
An I_UNLINK indicating all lower streams
The last close of the control stream
As in the link, an unlink sends a linkblk(9S) structure to the driver in an M_IOCTL message. The I_UNLINK call, which unlinks a single stream, uses the l_index value returned in the I_LINK to specify the lower stream to be unlinked. The latter two calls must designate a file corresponding to a control stream, which causes all the lower streams that were previously linked by this control stream to be unlinked. However, the driver sees a series of individual unlinks.
If no open references exist for a lower stream, a subsequent unlink will automatically close the stream. Otherwise, the lower stream must be closed by close(2) following the unlink. STREAMS automatically dismantles all cascaded multiplexers (below other multiplexing streams) if their controlling stream is closed. An I_UNLINK leaves lower, cascaded multiplexing streams intact unless the stream file descriptor was previously closed.
This section describes an example of multiplexer construction and usage. Multiple upper and lower streams interface to the multiplexer driver.
The Ethernet, LAPB, and IEEE 802.2 device drivers terminate links to other nodes. The multiplexer driver is an Internet Protocol (IP) multiplexer that switches data among the various nodes or sends data upstream to users in the system. The net modules typically provide a convergence function that matches the multiplexer driver and device driver interface.
Streams A, B, and C are opened by the process, and modules are pushed as needed. Two upper streams are opened to the IP multiplexer. The rightmost stream represents multiple streams, each connected to a process using the network. The stream second from the right provides a direct path to the multiplexer for supervisory functions. The control stream, leading to a process, sets up and supervises this configuration. It is always directly connected to the IP driver. Although not shown, modules can be pushed on the control stream.
After the streams are opened, the supervisory process typically transfers routing information to the IP drivers (and any other multiplexers above the IP), and initializes the links. As each link becomes operational, its stream is connected below the IP driver. If a more complex multiplexing configuration is required, the IP multiplexer stream with all its connected links can be connected below another multiplexer driver.
This section contains an example of a multiplexing driver that implements an N-to-1 configuration. This configuration might be used for terminal windows, where each transmission to or from the terminal identifies the window. This resembles a typical device driver, with two differences: the device-handling functions are performed by a separate driver, connected as a lower stream, and the device information (that is, relevant user process) is contained in the input data rather than in an interrupt call.
Each upper stream is created by open(2). A single lower stream is opened and then it is linked by use of the multiplexing facility. This lower stream might connect to the TTY driver. The implementation of this example is a foundation for an M-to-N multiplexer.
As in the loop-around driver (Chapter 9, STREAMS Drivers), flow control requires the use of standard and special code because physical connectivity among the streams is broken at the driver. Different approaches are used for flow control on the lower stream, for messages coming upstream from the device driver, and on the upper streams, for messages coming downstream from the user processes.
The code presented here for the multiplexing driver represents a single-threaded, uniprocessor implementation. See Chapter 12, Multithreaded STREAMS for details on multiprocessor and multithreading issues such as locking for data corruption and to prevent race conditions.
Example 13–2 is of multiplexer declarations:
#include <sys/types.h> #include <sys/param.h> #include <sys/stream.h> #include <sys/stropts.h> #include <sys/errno.h> #include <sys/cred.h> #include <sys/ddi.h> #include <sys/sunddi.h> static int muxopen (queue_t*, dev_t*, int, int, cred_t*); static int muxclose (queue_t*, int, cred_t*); static int muxuwput (queue_t*, mblk_t*); static int muxlwsrv (queue_t*); static int muxlrput (queue_t*, mblk_t*); static int muxuwsrv (queue_t*); static struct module_info info = { 0xaabb, "mux", 0, INFPSZ, 512, 128 }; static struct qinit urinit = { /* upper read */ NULL, NULL, muxopen, muxclose, NULL, &info, NULL }; static struct qinit uwinit = { /* upper write */ muxuwput, muxuwsrv, NULL, NULL, NULL, &info, NULL }; static struct qinit lrinit = { /* lower read */ muxlrput, NULL, NULL, NULL, NULL, &info, NULL }; static struct qinit lwinit = { /* lower write */ NULL, muxlwsrv, NULL, NULL, NULL, &info, NULL }; struct streamtab muxinfo = { &urinit, &uwinit, &lrinit, &lwinit }; struct mux { queue_t *qptr; /* back pointer to read queue */ int bufcid; /* bufcall return value */ }; extern struct mux mux_mux[]; extern int mux_cnt; /* max number of muxes */ static queue_t *muxbot; /* linked lower queue */ static int muxerr; /* set if error of hangup on lower strm */
The four streamtab entries correspond to the upper read, upper write, lower read, and lower write qinit structures. The multiplexing qinit structures replace those in each lower stream head (in this case there is only one) after the I_LINK has concluded successfully. In a multiplexing configuration, the processing performed by the multiplexing driver can be partitioned between the upper and lower queues. There must be an upper-stream write put procedure and lower-stream read put procedure. If the queue procedures of the opposite upper/lower queue are not needed, the queue can be skipped, and the message put to the following queue.
In the example, the upper read-side procedures are not used. The lower-stream read queue put procedure transfers the message directly to the read queue upstream from the multiplexer. There is no lower write put procedure because the upper write put procedure directly feeds the lower write queue downstream from the multiplexer.
The driver uses a private data structure, mux. mux_mux[dev] points back to the opened upper read queue. This is used to route messages coming upstream from the driver to the appropriate upper queue. It is also used to find a free major or minor device for a CLONEOPEN driver open case.
Example 13–3, the upper queue open, contains the canonical driver open code.
static int muxopen(queue_t *q, dev_t *devp, int flag, int sflag, cred_t *credp) { struct mux *mux; minor_t device; if (q->q_ptr) return(EBUSY); if (sflag == CLONEOPEN) { for (device = 0; device < mux_cnt; device++) if (mux_mux[device].qptr == 0) break; *devp=makedevice(getmajor(*devp), device); } else { device = getminor(*devp); if (device >= mux_cnt) return ENXIO; } mux = &mux_mux[device]; mux->qptr = q; q->q_ptr = (char *) mux; WR(q)->q_ptr = (char *) mux; qprocson(q); return (0); }
muxopen checks for a clone or ordinary open call. It initializes q_ptr to point at the mux_mux[] structure.
The core multiplexer processing is as follows: downstream data written to an upper stream is queued on the corresponding upper write message queue if the lower stream is flow controlled. This allows flow control to propagate toward the stream head for each upper stream. A lower write service procedure, rather than a write put procedure, is used so that flow control, coming up from the driver below, may be handled.
On the lower read side, data coming up the lower stream are passed to the lower read put procedure. The procedure routes the data to an upper stream based on the first byte of the message. This byte holds the minor device number of an upper stream. The put procedure handles flow control by testing the upper stream at the first upper read queue beyond the driver.
muxuwput, the upper-queue write put procedure, traps ioctl calls, in particular I_LINK and I_UNLINK:
static int /* * This is our callback routine used by bufcall() to inform us * when buffers become available */ static void mux_qenable(long ql) { queue_t *q = (queue_t *ql); struct mux *mux; mux = (struct mux *)(q->q_ptr); mux->bufcid = 0; qenable(q); } muxuwput(queue_t *q, mblk_t *mp) { struct mux *mux; mux = (struct mux *)q->q_ptr; switch (mp->b_datap->db_type) { case M_IOCTL: { struct iocblk *iocp; struct linkblk *linkp; /* * ioctl. Only channel 0 can do ioctls. Two * calls are recognized: LINK, and UNLINK */ if (mux != mux_mux) goto iocnak; iocp = (struct iocblk *) mp->b_rptr; switch (iocp->ioc_cmd) { case I_LINK: /* *Link. The data contains a linkblk structure *Remember the bottom queue in muxbot. */ if (muxbot != NULL) goto iocnak; linkp=(struct linkblk *) mp->b_cont->b_rptr; muxbot = linkp->l_qbot; muxerr = 0; mp->b_datap->db_type = M_IOCACK; iocp->ioc_count = 0; qreply(q, mp); break; case I_UNLINK: /* * Unlink. The data contains a linkblk struct. * Should not fail an unlink. Null out muxbot. */ linkp=(struct linkblk *) mp->b_cont->b_rptr; muxbot = NULL; mp->b_datap->db_type = M_IOCACK; iocp->ioc_count = 0; qreply(q, mp); break; default: iocnak: /* fail ioctl */ mp->b_datap->db_type = M_IOCNAK; qreply(q, mp); } break; } case M_FLUSH: if (*mp->b_rptr & FLUSHW) flushq(q, FLUSHDATA); if (*mp->b_rptr & FLUSHR) { *mp->b_rptr &= ~FLUSHW; qreply(q, mp); } else freemsg(mp); break; case M_DATA:{ */ * Data. If we have no lower queue --> fail * Otherwise, queue the data and invoke the lower * service procedure. mblk_t *bp; if (muxerr || muxbot == NULL) goto bad; if ((bp = allocb(1, BPRI_MED)) == NULL) { putbq(q, mp); mux->bufcid = bufcall(1, BPRI_MED, mux_qenable, (long)q); break; } *bp->b_wptr++ = (struct mux *)q->ptr - mux_mux; bp->b_cont = mp; putq(q, bp); break; } default: bad: /* * Send an error message upstream. */ mp->b_datap->db_type = M_ERROR; mp->b_rptr = mp->b_wptr = mp->b_datap->db_base; *mp->b_wptr++ = EINVAL; qreply(q, mp); } }
First, there is a check to enforce that the stream associated with minor device 0 will be the single, controlling stream. The ioctls are only accepted on this stream. As described previously, a controlling stream is the one that issues the I_LINK. There should be only a single control stream. I_LINK and I_UNLINK include a linkblk structure containing the following fields:
l_qtop is the upper write queue from which the ioctl(2) comes. It always equals q for an I_LINK, and NULL for I_PLINK.
l_qbot is the new lower write queue. It is the former stream head write queue and is where the multiplexer gets and puts its data.
l_index is a unique (system-wide) identifier for the link. It can be used for routing or during selective unlinks. Since the example only supports a single link, l_index is not used.
For I_LINK, l_qbot is saved in muxbot and a positive acknowledgement is generated. From this point on, until an I_UNLINK occurs, data from upper queues will be routed through muxbot. Note that when an I_LINK, is received, the lower stream has already been connected. This enables the driver to send messages downstream to perform any initialization functions. Returning an M_IOCNAK message (negative acknowledgement) in response to an I_LINK causes the lower stream to be disconnected.
The I_UNLINK handling code nulls out muxbot and generates a positive acknowledgement. A negative acknowledgement should not be returned to an I_UNLINK. The stream head ensures that the lower stream is connected to a multiplexer before sending an I_UNLINK M_IOCTL.
Drivers can handle the persistent link requests I_PLINK and I_PUNLINK ioctl(2) in the same manner, except that l_qtop in the linkblk structure passed to the put routine is NULL instead of identifying the controlling stream.
muxuwput handles M_FLUSH messages as a normal driver does, except that there are no messages queued on the upper read queue, so there is no need to call flushq if FLUSHR is set.
M_DATA messages are not placed on the lower write message queue. They are queued on the upper write message queue. When flow control subsides on the lower stream, the lower service procedure, muxlwsrv, is scheduled to start output. This is similar to starting output on a device driver.
The following example shows the code for the upper multiplexer write service procedure:
static int muxuwsrv(queue_t *q) { mblk_t *mp; struct mux *muxp; muxp = (struct mux *)q->q_ptr; if (!muxbot) { flushq(q, FLUSHALL); return (0); } if (muxerr) { flushq(q, FLUSHALL); return (0); } while (mp = getq(q)) { if (canputnext(muxbot)) putnext(muxbot, mp); else { putbq(q, mp); return(0); } } return (0); }
As long as there is a stream still linked under the multiplexer and there are no errors, the service procedure will take a message off the queue and send it downstream, if flow control allows.
muxlwsrv, the lower (linked) queue write service procedure is scheduled as a result of flow control subsiding downstream (it is back-enabled).
static int muxlwsrv(queue_t *q) { int i; for (i = 0; i < mux_cnt; i++) if (mux_mux[i].qptr && mux_mux[i].qptr->q_first) qenable(mux_mux[i].qptr); return (0); }
muxlwsrv steps through all possible upper queues. If a queue is active and there are messages on the queue, then its upper write service procedure is enabled through qenable.
The lower (linked) queue read put procedure is shown in the following example:
static int muxlrput(queue_t *q, mblk_t *mp) { queue_t *uq; int device; if(muxerr) { freemsg(mp); return (0); } switch(mp->b_datap->db_type) { case M_FLUSH: /* * Flush queues. NOTE: sense of tests is reversed * since we are acting like a "stream head" */ if (*mp->b_rptr & FLUSHW) { *mp->b_rptr &= ~FLUSHR; qreply(q, mp); } else freemsg(mp); break; case M_ERROR: case M_HANGUP: muxerr = 1; freemsg(mp); break; case M_DATA: /* * Route message. First byte indicates * device to send to. No flow control. * * Extract and delete device number. If the * leading block is now empty and more blocks * follow, strip the leading block. */ device = *mp->b_rptr++; /* Sanity check. Device must be in range */ if (device < 0 || device >= mux_cnt) { freemsg(mp); break; } /* * If upper stream is open and not backed up, * send the message there, otherwise discard it. */ uq = mux_mux[device].qptr; if (uq != NULL && canputnext(uq)) putnext(uq, mp); else freemsg(mp); break; default: freemsg(mp); } return (0); }
muxlrput receives messages from the linked stream. In this case, it is acting as a stream head and handles M_FLUSH messages. The code is the reverse of a driver, handling M_FLUSH messages from upstream. There is no need to flush the read queue because no data is ever placed in it.
muxlrput also handles M_ERROR and M_HANGUP messages. If one is received, it locks up the upper streams by setting muxerr.
M_DATA messages are routed by checking the first data byte of the message. This byte contains the minor device of the upper stream. Several checks examine whether:
The device is in range
The upper stream is open
The upper stream is full
This multiplexer does not support flow control on the read side; it is merely a router. If the message passes all checks, it is put to the proper upper queue. Otherwise, the message is discarded.
The upper stream close routine clears the mux entry so this queue will no longer be found. Outstanding bufcalls are not cleared.
/* * Upper queue close */ static int muxclose(queue_t *q, int flag, cred_t *credp) { struct mux *mux; mux = (struct mux *) q->q_ptr; qprocsoff(q); if (mux->bufcid != 0) unbufcall(mux->bufcid); mux->bufcid = 0; mux->ptr = NULL; q->q_ptr = NULL; WR(q)->q_ptr = NULL; return(0); }
Keeping a process running merely to hold the multiplexer configuration together is not always desirable, so, "free standing" links below a multiplexer are needed. A persistent link is such a link. It is similar to a STREAMS multiplexer link except that a process is not needed to hold the links together. After the multiplexer has been set up, the process may close all file descriptors and exit, and the multiplexer remains intact.
With I_LINK and I_UNLINK ioctl(2) the file descriptor associated with the stream above the multiplexer used to set up the lower multiplexer connections must remain open for the duration of the configuration. Closing the file descriptor associated with the controlling stream dismantles the whole multiplexing configuration.
Two ioctl(2)s, I_PLINK and I_PUNLINK, are used to create and remove persistent links that are associated with the stream above the multiplexer. close(2) and I_UNLINK are not able to disconnect the persistent links (see strconf(1) and strchg(1)).
The format of I_PLINK is:
ioctl(fd0, I_PLINK, fd1)
The first file descriptor, fd0, must reference the stream connected to the multiplexing driver and the second file descriptor, fd1, must reference the stream to be connected below the multiplexer. The persistent link can be created as follows:
upper_stream_fd = open("/dev/mux", O_RDWR); lower_stream_fd = open("/dev/driver", O_RDWR); muxid = ioctl(upper_stream_fd, I_PLINK, lower_stream_fd); /* * save muxid in a file */ exit(0);
The persistent link can still exist even if the file descriptor associated with the upper stream to the multiplexing driver is closed. The I_PLINK ioctl(2) returns an integer value, muxid, that can be used for dismantling the multiplexing configuration. If the process that created the persistent link still exists, it may pass the muxid value to some other process to dismantle the link, if the dismantling is desired, or it can leave the muxid value in a file so that other processes may find it later.
Several users can open the MUX driver and send data to Driver1 since the persistent link to Driver1 remains intact.
The I_PUNLINK ioctl(2) is used to dismantle the persistent link. Its format is:
ioctl(fd0, I_PUNLINK, muxid)
where fd0 is the file descriptor associated with stream connected to the multiplexing driver from above. The muxid is returned by the I_PLINK ioctl(2) for the stream that was connected below the multiplexer. I_PUNLINK removes the persistent link between the multiplexer referenced by fd0 and the stream to the driver designated by the muxid. Each of the bottom persistent links can be disconnected individually. An I_PUNLINK ioctl(2) with the muxid value of MUXID_ALL will remove all persistent links below the multiplexing driver referenced by fd0.
The following code example shows how to dismantle the previously given configuration:
fd = open("/dev/mux", O_RDWR); /* * retrieve muxid from the file */ ioctl(fd, I_PUNLINK, muxid); exit(0);
Do not use the I_PLINK and I_PUNLINK ioctls with I_LINK and I_UNLINK. Any attempt to unlink a regular link with I_PUNLINK or to unlink a persistent link with the I_UNLINK ioctl(2) causes the errno value of EINVAL to be returned.
Because multilevel multiplexing configurations are allowed in STREAMS, persistent links could exist below a multiplexer whose stream is connected to the above multiplexer by regular links. Closing the file descriptor associated with the controlling stream will remove the regular link but not the persistent links below it. On the other hand, regular links are allowed to exist below a multiplexer whose stream is connected to the above multiplexer with persistent links. In this case, the regular links will be removed if the persistent link above is removed and no other references to the lower streams exist.
The construction of cycles is not allowed when creating links. A cycle could be constructed by:
Creating a persistent link of multiplexer 2 below multiplexer 1
Closing the controlling file descriptor associated with the multiplexer 2
Reopening the file descriptor again
Linking the multiplexer 1 below the multiplexer 2
This is not allowed. The operating system prevents a multiplexer configuration from containing a cycle to ensure that messages cannot be routed infinitely, which would create an infinite loop or overflow the kernel stack.
The following are general multiplexer design guidelines:
The upper half of the multiplexer acts like the end of the upper stream. The lower half of the multiplexer acts like the head of the lower stream. Service procedures are used for flow control.
Message routing is based on multiplexer-specific criteria.
When one stream is being fed by many streams, flow control may have to take place. Then all feeding streams on the other end of the multiplexer have to be enabled when the flow control is relieved.
When one stream is feeding many streams, flow control may also have to take place. Be careful not to starve other streams when one becomes flow controlled.
Upper and lower multiplexers share the same perimeter type and concurrency level. (See MT STREAMS Perimeters for information about perimeters.)


text:
If you're seeking some vintage awesomeness then I suggest that you head on over to 8-Bit ZOMBIE and check out their latest line tees. They've got everything from Pee-Wee Herman to Beetlejuice to The Ghostbusters. How much better can you get? In fact, their newly redesigned website bleeds awesome sauce. It's full of throwback love for every 80's kid and then some. I actually got super excited when I first saw the preview images (see last image below). They reminded me so much of Garbage Pail Kids Trading Cards – I was a huge fan of those. In fact, I still have my entire Garbage Pail Kids collection!
My favorites from the new line is twofold. My first instinct led me straight to that amazing Ghostbusters piece. However, when I saw that they did a Neverending Story design, my mind was blown. So good! This new line is basically my childhood printed on T-Shirts. All that's missing? Maybe Teenage Mutant Ninja Turtles and Masters of the Universe designs would have been perfect – but I can always wait until next time.
The new 8-Bit ZOMBIE tees are available now at their online shop for $20 a piece.
Hat tip to Carlos over at Oven Fresh Dreams.


text:
Let's begin the Christmas books reviews with this wonderful story for the holiday season!
By Donita K. Paul
From the back of the book:
In a sleepy, snow-covered city, Cora Crowder is busy preparing for the holiday season. As she searches for a perfect gift, a fortuitous trip to Warner, Werner and Wizbotterdad's (a most unusual bookshop) leads to an unexpected encounter with co-worker Simon Derrick. And the surprise discovery of a ticket for a truly one-of-a-kind Christmas Ball.
Just my opinion:
Oh, my goodness, this has to be one of the most fun and pleasant books I've read in a long time and just right for the holiday season!
Cora is a very shy and reserved young woman. She's the kind of person who easily gets lost in the crowd. Not often noticed, she likes being anonymous. She doesn't have many friends and is estranged from her family. It's just her and her cat (who also often ignores her) living in her plain and quiet apartment. Each morning, she goes to work and each evening, she returns home for another peaceful night. For many, it would seem like a boring existence, but Cora is quite content. All that changes when she runs into Simon Derrick, one of her supervisors, while visiting an unusual bookstore in the middle of one of the oldest sections of the city. Owned and operated by three odd gentlemen, it's a shop of the kind you just don't find very often. She purchases a book as a Christmas gift, says a few words to Simon and heads back to her little apartment. As she looks through the book, a slip of paper falls out. It's a ticket to a Christmas ball.
And because of that ticket, Cora's life is about to change.
Two Tickets to the Christmas Ball is such a wonderful story. With wizards and magic sprinkled into the mix, it's a completely new take on the holiday season. It's such fun to read and is bound to lighten the stress that often comes with preparing for Christmas. You really must read this one!


text:
Back to Office Space: New York Developers Are Changing Strategy on Luxury Condos
Growing Demand From Tech Startups, Creative Firms Prompt Shift
When developer Steve Witkoff purchased an office building overlooking Madison Square Park in 2011, his strategy was similar to many buyers of second-class office buildings at the time: convert it into luxury condominiums.
If Mr. Witkoff were taking on the project today, he isn't so sure he would go in the same direction. Three years ago, the market for office buildings in the neighborhood wasn't nearly as strong.