text:
A multi-player game
The Stackless stew is bubbling so rapidly, it's hard for casual observers to keep track of the action. To understand Stackless, it helps to keep in mind the principal actors involved:
Melvin E. Conway -- author of seminal 1963 paper on coroutines.
Mike Fletcher -- author of very large collaborative virtual reality system relying on microthreads.
Steven Majewski -- on staff with the department of Medicine-Molecular Physiology at the University of Virginia. Important contributor to early development of Python. Author of mid-90s analyses of generators, continuations, and coroutines in Python.
Gordon McMillan -- author of Stackless-related Python Enhancement Proposals. Independent consultant, "heavily using Stackless since May" 2000 in coroutine-based production applications.
Tim Peters -- long-time Python contributor and "insider." Recently hired by PythonLabs.com for first paid Python work in his career. Deeply knowledgeable about abstract language concepts. Recommended continuation as right generalization for coroutine-enabled re-implementation. Author of 1994 paper on coroutines in Python.
Sam Rushing -- independent consultant. Wants coroutines, particularly for his work with "massively parallel" messaging systems, partially financed by eGroups. Source of Tismer's initial inspiration.
Christian Tismer -- independent consultant. Inventor of Stackless Python.
Guido van Rossum -- Python's inventor. Wary of Stackless's consequences. Recently hired by BeOpen to head PythonLabs.com.
Just van Rossum -- programming typographer. Coauthor of microthreading implementation. Stackless enthusiast. Brother of Guido van Rossum.
Will Ware -- programmer and designer with Xionics Document Technologies, with experience both "close to the silicon" and on very large software projects.
Do you want your favorite language to be smaller, faster, more flexible, and safer? That's Stackless Python's claim.
Stackless Python is an alternative implementation of Python created by independent developer Christian Tismer. He started with the conventional Python language processor managed by the language's inventor, Guido van Rossum, and patched his own Stackless invention in place of a small but central part of Python's internals. Stackless Python is the result. This article introduces Tismer's technology and its significance. In future articles, you'll be able to read about how to make your own start at programming Stackless Python, as well as the prospects for a merger between Stackless and the main Python distribution.
Like most interesting technologies, the travelers on the Stackless voyage bring several separate but closely linked stories. Crew members have strikingly different motivations and knowledge. So far, though, they have pulled together for a relatively smooth ride. The sidebar at the right hints at how different ideas have been unfolding all through the decade, finally to find a common vehicle in Stackless Python.
Tismer is the adventurer in this tale. He created Stackless because he wanted to see if he could do something that "seemed impossible" when he first heard about it. He ran across the idea initially in the python-dev mailing list for technical discussions of Python implementation. There, in early 1999, Sam Rushing and others made the point that the current Python design did not support coroutines well. Coroutines are a concurrency construct, that is, a model for managing computations that should happen without necessarily having to wait on other work a computer needs to do. Threads and events are alternative formulations of concurrency or multi-processing. Python, along with Java and other languages, directly supports a threading model. Threads are commonly taught in college programming courses.
However, coroutines are widely viewed as "safer" than threads, because they seem to demand less expertise and care for correct use. Melvin E. Conway introduced coroutines in 1963 to model symmetric computation, where each coroutine operates with the same "rank." This contrasts with our usual procedural codings, with one method in charge of calling another. Languages such as SIMULA and Modula make good use of coroutines, and special-purpose libraries make coroutines available for C++ and Java.
Rushing ran into a technical limitation of Python's implementation, having to do with the way the Python byte-code interpreter keeps the information it needs as control flows from one method to another. The standard Python distribution mixes
in the same "stack."
Holding two different kinds of information in the same stack simplified Python's early development. It makes concurrency difficult, though. Even before Rushing's experiments, Python experts had bumped into this limitation several times, as, for example, when Steven Majewski had worked in the mid-'90s on "generators," close relatives of coroutines. Generators and microthreads are two more multiprocessing or concurrency models that we'll see Stackless Python enables.
In the course of describing the difficulties as precisely as possible, python-dev contributors Rushing and Tim Peters emphasized continuations. A continuation can be viewed as the most primitive or fundamental multiprocessing construct. All the others -- generators, coroutines, threads, and so on -- have straightforward expressions in terms of continuations.
While Tismer didn't know what continuations were when he started reading this mailing list thread, the challenge was the kind that appealed to him. He read the literature on multiprocessing control structures. He looked at previous work with Python. He studied the layout of the Python "frames," that is, the segments of the stack where information about different invoked methods is kept.
Eventually, Tismer convinced himself he could do precise surgery on Python to transplant in a new calling-frame manager that operates outside the conventional stack. As he likes to say, "after heavily brainwashing myself, it was finally quite easy."
Tismer presented "Continuations and Stackless Python" to the Eighth International Python Conference just after New Year 2000. He had in hand patches for Python that eliminated the stack-frame limitations, and he could offer Stackless to those who wanted to use it.
Keep in mind that "Stackless Python" means different things to different people. For Tismer, Stackless Python is an internal or implementation matter. With changes to "just a small number of C modules," he has decoupled the frame stack from the C stack. That work is done and useful now.
Tismer continues to pour effort into Stackless to improve several details. Stackless is already entirely compatible with existing "pure" Python applications -- those developed exclusively in Python. Many Python applications, however, involve fragments coded in other languages, generally C. Python's willingness to "play nicely" with other languages is one of its principal virtues for many programming teams.
The Stackless Python of summer 2000 has a slightly different interface for cross-language work than conventional Python does. Some mixed-language projects won't allow Stackless Python simply to "drop in" as a replacement. One of Tismer's tasks is to rework Stackless Python's internals so that it fits better in these existing mixed-language projects.
Tismer is also searching for improved abstractions that will better support complementary high-level constructs such as coroutines. Should an official coroutine be implemented as a layer above continuations, or as an "independent" interface? What precise definition for coroutines best fits the Python style?
Apart from these details, Stackless is significant purely as an implementation matter. Conventional Python limits recursion depth, because it keeps so much information on the stack. Large-scale applications that nest or recurse deeply can fail simply through exhaustion of the stack. Stackless Python is much less constrained in this regard, with almost all of its state information kept in heap memory. Also, concurrent algorithms that exploit Stackless capabilities exposed as coroutines run at up to three times the speed of the corresponding Python codings in terms of threads.
The implementation change has several layers of consequence, though. The main programming interface Tismer has exposed up to this point is the
continuation module. While generally regarded as too abstruse for working Python application developers,
continuation is just the right building block for such system-level programmers as Gordon McMillan and Will Ware. With
continuation as their base, they've layered new concurrency definitions that appear to perform much better than threads and are also easier to understand. This kind of experimentation, going on through 2000, has been so successful that several applications are already in production.
When Tismer talks about Stackless, he's generally thinking about the Python interpretive kernel, and how to strengthen its architecture. This makes possible the innovative control structures that interest McMillan and Rushing. Their Python-level module definitions, in turn, provide coroutines, microthreads, and other upper-level concurrency models that bear on practical programming problems.
Will Ware's microthreads, for example, journey a long way from the "ivory tower." Scripting languages are rightly becoming popular implementation vehicles for games. The higher-level constructs in common scripting languages encourage customization and extensibility at a pace that's crucial in gaming, where time-to-market is so important. Performance is also essential, though, and conventional threading is just too clumsy to satisfy the requirements typical in game programming.
Microthreads are a perfect answer. In a description Ware co-authored:
Microthreads are useful when you want to program many behaviors happening simultaneously. Simulations and games often want to model the simultaneous and independent behavior of many people, many businesses, many monsters ... With microthreads, you can code these behaviors as Python functions. ...
Microthreads switch faster and use much less memory than OS threads. You can run thousands of microthreads simultaneously.
What's the relation between these benefits and Stackless's implementation details? Here's a quick sketch:
Continuations are the general-purpose concurrency construct. A continuation represents all the future computations of a particular program. Capturing all this control flow in a single conceptual object makes it programmable: It becomes possible to calculate or reason over the control flow. In particular, there's great scope for optimizing assignment of different calculations to different processes or threads or even hosts.
The example Tismer likes is one he credits to Jeremy Hylton: Think of the simple program
x = 2
y = x + 1
z = x * 2
For this example, "the continuation of
x = 2 is
y = x + 1; z = x * 2. ... [E]very single line of code has a continuation that represents the entire future execution of the program."
Continuations are sufficiently general that they can model threads efficiently. As it happens, the threads native to most operating systems (OSs) have accumulated a lot of baggage through the years. Legend advertises threads as "lightweight." They're supposed to be much nimbler than processes, for example. This is no longer true, though. Common industry practice has caused threads and processes to converge in their resource demands. Threads are not particularly lightweight.
Think for a minute about an ideal thread, not the one leading OSs provide, but a minimal flow of execution burdened with as little communication and synchronization overhead as possible. That's a microthread, and continuations can model microthreads as well as they model any other concurrency structure.
This is important. It's well known among experts that common multi-threaded Web servers, for example, can gag when they spawn more than a modest number of threads -- fifty, in common cases. Stackless microthreads not only possess all the programming ease Python delivers, but even mediocre equipment handles thousands and tens of thousands of microthreads.
It's not just reliability and performance that Stackless gives microthreads. Stackless should also make microthreads and related control structures "serializable," or persistent: They will have a representation that allows state to be saved and restored. At the level of game-playing, it means that there will be a thoroughly natural and complete way to pause or save any simulation object, or even to relocate it to a different process or host. A game player might choose to pack his identity away, and then re-start again at the same point months later. While serialization isn't available in a finished form, it's already in Tismer's plans. The Python jargon for serialize is "pickle." As Tismer puts the situation, "Microthreads are easier to pickle than general continuations. . . . [M]icrothreads are most likely to be the first things we will be able to pickle." Early experiments suggest it'll work nicely, once the API becomes more definite.
The challenge of this introduction has been to explain Stackless' promise for the future, without losing contact with its present reality. To help bring the abstractions back into proper focus, tune in again next week for an article on Stackless Programming. There you'll see how easy it is for you to start to practice with Stackless Python for your own work.
Cameron Laird is the vice president of Phaseit, Inc. and frequently writes for the O'Reilly Network and other publications.
Discuss this article in the O'Reilly Network Python Forum.
Return to the Python DevCenter.
Copyright © 2009 O'Reilly Media, Inc.


text:
Fancy thatFebruary 21,2013
Vermont maple producers appear to be going with the flow.
The maple syrup industry is pushing a new labeling protocol that would require Vermont to abandon the traditional grades that its sugarmakers have used to describe their syrup.
Traditionalists favor the familiar grades, each of which has its meaning and its champions. The lightest and most delicate-flavored is called fancy. The next lightest is Grade A medium amber, followed by dark amber and Grade B. There is also a Grade C, which is not sold as syrup but is used in baked goods and other products.
Vermont produces more syrup than any other state, by far. In 2012, Vermont produced 750,000 gallons, amounting to 39 percent of the national output. Maine and New York were the next most productive, each making about 360,000 gallons.
In Vermont production was down by about 34 percent last year from the year before, when the state produced a near-record 1.14 million gallons. Producers blamed the lower output on the unusually warm weather in March.
Vermont may be the leader in the United States, but output in Quebec, which produces 90 percent of Canadas syrup, dwarfs production in Vermont. In 2011 Quebec produced 7.7 million gallons.
Despite the decline last year, production in Vermont burgeoned over the past decade. The number of taps in Vermont grew from 3.15 million in 2010 to 3.5 million in 2012. Yield per tap has also been growing, except for last year when the weather interfered. Improvements in technology and increased interest by producers have caused the output in Vermont to double in the decade.
Vermont producers are making far more syrup than Vermonters can consume, which means their syrup must compete on the international market with the tsunami of syrup flowing each year from Quebec. And the industry has adopted a grading lingo that the business believes is more helpful to consumers than is Vermonts terminology.
There will be several types of Grade A: golden color with delicate taste; amber color with rich taste; dark color with robust taste; and very dark with strong taste.
Vermonters are inclined to think that the world can just as well learn the language of Vermont. If you want to know what fancy means, buy a pint. Medium and dark amber seem sufficiently descriptive. Grade B speaks for itself, and some people like it best.
Spreading the Grade A label over a spectrum of tints and tastes seems like a system devised in Lake Wobegon: All syrups are above average. The new system also imports one of the most overused contemporary adjectives: robust. Robust taste seems to be a term designed for obfuscation. Is robust less strong than strong? Who knows?
And yet the imperatives of international commerce seem to override the chauvinism of the Vermont producer. The Agency of Agriculture and the producers themselves seem ready to give in. Sen. Kevin Mullin gave vent to Vermont chauvinism when he said, We should not be following everyone in lockstep ... giving them the ability to try to pretend that syrup made in another state is anywhere near as good as syrup made in Vermont.
Take that, New Hampshire.
But producers will have three years to phase in new containers and labels. And if Vermont syrup is really better, then it will continue to stand out. Chuck Ross, secretary of agriculture, says Vermonts syrup is better because regulations require it to be boiled down further so it is more dense and rich in taste than syrup elsewhere.
The name Vermont carries with it an important message about quality, and so whether it is called robust or dark amber, it will enjoy an advantage. The states real worry probably has more to do with that heat wave last year, which could be a harbinger of a climatic shift that could transform the woods and the maple industry for the worse.
In the meantime, fancy will continue to flow in the hearts of Vermonters.MORE IN CommentarySure, you can buy your uncle a necktie that he wont wear, or your niece an Amazon certificate... Full StoryFor the past month, I have been watching close friends and family descending into a pit of... Full StoryAdjusting to snow, sleet and cold after spending over a month in an exponentially warmer climate ... Full Story
- Most Popular
- Most Emailed

subset: commoncrawl


text:
This entry was posted
on Sunday, November 13th, 2011 at 12:03 pm and is filed under .
You can follow any responses to this entry through the
Notice: comments_rss_link is deprecated since version 2.5! Use post_comments_feed_link() instead. in /deepspace/backup/web/web/virtuals/antimac.org/wp-includes/functions.php on line 3378
RSS 2.0 feed.
You can leave a response, or trackback from your own site.
Name (required)
Mail (will not be published) (required)


text:
Nats Cure What Ails The Phillies
Well, they cured the offensive woes anyway. The Phillies completed a 4-game sweep of the Nationals this afternoon with an 8-6 win and Brad Lidge threw only 2 pitches to get the save. The starting pitching, however, still has BIG issues, not the least of which is Chan Ho Park. You know how I hate to repeat myself, but I have been wondering if Park's last 2 good outings were a fluke; a result of the pressure on him to keep his job. Once the pressure was seemingly off him today because of those 2 good games, he went right back to stinking up the joint.
Park could have been pulled after one inning, where he gave up 3 runs to the lowly Nationals. But Charlie Manuel sent him out for a 2nd inning; Park got 1 out and then proceeded to load the bases and walk a run in. So, that was that. 1 1/3 innings is the official line with 5 runs on 5 hits and 4 walks. Jack Taschner added the 5th run when he came in on relief and hit the next batter, sending another run home. Something needs to be done with Park. It is clear now that, as I suspected, he only pitches well when threatened with losing his job. We need a starter who is self-motivated.
The good news amidst all the starting pitching hoopla is that the offense found their bats in this series against the Nats. Jimmy Rollins had 7 hits in this series and is slowly digging out of an early offensive hole. Raul Ibanez continues to impress; he had 9 hits and 3 home runs in the last 4 games! And Pedro Feliz had 7 hits in the series. Everyone is contributing, and things are beginning to look up.
A few other pitching notes for the series: Andrew Carpenter came up from AA for the day yesterday to pitch the 2nd game of the doubleheader and got the job done. He gave up 5 runs in 4 1/3 innings, but he gave them the innings they needed and the offense, plus a rain-shortened night, gave the Phils the 7-5 win. Carpenter went back to AA and Sergio Escalona, 24, was called in to replace him. Escalona, in his major league debut today, pitched one scoreless inning and earned the win. Congrats to the rookies!
The Phillies will take tomorrow off and then begin a 3 game series in Cincinnati, continuing the long road trip. Who will be starting for the Phillies? Nothing is written in stone right now. Jamie Moyer had his schedules Tuesday start pushed back to Wednesday; Joe Blanton has been terrible; and I think we all know how Park is doing. A lot of decisions are going to have to be made soon.
While we wait to see what happens, VOTE for the Phillies and send them to the All-Star game! VOTE 25 times per day, per email address!
Photos by Jenn
***Visit the Phillies Phollowers Online Shop today!***
(Store is non-profit, but lots of fun! I hope you enjoy our artwork!)
*Read more about the Phillies at MY OTHER HOME PAGE! Phillies Phollowers has joined forces with Phightin' Phils Phorum! Remember also to check out the homepage, My Team Rivals and my very own Miami Dolphins page, The Dolphin Pod!
5 Comments
Considering how many runs Park gave up so early – congrats on the win!
Ibanez was a great signing by the Phillies. He's been so reliable, year in and year out.
Yeah, I think the Phils could use a day off. That series wasn't as easy as they thought'd be, eh?
I'm amazed the Phils actually swept that series, considering only Myers had a quality start. Thank goodness the offense woke up to score some runs in those games. And I guess it just shows how truly bad the Nationals are, too.
Rants, Raves, and Random Thoughts


text:
Vt College of Fine Arts graphic design program lauded
MONTPELIER The Master of Fine Arts program in graphic design offered at the Vermont College of Fine Arts has been named one of the nations top graduate programs in the field by Print Magazine, a trade publication that covers the design industry.
Other MFA programs in graphic design that are featured in the August issue of the publication include those at Yale University and the Rhode Island School of Design.
According to a news release from the college in Montpelier, the program is one of the nations first low-residency programs in graphic design and is built around a students individual interests and creative goals. The two-year graduate program includes five one-week residencies with four six-month semesters of independent study with a range of faculty mentors.MORE IN This Just In
State police are investigating the death of a Newbury couple after receiving report... Full StoryBARRE Vermont Foodbank and Uber Vermont today announced the launch of a giving season... Full StoryNational Forest
trees for $5
RUTLAND The public can buy Christmas trees for... Full Story
- Most Popular
- Most Emailed


text:
« Back
Delegates listen to German Chancellor Angela Merkel respond to a question at the Petersberg Climate Dialogue in Berlin on July 3, 2011. The two-day dialogue was held in preparation for the upcoming UN climate conference in Durban.
AP Photo
The Promise and Problems of Pricing Carbon: Theory and Experience
Discussion Paper
November 2011
Authors: Joseph E. Aldy, Faculty Affiliate, Harvard Project on Climate Agreements, Robert N. Stavins, Albert Pratt Professor of Business and Government; Member of the Board; Director, Harvard Project on Climate Agreements
Belfer Center Discussion Papers
Belfer Center Programs or Projects: Environment and Natural Resources
In a modern economy, nearly all aspects of economic activity affect greenhouse gas in particular, carbon dioxide (CO2) emissions, and hence the global climate. To be effective, climate change policy must affect decisions regarding these activities. This can be done in one of three ways: (1) mandate businesses and individuals to change their behavior regarding technology choice and emissions; (2) subsidize businesses and individuals to invest in and use lower-emitting goods and services; or (3) price the greenhouse gas externality, so that decisions take account of this external cost.
By internalizing the externalities associated with CO2 emissions, carbon pricing can promote cost-effective abatement, deliver powerful innovation incentives, and ameliorate rather than exacerbate government fiscal problems. By pricing CO2 emissions (or, equivalently, by pricing the carbon content of the three fossil fuels coal, petroleum, and natural gas), governments defer to private firms and individuals to find and exploit the lowest cost ways to reduce emissions and invest in the development of new technologies, processes, and ideas that could further mitigate emissions. A range of policy instruments can facilitate carbon pricing, including carbon taxes, cap-and-trade, emission reduction credits, clean energy standards, and fossil fuel subsidy reduction.
Some of these instruments have been used with success in other environmental domains, as well as for pricing CO2 emissions. The U.S. sulfur dioxide (SO2) cap-and-trade program cut U.S. power plant SO2 emissions more than 50 percent after 1990, and resulted in compliance costs one half of what they would have been under conventional regulatory mandates (Carlson, Burtaw, Cropper, and Palmer, 2000). The success of the SO2 allowance trading program motivated the design and implementation of the European Unions Emission Trading Scheme (EU ETS), the worlds largest cap-and-trade program, focused on cutting CO2 emissions from power plants and large manufacturing facilities throughout Europe (Ellerman and Buchner, 2007). The U.S. lead phase-down of gasoline in the 1980s, by reducing the lead content per gallon of fuel, served as an early, effective example of a tradable performance standard (Stavins, 2003). These positive experiences provide motivation for considering market-based instruments as potential approaches to mitigating greenhouse gas emissions.
For more information about this publication please contact the ENRP Program Coordinator at 617-495-1351.
For Academic Citation:


text: August 8, 2006: NASA's Hubble Space Telescope has for the first time identified the parent star of a distant planet (system name OGLE-2003-BLG-235L/MOA-2003-BLG-53L) discovered in 2003 through ground-based gravitational microlensing. Gravitational microlensing occurs when a foreground star amplifies the light of a background star that momentarily aligns with it. Follow-up observations by Hubble in 2005 separated the light of the slightly offset foreground star from the background star. This allowed the host star to be identified as a red dwarf star located 19,000 light-years away. The Hubble observations allow for the planet's mass and the orbit from its parent red star to be determined. In this artist's concept, the rings and moon around the gas giant are hypothetical, but plausible, given the nature of the family of gas giant planets in our solar system.See the rest:


text:
Spring Makeup Trends for the Office
- Next1 of 17Michael Kors: Imaxtree.com
- Previous Next2 of 17Michael Kors: Imaxtree.com
- Previous Next3 of 17Imaxtree.com
- Previous Next4 of 17Alexander Wang: Imaxtree.com
- Previous Next5 of 17Imaxtree.com
- Previous Next6 of 17Lanvin: Imaxtree.com
- Previous Next7 of 17Imaxtree.com
- Previous Next8 of 17Prada: Imaxtree.com
- Previous Next9 of 17Glo
- Previous Next10 of 17Jil Sander: Imaxtree.com
- Previous Next11 of 17Imaxtree.com
- Previous Next12 of 17Calvin Klein: Imaxtree.com
- Previous Next13 of 17Imaxtree.com
- Previous Next14 of 17Missoni: Imaxtree.com
- Previous Next15 of 17Imaxtree.com
- Previous Next16 of 17Narciso Rodriguez: Imaxtree.com
- Previous Next17 of 17Imaxtree.com
- Spring Makeup Trends for the Office9 Things You Need to Stop Doing to Your Skin ASAP
- 15 Pretty Celeb Looks To Steal
- Beauty Secrets From A VS Supermodel
- 8 Unusual Beauty Tips You've Never Heard Of
- The 9 Hottest Nail Colors For Summer 2014
- 10 Beauty & Style Trends From South America
- Outrageous Nails: International Edition
- 13 Waterproof Beauty Products That Work
- 11 Cult Makeup & Hair Products From Asia
- 12 Ways You Apply Your Makeup Wrong
- This Season's Hottest Blonde Hair Colors
- 10 Essential Makeup Tips For Blondes
- 15 Most Iconic Blondes Of All Time
- Glo Tested: The Best Sunscreens for Summer
- 9 Short & Easy Celeb Haircuts To Steal Now
- 12 Beauty Secrets From a Top TV Host
- 13 Drugstore Beauty Buys the Experts Swear By
- 20 Life-Changing Ways To Use Bobby Pins
- 18 Next-Big-Thing Beauty Products
Work It1 of 17
By Emili Vesilind
Let's face it, we're not going to wear red eye shadow — one of spring's runway trends — to the office. And we certainly don't want to be known around the water cooler as "that lady with the pointy eyebrows." But there are plenty of catwalk-born beauty trends that can easily transition from the runway to the workplace, so don't be afraid to rethink your game face this season.
Blush Baby2 of 17
No, you don't want to look like you spent the morning in a Finnish sauna, but fuchsia-hued blush gave the models in Michael Kors's spring show a rugged, youthful look.
Blush Baby3 of 17
This fuchsia-hued blush, if applied with a slightly lighter hand, can make you look like the most well-rested gal in the office.
Nude Attitude4 of 17
Few looks feel as polished as a face that appears makeup-free — and flawless. The models at Alexander Wang, for instance, sported lip balm, a smidgen of mascara and glowing skin.
Nude Attitude5 of 17
Focus on perfecting the skin's texture with a dewy concealer and you'll be conveying supreme confidence at that next board meeting.
Taupe Toppers6 of 17
Taupe, that middle-ground color between brown and gray, popped up everywhere on spring's runways, and it's a perfect hue for day, lending your lids subtle depth and definition.
Taupe Toppers7 of 17
The sedate hue swathed the entire lid at Lanvin, while Christopher Kane showcased the color via a healthy swipe of liner on the upper lids. Either way, it's a workplace winner.
Metallic Moment8 of 17
When it comes to wearing shimmer at the office, less is definitely more. But that shouldn't stop you from test-driving one of this season's most vibrant makeup trends: pastel metallic eye shadow.
Metallic Moment9 of 17
The models at Prada boasted baby blue metallic lids that were definitely more desktop than disco. Use a light hand and keep your lip color nude (or soft pink), and expect compliments galore in the cafeteria.
Haute Pink10 of 17
The always-office-appropriate red lip has a rival this spring in the hot pink pout, a look that was made instantly iconic at the Jil Sander show.
Haute Pink11 of 17
The key to pulling it off at work is turning down the volume on everything else — from hair and eye makeup to clothes and accessories. Let your perfectly lined lips do the talking.
Fringe Effect12 of 17
Lush, jet-black upper lashes, paired with perfectly bare lower lids, had a definite moment at Calvin Klein's spring show.
Fringe Effect13 of 17
This pared-down look is a no-brainer for the office when teamed with a pink or natural-hued lip and rosy cheeks.
In the Flesh14 of 17
Yes, you can wear that tribal-print tunic to the office, but make sure your lip color isn't competing with its acid bright tones. Enter the nude lip, a look that complemented Missoni's Afro-inspired spring collection to a T.
In The Flesh15 of 17
Off the runway, choose a flesh tone that's at least one or two shades darker than your skin color to avoid the dreaded corpse look.
Gold Rush16 of 17
Yellow eye shadow isn't subtle. But if the hue skews more gold than canary — as it did at both Burberry Prorsum and Narciso Rodriguez — it's a great way to add a little low-key flash to your workday beauty look.
Gold Rush17 of 17
Just make sure to apply this more-gold-than-yellow shadow lightly to avoid looking like you just stepped out of the club.


text:
Staff reports
Police arrested a 17-year-old Friday in connection with a Christmas Eve rape and kidnapping of a Clovis woman, according to a release from the Clovis Police Department.
The 40-year-old victim identified her alleged attacker from police photos, Clovis Police Lt. James Schoeffel said.
The name of the accused was not released by police.
The woman's attacker was about 5 feet 7 inches tall, and weighed 350 pounds, police have said.
The woman told police the subject entered her home to smoke marijuana, then taped her mouth, beat her, trapped her in a closet, and repeatedly raped her.
The suspect is being held at the Curry County Juvenile Detention Center, accused of kidnapping, two counts of sexual penetration, criminal sexual contact, and aggravated assault, the release said.