text:
Ten Princeton University faculty members were transferred to emeritus status in recent action by the Board of Trustees.
They are: James Broach, professor of molecular biology; William Browder, professor of mathematics; Lawrence Danson, professor of English; John Darley, the Dorman T. Warren Professor of Psychology and a professor of psychology and public affairs; Philip Johnson-Laird, the Stuart Professor of Psychology; Seiichi Makino, professor of East Asian studies; Hugo Meyer, professor of art and archaeology; Jeremiah Ostriker, professor of astrophysical sciences; Elias Stein, the Albert Baldwin Dod Professor of Mathematics; and Cornel West, the Class of 1943 University Professor in the Center for African American Studies.
All are effective July 1, 2012, except for the transfers of Broach and Browder, effective Feb. 1 and Aug. 1, respectively.
Broach is a pioneer of modern molecular approaches to the study of the model organism Saccharomyces cerevisiae, better known as bakers' yeast. Since the 1970s, from Cold Spring Harbor Laboratory to the State University of New York-Stony Brook to Princeton, Broach's research has investigated topics including cell specialization, genetic cloning and nutrient assimilation.
In addition, Broach has written more than 150 scientific papers, co-edited six volumes on yeast molecular and cellular biology and served as editor or associate editor for leading journals, including Cell and Molecular and Cellular Biology.
Broach earned his bachelor's degree at Yale University and his Ph.D. at the University of California-Berkeley. He joined the Princeton faculty in 1984 and was one of the founding members of the Department of Molecular Biology, serving as its associate chair from 2004 to Jan. 31, 2012. He also was associate director of the Lewis-Sigler Institute for Integrative Genomics from 2001 to 2008. Broach currently is chair of the Department of Biochemistry and Molecular Biology at the Penn State College of Medicine and director of the Penn State Institute for Personalized Medicine.
Browder received his undergraduate degree from the Massachusetts Institute of Technology, earned his Ph.D. in mathematics at Princeton in 1958 and joined the faculty as a full professor in 1964 — at age 28. His research has had a significant influence in the areas of homotopy theory, differential topology and the theory of finite group actions.
Browder has served in a variety of administrative capacities in the mathematics department — as chair, director of undergraduate studies and undergraduate representative — as well as serving on committees for the larger University community.
Over the course of his career, Browder advocated for K-12 math education with the American Mathematical Society and for federal funding for mathematical research through the National Research Council, where he served as chair of the Office of Mathematical Sciences. He is a fellow of the National Academy of Sciences, the American Academy of Arts and Sciences and the Finnish Academy of Arts and Sciences.
Danson has had a 44-year career of outstanding scholarship and teaching, mainly in Shakespeare and Renaissance studies. He is the author of three books and many articles on Shakespearean drama, and has also written books about the literature of 19th-century British writers Max Beerbohm and Oscar Wilde. As a teacher, he is known for his innovation in developing new courses, using technology in the classroom and experimenting with teaching methods.
Among Danson's honors are a National Endowment of the Humanities Fellowship and the Hoffman Prize, and his teaching has been recognized through Princeton's Cotsen Faculty Fellowship and grants from the 250th Anniversary Fund for Innovation in Undergraduate Teaching.
Danson began as an instructor at Princeton in 1968, and he has served as director of the Princeton Writing Program, on the Executive Committee of the Council of the Humanities, on the Committee for Renaissance Studies, in the Program in Theater and Dance, and on the Priorities Committee, among other roles. He received his bachelor's degree from Dartmouth College, pursued graduate study at Merton College at the University of Oxford and earned his Ph.D. at Yale.
Darley began his career at New York University, where he started the line of research that sparked his career — looking into why bystanders who had witnessed the murder of Kitty Genovese in 1964 had not intervened. With his Columbia University colleague Bibb Latané, Darley conducted innovative laboratory and field experiments that tested and confirmed their hypotheses that the unresponsiveness of bystanders was driven by uncertainty and indecision, and the belief that others would help.
Darley, a graduate of Swarthmore College who earned his Ph.D. at Harvard University, came to Princeton in 1968 as an associate professor in psychology and helped build the University's social psychology program. In addition to publishing many books and articles in the field, he chaired the department for five years. He also branched out to topics such as behavioral approaches to energy conversation, how organizations socialize wrongdoing and laypeople's conceptions of the law and legal system. In 2001, he became jointly appointed with Princeton's Woodrow Wilson School of Public and International Affairs.
Darley's numerous honors include receiving the Distinguished Scientist Award from the Society of Experimental Social Psychology, being named a fellow of the American Academy of Arts and Sciences, and serving as president of the American Psychological Society and the Society of Personality and Social Psychology.
Johnson-Laird, a renowned expert on the psychology of language and thinking, helped pioneer the field of cognitive science. He earned his bachelor's degree and Ph.D. in psychology at University College London — after receiving training as a surveyor and working as a freelance jazz musician and music critic. After spending time at Princeton as a visitor, he joined the faculty in 1989.
The principal question that Johnson-Laird has answered is how individuals who have had training in logic or probability calculus are able to reason: They use mental models of the world.
Johnson-Laird is a fellow of the British Academy and the Royal Society of London, a recipient of the Fyssen Foundation International Prize and Princeton's Graduate Mentoring Award, and a member of the National Academy of Sciences and the American Philosophical Society.
Makino joined the faculty in 1991 and has distinguished himself as the director of the University's Japanese language program. Makino, who has served as co-director of the East Asian Linguistics Project and director of the summer language program Princeton in Ishikawa, has taught all levels of Japanese language, as well as classes on cultural and cognitive linguistics, discourse analysis, Japanese culture and Japanese as a second language. He is recognized as a leader in Japanese language pedagogy internationally, supporting programs and training teachers at other institutions in the United States, Japan and France.
Makino has published books and articles in English and Japanese, been an associate editor of various journals in the field and served as president of the Association of Teachers of Japanese. His honors include an Award for Distinguished Service to the Profession from the Modern Language Association.
Makino earned bachelor's and master's degrees at Waseda University in Tokyo, a second bachelor's and master's at the University of Tokyo, and after coming to the United States as a Fulbright Scholar, a Ph.D. in linguistics at the University of Illinois at Urbana-Champaign.
Meyer, a specialist in Hellenistic and Roman art, spent the first decade of his academic career in Germany, teaching in Munich and Marburg and taking on a curatorial position responsible for a collection of casts of Classical sculptures at the Bavarian National Museum.
When he joined the Princeton faculty in 1989, Meyer focused on further researching sculptural objects and published two books on Classical works. To complement his teaching, he worked to rebuild the art and archaeology department's cast collection. Later in his career, he embarked on a comprehensive history of imperial Roman art, publishing one volume in 2000 with two more volumes forthcoming.
Meyer received his Ph.D. in Classical art and archaeology from the University of Göttingen in Germany, and he will continue his scholarship from Munich upon retirement.
Ostriker joined Princeton as a lecturer in astrophysical sciences in 1965, and throughout his career he has made major contributions to his field and to higher education, at the University and further afield. Through his scholarship, he played a major role in convincing the astronomical community of a model of the universe in which most mass resided in dark matter rather than visible stars; helped explain the dynamics of the interstellar medium, the volume between stars; advocated new ways of thinking of the geometry of the universe; and played a central role in synthesizing cosmological theories.
Ostriker's leadership efforts include participating in the development of the Sloan Digital Sky Survey. He also spent 16 years as chair of the astrophysical sciences department and directed the Princeton Institute for Computational Science and Engineering. From 1995 to 2001, he served as provost of the University, helping establish its pioneering, no-loan initiatives in financial aid. Ostriker also is serving as treasurer of the National Academy of Sciences.
A recipient of the National Medal of Science, Ostriker is a member or fellow of the American Academy of Arts and Sciences, National Academy of Sciences, American Philosophical Society, Royal Netherlands Academy of Arts and Sciences and Royal Society of London. A graduate of Harvard, he earned his Ph.D. in astrophysics from the University of Chicago.
Stein's contributions in the area of mathematical analysis over the last half-century include groundbreaking work on problems in areas of math such as harmonic analysis, partial differential equations, several complex variables and representation theory. Stein is a recipient of the National Medal of Science and the Wolf Prize.
Stein has written several books on mathematical analysis that are considered classics in the field, and he recently published (with Rami Shakarchi) the last in a four-volume set of textbooks called "Princeton Lectures on Analysis" that accompany a sequence of advanced undergraduate mathematics courses, which he also developed.
Stein joined the faculty in 1963, served twice as chair of the mathematics department and mentored a generation of leading analysts. He received his bachelor's degree and Ph.D. from the University of Chicago.
West is a scholar, educator, activist, author and public intellectual who is known far beyond academia. West's work focuses on social and economic justice, race, black theology, American pragmatism and contemporary Marxist thought.
West's numerous publications include the best-selling books "Race Matters" and "Democracy Matters," as well as "The American Evasion of Philosophy: A Genealogy of American Pragmatism," which won the 1992 Critic's Choice Award. He has participated in protests on issues from apartheid South Africa to the Occupy movement. He has also made numerous media appearances; appeared in feature films, documentaries and television shows; hosted a radio show; and released and appeared on spoken word and music albums.
West served on the Princeton faculty from 1988 to 1994 and rejoined the University in 2002 as a professor of religion and African American studies; he later became the first faculty member with a full appointment in the Center for African American Studies. A Harvard graduate, West earned his Ph.D. in philosophy from Princeton in 1980. Next month he will take a position at Union Theological Seminary in New York City, where he began his teaching career.


text:
Chicago police say "two reputed gang members were out for revenge from a previous shooting when they opened fire on a group of students in a South Side park last month, killing 15-year-old Hadiya Pendleton," the Chicago Tribune writes this morning.
Hadiya's Jan. 29 death, as we've reported, has focused national attention on gun violence in Chicago because it happened only about a mile from President Obama's home there and because the 15-year-old had only a week before gone with her school's marching band to Washington, D.C. There, the band was part of a music festival in suburban Maryland that was held over the same weekend as Obama's second inauguration.
First lady Michelle Obama attended Hadiya's funeral. Tonight, Hadiya's parents will sit with the first lady at the president's State of the Union address.
According to NPR's Cheryl Corley, the two young men who are now under arrest are "both suspected gang members and face charges of first degree murder, 2 counts of attempted murder and aggravated battery with a firearm."
The Tribune writes that 18-year-old Michael Ward "confessed to police that he and [20-year-old Kenneth] Williams mistook a Pendleton companion for rivals who had shot and wounded Williams last July, police Superintendent Garry McCarthy said at a news conference Monday night."
"The offenders had it all wrong," McCarthy told reporters, the Tribune adds. "They thought the group they shot into included members of a rival gang. Instead it was a group of upstanding, determined kids who, like Hadiya, were repulsed by the gang lifestyle."
Copyright 2021 NPR. To see more, visit https://www.npr.org.

subset: commoncrawl


text:
Perforated Eardrum
What's a Perforated Eardrum?
Turn that music down or you'll burst your eardrums!
Has anyone ever said that to you? You might have wondered if you really can burst an eardrum. Well, maybe not from playing the music too loud, but there are other causes.
The most common reason is an ear infection. Pus builds up behind the eardrum, also called the tympanic membrane, and it causes a tear.
Usually, the person feels a sharp pain, fluid drains out of the ear canal, and the person has some hearing loss, which is usually temporary. In some cases, a doctor may need to apply a patch or do surgery to repair the tear. But more often, the tear heals by itself and the person's hearing returns to normal in a few weeks.
The Eardrum "Ruptures" or "Perforates"
A hole in the eardrum is also called a ruptured or perforated eardrum. Something that has ruptured has broken. And perforation means a hole or holes. Maybe you've used perforated paper. It's the kind in a spiral notebook that tears out easily because of the holes along the left side.
To understand a torn eardrum, you first need to know how the ear works and what the eardrum is. It's sort of like a drum because it's a thin piece of skin-like tissue stretched tight across the opening between your outer ear canal and the middle ear.
Your outer ear funnels sound waves into your ear canal, where they hit your eardrum and make it vibrate. Your middle ear and inner ear convert the vibrations to signals that your brain interprets as sounds.
If there is a hole in the eardrum, it might not vibrate very well, which can make your hearing worse. Most people with a perforated eardrum get all their hearing back eventually.
A perforated eardrum also can allow bacteria to enter your middle ear. This can lead to an infection that can cause more hearing loss.
What Causes a Perforated Eardrum?
In addition to ear infections, you can tear your eardrum by poking something in your ear, even a cotton swab. They're really not needed to keep your ears clean.
Here are some other causes:
- Air pressure changes: When the air pressure changes, it can make your ears "pop." This is normal and often happens when flying in a plane or driving high into the mountains. But if the air pressure changes all of a sudden, it can cause a tear in the eardrum.
- Very loud noises, such as an explosion
- Head injuries that cause a fractured skull bone or a direct blow to the ear (like a slap)
How Do I Know if I Have a Torn Eardrum?
If your eardrum tears, you'll probably feel pain in your ear. Other signs that you might have a perforated eardrum include:
- fluid that can be clear, filled with pus, or bloody draining from your ear
- loss of hearing
- ringing or buzzing in your ear
- dizziness that can sometimes make you feel sick
- weakness in the muscles of your face (this doesn't happen a lot)
What Will the Doctor Do?
Tell a parent if you experience any of these problems. You'll want to have your doctor check it out. The doctor will look in your ear canal with a lighted tool called an otoscope. Fluid or blood might block the doctor's view, but often, he or she will be able see the tear.
The doctor may take a sample of that fluid to test for infection. He or she might also do some tests to measure your hearing and how well your ears are working.
Most perforated eardrums will heal within a few weeks without any treatment. To help prevent or treat infections, the doctor may give you medicines called antibiotics that you take by swallowing, or ear drops your parent can give you. The doctor also might suggest a pain reliever if your ear hurts.
What Should I Do Until I'm Better?
Keep your ear dry while it heals. Your doctor might recommend avoiding swimming or using an earplug for the pool. To keep dry while showering, use a shower cap. You also can ask your doctor about how to use a cotton ball coated with petroleum jelly as an earplug.
It may be hard to do, but avoid forcefully blowing your nose until the tear in your eardrum is all the way healed.
How Can I Prevent a Torn Eardrum?
To protect your eardrums:
- Tell a parent if your ear is hurting you. You might have an infection and need to see the doctor.
- Never stick anything in your ear, even a cotton swab. If you get something stuck in your ear, have a doctor remove it.
Note: All information is for educational purposes only. For specific medical advice, diagnoses, and treatment, consult your doctor.
© 1995-2024 KidsHealth ® All rights reserved. Images provided by iStock, Getty Images, Corbis, Veer, Science Photo Library, Science Source Images, Shutterstock, and Clipart.com


text:
What does it mean to have a good experience? Think of your favorite restaurant, the interior of your car, and the software on your phone; how do people craft these experiences? What details, planning, and design go into the process?
Would it be possible to create a great experience if you were limited from laying out a full design before you got started? That's the typical scenario in designing a user experience within the realm of agile software development. As a designer, how do you manage in an environment with such a quick pace and changing specifications? This article provides a brief overview of agile development and gives several tips for working as a designer in this environment.
Development Through Agile
In large part, the movement towards agile is a response to an industry perception of heavy, slow, and bloated software development. Specifically, agile is a movement away from the typical waterfall model of software development that requires an initial comprehensive design ("big design up front"). With the waterfall model, deliverables and the value from having a functioning product take the form of one bulk delivery near the end of the process. The drawbacks are that development can be delayed, come in over budget, or be irrelevant by the time the product is finished.
Agile was conceived as an alternative approach that delivers a constant stream of value through much smaller deliverables. Typically, agile development takes place through defined iteration cycles that are usually 1-2 weeks in length. At the end of each iteration, a customer-defined set of features, called a story, is delivered. Stories have their own progression through development (typically a backlog, in-process, review, and production queue) and are continuously prioritized by the client. This means requirements can change quite frequently through development. Along the way, refactoring takes place from time to time in order to ensure that features fit together into a single cohesive application.
The primary values of agile are to quickly deliver functioning software and allow for changes in requirements throughout development. As a designer, you may be asking yourself how (or why) requirement change is even allowed. Because no big design up front is delivered, developers can start working on simple features for clients that add immediate value. Although this potentially leads to a larger discussion as to what exactly is conveyed by the term "value," in this case, I am specifically talking about functioning (versus theoretical) software. Through agile development, changes are not only allowed but also expected.
Assume for a moment that you're tasked with creating a mobile travel application. Specifically, your client wants the user to be able to browse destinations, write reviews, and book travel. With agile, it's possible to deliver the smallest units of functionality (e.g., browse destinations) almost immediately. Furthermore, because feature sizes (i.e., the stories) are small, a large UX design may not immediately be necessary (or in some cases, budgeted). However, what this gives your client is a product that can stand on its own at any given time throughout development. It's important to clarify that deliverables prior to the final product will likely not provide a response to all problems the product set out to solve. That said, these deliverables will allow your client to see progress and steer the course of development as they see fit.
The sunny side of this methodology is it allows development to adapt to customer needs, budgets, innovations in the field, and potential ventures into uncharted territories (e.g., completely new concepts). The dark side encompasses the same notions that make it great: the client can change requirements at any time, features developed independently of one another may feel disjointed, and there is rarely time to create a comprehensive user-centric design.
As a designer, someone who is responsible for the end-user experience, how can you best react in such an environment? Let's take a moment to examine some of the more prominent issues as well as some possible solutions for working in this periodically unpredictable and sometimes volatile field.
Designing Without Design Upfront
The sooner you understand and internalize the fact that big upfront designs may not exist, the better. Because of the pace of an agile environment, it can be difficult to produce high-fidelity designs and systems ahead of development. The only exception may be when style or branding guidelines are clearly defined. Even then, you may actually be wasting your (and your client's) time by flushing out a high-fidelity mockup if requirements are to change.
Even though you will not likely have an opportunity to create a big upfront design, you may be able to take advantage of the period immediately before development begins (known as iteration zero). In this time, try to get as much groundwork done as possible. If you're lucky enough to have direct contact with the client, ask as many questions at this time. What are they envisioning? What features are they aiming for? What theoretical features could be introduced? Why are they building the application? Who are their users? What would their ideal scenario be?
This information may save you from potential rework or dead ends in design.
Reacting to Course Change
The course of development may change at any time. This may cause frustration if the newly proposed idea deviates too far from a preconceived idea or design.
Let's jump back to our theoretical travel application and assume that after using the first implemented feature, your client wants to drop the ability to write reviews and instead provide the ability to message other users within the application. How do you react to this? While potentially frustrating, it's important to remind yourself of the client's current needs and requirements. Additionally, you must able to separate and drop what is no longer needed. Sometimes this means removing something you just spent an entire day on; know that this is okay.
Keeping Designs Simple
Because the horizon may be unknown, try to keep all solutions and designs as simple as you possibly can. Reduce problems down to their lowest common denominator and create only what is necessary—nothing more, nothing less. Not only are such systems easier to maintain, but they may also save you time in case something gets changed, added, or scrapped.
Simple and quick solutions may be all that are necessary. This means ditching perfectionism (pixel counters, I'm looking at you). However, this does not mean relinquishing your perspective on the entirety of the application. On the contrary, sometimes the most important time to consider your high-level design is when you're creating specific solutions. In any case, respond accordingly within the scope of stories, features, and iterations.
Maintaining Consitency Through Development
Even though a comprehensive application design may not be created, it is important to understand feature consistency and congruence. As a designer, one of your greatest challenges may be ensuring that all implemented pieces fit together into a single cohesive experience. One barrier may involve implementation problems; your design for a feature may be spot-on, but due to the quick pace of agile, it may not be fully (or properly) implemented. Because of this, it's important to review all stories that go through iterations.
Alternatively, sometimes your feature designs are properly implemented but the over-arching design feels disjointed. To combat this, try creating a low-fidelity task flow diagram or outline to keep in mind how it all should fit. Not only does this give you some sense of direction and context, but it can also provide your developers with immediate direction if needed.
At times, it will be necessary to jump out of the iterative flow and examine the whole system for congruency. Do components fit? If not, why? As you work through these potential problems, keep in mind the scope of your iteration and deliverables. Refactoring for the sake of consistency is great, but if it means holding up your development team, you may need additional planning for these efforts. Try creating stories specifically for reviewing and updating the UX of your product.
Avoiding the Design Vortex
As a designer, sometimes the most difficult activity to do is to stop designing. It's important to mind the scope and pace of agile, which sometimes means your prototypes will not be pixel perfect. That's okay. Just be able to communicate to your development team how everything should work.
One strategy for this is to conduct basic whiteboarding sessions with fellow designers and your development team. This allows your ideas to be quickly communicated and allows for technical validation of any solutions or features you are considering. If a more formal deliverable is required, try wireframing for multiple screens and layouts.
Considering Your Project
Even though agile development is quick, stay focused on your users, clients, personas, or the closet thing you have to visualize who will be using your product. It's important to be able to visualize who is using your application. How are they using it? Where will they be? Under what conditions? Keep this in mind and help others to understand the project.
And continually ask yourself if the product is still a success. It's really that simple. Is your client happy? Are the users happy? Though subjective, sometimes this is your only metric to check your efforts.
Last But Not Least
Design in an agile setting may be challenging (and even jarring), but it's not all bad. Agile allows for a consistent stream of feedback from your client. Because features are released each iteration, you can potentially gain continuous insight into how your designs are being interpreted and used. Though this provides no substitution for traditional user testing, client demonstrations do provide some level of feedback. In a way, agile may be a great training ground for designers as it provides an opportunity to create smaller, more manageable solutions with a rapid feedback cycle.
For some, creating an effective and memorable user-centric design within an agile environment may seem tricky. Then again, the challenge may also be fun and exciting. It's important to note that there is not one proven method or process that works best. Like all human interaction and patterns, we're still figuring this out. However, as long as you actively consider your end users and design with them in mind, you should do just fine.


text:
I used to be an expert on how babies should be. I knew that all babies who were raised the attachment parenting way never cried (they never needed to!), breastfed easily, coslept without a fuss for baby or parents, developed ahead of the pack, and became energetic, independent toddlers and preschoolers as they moved out of babyhood.
And then I actually had a child, and my expertise faltered.
Mikko as a baby challenged all my expectations for how attachment babies should behave. He cried more than not. He demanded constant motion. I had read in The Continuum Concept, and had bought into the idea, that babies who are worn are limp and content. We wore and carried Mikko everywhere — we had to. But he was shrieky and convulsive.
I also had this defense all ready to give to relatives who questioned our unusual insistence on cosleeping, breastfeeding past infancy, and unschooling — that giving our baby a base of attachment would make him that much more independent. Um … yeah … still waiting for that to happen.
It's not that perfect AP babies don't exist. If I'd had Alrik first, I would have believed the hype I'd told myself. Alrik is the so-called "good" baby (meaning he's convenient, meaning he's generally quiet in public, meaning he sleeps through the night already). If I'd had him first, I'd have pointed to him as being that way because of how we parented him. "He's so easygoing," I'd have been able to gloat, "because he knows we're here to meet all his needs!" Having had a non-easygoing child first, who was raised exactly the same way (or, to be honest, with even more responsiveness, because our poor second child sometimes has to play second fiddle…), I know now it's just not always so.
Now, I've said to friends, and I firmly believe, that Mikko would not have been better off if we'd been non-attachment-minded. I truly do think he'd have been even fussier as a baby, even more hesitant as a child. Breastfeeding and babywearing him in his colicky phases kept us all going until he could outlive them…and now that he's a child with a lot of social anxiety, being less patient and less nurturing would only force him into coping mechanisms that could ultimately do him lasting harm.
So don't think I'm taking back my support of attachment parenting. If anything, I love it all the more as I glimpse what could have been my child's fate if I'd had a different parenting plan in mind.
What I want to do is remove some of the parenting pride — and guilt — we subscribe to. When our babies are easy, when they go to sleep as we wish them to, when they grow and develop on our schedule, we tend to praise our own regimen, whether it's crying-it-out or high responsiveness. If our babies are not fitting into the convenient boxes we've made, people tend to look for what we as parents are doing "wrong," and we feel that judgment.
Maybe we should let it all go.
As I've blogged, I've been privileged and humbled to talk with parents riddled with guilt because cosleeping didn't work for them (no one was getting enough sleep), or because their plan for breastfeeding failed (for medical or support reasons), or whose babies or backs didn't take to babywearing. I've heard parents' stories of children who defy their best efforts at gentle discipline (not that they give up, but just the frustration of it), and of older kids who turn to paths that feel or truly are highly dangerous and disappointing.
Our kids are who they are. We can enhance how comfortable they feel in this world by respecting their needs, by trying to meet them, by acting and reacting in love. But we can't control them, either as wee infants or as strong-minded tots or as maturing tweens and teens. Our parenting is not the sum of their parts. They own their own souls and their own paths, and we can only come alongside them.
This is what I'm learning, daily, from parenting two very different, but very dear, boys.
What surprises have touched you? How have your kids challenged your parenting assumptions?


text:
Saturday, December 18, 2010
An Assortment of Christmas Confections - Pink Saturday
I suspect that most of you are finished with your holiday baking or know exactly which sweets and treats remain to be done. On the off chance that you still need an idea or two, I'm including recipes that are or have, in the past, been part of our Christmas celebration. These are confections that don't fit neatly into other categories. They are all lovely recipes and I'm delighted to share them with you.
Candied Walnuts
Southern Nut Cake
Forget-Me-Not Fudge
Christmas Pudding
Pink Peppermint Patties
Baby Jesus Birthday Cake
Candied Orange and Lemon Peel
Kris Kringle Ginger Cakes
White Chocolate Truffles
Caramel Corn
This post is being linked to:
Pink Saturday, sponsored by Beverly at How Sweet the Sound.
44 comments :
- Beverly said...
Happy Pink Saturday and Happy Holidays to you and your family, dear Mary.
I don't think I had heard this version of this song, but I love it. I have always been a fan of both Art Garfunkel and Peter Simon.
That Southern Nut Cake looks like something we would love. I'm already wishing I had a slice to go with my morning cup of coffee. - December 17, 2010 at 10:49 PM
- Ren- Lady Of The Arts said...
Mary-you make the most wonderful treats- have a wonderful weekend!
- December 17, 2010 at 10:56 PM
- The Words Crafter said...
I just gained 5 pounds, but it was worth it. I love candied walnuts and caramel popcorn....
- December 17, 2010 at 11:05 PM
- Tracy said...
I thought I was done but those peppermint patties are kinda calling my name...
- December 17, 2010 at 11:33 PM
- Ginny Hartzler said...
The pink peppermint patties look awesome, and they aren't too hard to make! I love Art Garfunkel and have one of his albums.
- December 17, 2010 at 11:51 PM
- Karin said...
I had no idea you could make your own peppermint patties.....I'm in big trouble.
- December 18, 2010 at 1:42 AM
- Deb in Hawaii said...
All of your treats look delicious--especially loving the candied walnuts and peppermint patties. ;-)
Hope you have a wonderful weekend. - December 18, 2010 at 3:16 AM
- Lucie said...
Happy Saturday, Mary! What better way to celebrate than with all these wonderful treats :)
- December 18, 2010 at 4:24 AM
- nesrin said...
Alle sieht lecker aus. Grüsse aus Berlin.
- December 18, 2010 at 5:10 AM
- Lynn said...
They all look great Mary! I just said yesterday that I thought I'd make some chocolate covered candied orange peel for Ma. Your link is broken, if you get a chance could you try to fix that? I'll check back later:@)
- December 18, 2010 at 6:38 AM
- fuat gencal said...
Hayırlı hafta sonları, ellerinize sağlık. Çok leziz ve iştah açıcı görünüyor.
Saygılar. - December 18, 2010 at 6:57 AM
- Ann said...
Mary, Everything looks really beautiful. And, listening to Art Garfunkel was a beautiful way to start my day.
- December 18, 2010 at 7:04 AM
- Joanne said...
haha you have most certainly expected WRONG! I have not a single thing made or planned. Not good. But those pink peppermint patties. I NOW have plans to make them! Great round up!
- December 18, 2010 at 7:11 AM
- tata | bonitafood said...
I would love to come over to your house and enjoy those treats :D
- December 18, 2010 at 7:16 AM
- Carol at Serendipity said...
Wonderful treats. The nut cake looks wonderful. I have small list of things to make on Friday and then I am done!
Hope you have a wonderful holiday.
Carol - December 18, 2010 at 7:54 AM
- Angie's Recipes said...
Perfect holiday treats! I love those candied walnuts especially.
Have a wonderful weekend!
Angie - December 18, 2010 at 8:22 AM
- Martha said...
They all look wonderful! Christmas is the time for sweets!
- December 18, 2010 at 8:28 AM
- lena said...
hi mary, all those lovely treats are perfect for the coming christmas. have a great weekend!!
- December 18, 2010 at 8:38 AM
- Diane said...
If you are making all of these for Christmas can I come and join you :) LOL Diane
- December 18, 2010 at 8:57 AM
- kitchen flavours said...
Your treats are all very delicious looking! They are great at anytime of the year. Have a lovely weekend!
- December 18, 2010 at 9:17 AM
- ~Lavender Dreamer~ said...
So many wonderful dishes! Happy weekend! ♥
- December 18, 2010 at 9:52 AM
Happy Pink Saturday Mary! All your recipes look wonderful, the pink peppermint patties really caught my eye. Perfect for a Pink Saturday ;)
- December 18, 2010 at 10:00 AM
- eatgood4life.blogspot.com said...
Wow, so many goodies can't think straight :-) I am working out hard so that I can enjoy the Christmas baking this year. Thanks for all your amazing suggestions :-)
- December 18, 2010 at 10:19 AM
- Unknown said...
Everything looks wonderful, Mary! I especially love the white chocolate truffles!! YUM!
- December 18, 2010 at 10:23 AM
- LV said...
Besides being a super cook, you h ave good taste for music as well. Wish I lived where I could have your leftovers after Christmas. Best wishes to you and family for a happy holiday season.
- December 18, 2010 at 10:44 AM
- Kath said...
All of those goodies look wonderful!
Thank you for sharing the lovely video! I had not heard Art Garfunkel's beautiful carol before. I especially loved the last scene in the video of the snow-covered tree with a red Christmas ornament on it!
:) - December 18, 2010 at 10:44 AM
- nanny said...
Your sweets are a work of art!!!
Have a great weekend.
I have my list of sweets to make but haven't started yet. - December 18, 2010 at 10:56 AM
- Jean at The Delightful Repast said...
Hi Mary, if you need something to drink with all those delicious treats, try my homemade eggnog! I could go for a slice of that Southern Nut Cake right this very minute!
- December 18, 2010 at 11:07 AM
- From the Kitchen said...
The southern nut cake is a definite for after Christmas baking! I've just about cooked and baked out for now. Time to start eating!
Bonnie - December 18, 2010 at 12:19 PM
- Kathy Walker said...
Oh my goodness! So many choices of wonderful things to make. I am focused on the peppermint patties! Happy Holidays.
- December 18, 2010 at 12:24 PM
- Melinda said...
Everything looks really yummy--especially those pink peppermint patties.
Have a great Saturday.
melinda - December 18, 2010 at 12:31 PM
- Eileen said...
Lovely! And the Christmas goodies look divine, too. I'd love to try the peppermint patties or the candied walnuts or the fudge or the pudding. LOL Well, maybe a little of everything. Merry Christmas!
- December 18, 2010 at 12:33 PM
- Ana Powell said...
Happy Pink Saturday.
Gosh, what a lovely round-up of treats.
Wishing you a lovely Christmas ♥ - December 18, 2010 at 1:16 PM
- Cathy said...
What a delicious selection of treats to choose from. Thank you for sharing Art Garfunkel's song. I like it very much too.
- December 18, 2010 at 1:20 PM
Happy Holidays to you and your loved ones...Thank you for sharing HPS!
- December 18, 2010 at 5:27 PM
- Mary Beth @ Live. Laugh. Make Something said...
beautiful and scrumptious! I have tagged your recipes to try! ...and I loved this version of this carol! Thanks for sharing and Merry Pinks to you and your family!
- December 18, 2010 at 5:52 PM
- Donnie said...
I loved all your photos. So yummy. Happy Pink Saturday.
- December 18, 2010 at 7:24 PM
- Velva said...
Happy Holidays to you Mary!!!!
- December 18, 2010 at 7:46 PM
- A Canadian Foodie said...
What beautiful music to listen to as I read through your post, Mary, and scrolled through the lovely pictures of your Christmas treats. The names were particularly compelling, and I will be chasing after some of them in a minute here. I just want to give you a giant metaphoric hug and wish you a very Merry Christmas. I really feel the spirit of the season on your site today.
Valerie - December 18, 2010 at 8:39 PM
- Jeanne said...
Hi Mary, I too love this song. It is a blessing to many. It brings us closer to the meaning of Christmas.
Yes, my baking is pretty much done but we are going to our daughter in Jax, FL for Christmas and we will be cooking up something special. All you shared sounds delicious. Thak you for the ideas for a special treat. The nut bread is my fave.
Wishing you Merry Christmas blessings.
Hugs, Jeanne - December 18, 2010 at 9:42 PM
- Jeannie said...
I love the look of those white chocolate truffles, and the walnuts and the popcorns and the nut cake, oh everything! All of them look so yummy!
- December 18, 2010 at 11:11 PM
- Rue said...
Pink Peppermint Patties? How perfect! :)
- December 19, 2010 at 12:28 AM
- Alicia Foodycat said...
Those white chocolate truffles look so gorgeous!
I am compiling a "Christmas playlist" and that song is definitely going on it! - December 19, 2010 at 10:31 AM
- Ciao Chow Linda said...
What a terrific round up of treats Mary. If only there were 30 more days till Christmas.
- December 19, 2010 at 8:53 PM


text:
Soy Milk Layer:
300 ml unsweetened soy milk
3/4 tsp agar agar powder
1 tbsp sugar
1 pandan leaf
Carrot Juice Layer:
300 ml cups carrot juice
3/4 tsp agar agar powder
1 tbsp condensed milk
1. Wet the jelly moulds and set it aside. Combined all the soy milk layer ingredients and bring it up to a boil. Cook until the agar agar powder dissolved.
2. Pour the mixture into the moulds and tilt the mould to the side. Let it set completely.
3. Combined all the ingredients of the carrot juice layer and bring it up to a boil. Cook until agar agar powder completely dissolved.
4. Set the jelly moulds back to the upright position; lightly scratch the surface with a toothpick. Pour in the carrot juice layer and set it aside to set completely.
5. Serve cold.
Note: Please adjust the amount of sugar and condensed milk to the sweetness of your liking.


text:
Interesting how even past 30 years old I still want mommy when I spike a fever and walk around with a box of tissues. Wondering why I never catch a 24 hour bug or never lose my appetite when sick. Sad to see my parents leave after such good times. Amusing to see the dogs go back and forth between both bedrooms looking for them. Funny how little mishaps can turn into creamy deliciousness like these Mango And Vanilla Bean Buttermilk Panna Cottas.
The morning of my parents' departure, my father and I were up before anyone else as usual. We were reminiscing about the last few weeks spent together. We like to talk food while preparing meals. Surprise, surprise! When we were kids, my father taught us how to crack and juice a coconut, introduced us to the wonders of papaya simply sprinkled with lime juice, cooked the most fabulous Osso Bucco or rice pilaf. I guess he will be my other guest blogger when they come back!
This past Sunday morning, the conversation fell on the wonderful meal my dear friend Bina prepared the last time we visited her and her family. After taking me to the Indian market so I could stock up on my usual and new favorites, she also sent me home with a whopping big can of Alfonso mango puree. We were happily surprised to find out that it was the same kind we would scout at the exotic market when I was a kid. We kept dipping our spoons in the can while getting breakfast ready. I poured some of the puree in 4 glasses for everybody to have a taste and proceeded to make breakfast.
We decided to send them off with a hearty good old American breakfast and I decided to use the last bit of buttermilk I had to make pancakes. I went ahead and whisked buttermilk, vanilla bean seeds, sugar. I am not sure what exactly went array after that or when it did. Pressing needs of sleepy puppies, checking and re-checking and nothing had been left out of the suitcases, phone calls to and from relatives and friends,… I stood over the stove, poured some batter in the pan and turned around. Two minutes later, I heard "Aren't pancakes similar to crepes?" …Hmmm…Yes they could be instead of the gunky burnt mess that was in the frying pan. I had forgotten the eggs and flour.
"Oh dear…I am losing my mind!"…I looked at my parents and pulled out the croissants and toasts. Not much time left to fix anything, finally get in the shower and leave for the airport. I could feel my dad travelling nerves getting sharper by the minute but I hated to waste a vanilla bean anything. Panna Cottas quickly came to mind. I bloomed some gelatin in water, froze everybody's glass of pureed mango and heated up some cream and the vanilla infused buttermilk. Why freeze the fruit? I wanted clean layers for the fruit and panna cotta and once frozen you can easily pour your cream base without it falling straight to the bottom of the puree because of its heavier weight. It also quickens the setting process of the panna cottas but alas it was high time we left for the airport.
So here we are now, parents sound and safe in France and us with two extra Panna Cottas. I served them with little Swiss meringue cookies (same as in Floating Island but piped and baked on a sheetpan) and chopped pistachios. They are so good I wish I could share with you!
Note: I am aware of the pistachio recall here in the States and I am keeping up with the grower involved. Mine were from another farm but please check your stashes and sources.
Mango And Vanilla Bean Buttermilk Panna Cottas:
Serves 4
Kitchen Note: for the recipe I used one cup (250ml) of canned mango puree which I know is not available everywhere. According to the National Mango Board, you would need 2 medium sized mango to obtain one cup of puree. You can substitute with any soft fruit reduced to a puree like apricot, peach, pear, etc…
1 cup (250ml) mango puree
1 tablespoon (15gr) water
1 3/4 teaspoons (4gr) powdered gelatin
1 vanilla bean
1 cup (250ml) heavy cream
1/4 cup (50gr) sugar
1 cup (250ml) whole buttermilk
Divide the mango puree evenly among 4 glasses or ramekins.
Place the water in a small ramekin and sprinkle the gelatin over it. Let it bloom while you prepare the cream.
On a flat surface, cut the vanilla bean in half lengthwise without cutting all the way through. With a pairing knife, scrape the seeds from the pods. Set aside.
In a medium saucepan, heat the heavy cream with the sugar and vanilla bean seeds until the cream is just about to boil, stirring occasionally to make sure the sugar dissolves completely. Remove from the heat and stir in the gelatin until it is completely melted. Let cool for about 10 minutes and add the buttermilk. Let cool to room temperature. You can speed up the process by placing your saucepan over a bowl filled with ice but keep and eye on it as it will thicken faster. Once the cream is cooled, slowly pour it over the frozen fruit and let set in the fridge, at least two hours, preferably overnight.
Serve with chopped pistachios and meringue cookies if desired.


text: Martin Cairney is a highly experienced Database Administrator and Developer with well over a decade's worth of experience with SQL Server. He has knowledge across multiple industry sectors including London's global financial institutions and both Australian State and Federal Government Departments. He has regularly worked with companys with hundreds of SQL Server instances and has experience in developing tools and scripts for managing such large environments. He is an experienced conference presenter, having presented a number of times at SQLBits in the UK and various SQL Server User Groups in Australia and the UK. He is a Microsoft Certified Trainer and holds a number of Microsoft certifications, including MCDBA and MCITP. He has recently moved to Melbourne to help establish LobsterPot's presence there.


text:
Rufus Wainwright's first opera Prima Donna moved to London in Spring 2010 to begin its international tour at Sadler's Wells.
Rufus Wainwright (b. 1973) has been obsessed by opera since his adolescence. Having initially made his name with the eponymous pop debut, Rufus Wainwright in 1998, he hasn't been a stranger to the limelight. He is a man well known for his propensity to plunge unmitigated into all areas of life, it comes as no surprise that his relationship with opera is one of passionate devotion. With typical irreverent charm he describes opera as "a disease that I developed as a teenager and that I just have to manage for the rest of my life." Something he seems to have been doing with grace and success for some time now.
Wainwright's musical achievements are prodigious: his pop songs range from complex orchestral arrangements to the simple beauty of piano and voice, expressed elegantly in songs such as The Art Teacher from Want Two (2004). He has written for film and for dance productions and has worked with the Berliner Ensemble to put Shakespeare's sonnets to music. Given his love of the genre and his musical intent, it was only a matter of time before opera joined his oeuvre. The influences of the form are obvious throughout his work: the song Barcelona features lyrics from the libretto of Giuseppe Verdi's Macbeth and Damned Ladies from his first album is a desperate appeal to the tragic leading ladies of famous operas.
The latter song is an early demonstration of Rufus Wainwright's fascination with that most notorious of opera figures, the diva, and it seems natural then that his first opera should focus on the role. Wainwright's debut opera, Prima Donna premiered at Manchester International Festival last year and tells the story of Régine Saint Laurent, once the world's most acclaimed operatic soprano, who is returning to the stage after six years of silence. The opera makes its reprise with a new production at Sadler's Wells this April before embarking on an international tour.
The production that tours this April, has undergone subtle, but significant changes from its Manchester debut: "The one that we built up in Manchester was a bit of a behemoth, 10 set changes in one act where there were supposed to be none." With a new artistic team on board including Tim Albery as director (whose impressive repertoire includes operas for English National Opera, Metropolitan Opera and Scottish Opera among many others) and acclaimed conductor Robert Houssart, the new production is simpler and more direct. The set has been pared down and the focus is more intense and "more reliant on the music."
Wainwright found this dedication to the music to be a liberating aspect of creating an opera: "Writing and composing one was a pure joy because it gave me an opportunity to focus totally on music and nothing about photo-shoots or fashion; I could just grow a beard, get fat and write opera." Unlike pop music, where the personality of the artist is often as important as the music they produce and sometimes more so, opera "is something that requires all of your attention and all of your dedication and really obliterates your ego. It's just an awesome force, and I don't mean cool, I mean huge and frightening." He is clearly humbled by the experience and the demanding quality of opera is what makes Rufus Wainwright's move into opera composition so daring.
The word "opera" stems from the plural of the Latin opus, meaning work, and Wainwright describes the process as one that required "blood, sweat and tears." Although he has a vast knowledge of the opera world, it was an undeniably ambitious step for Rufus Wainwright to create an entire opera. He speaks of the learning curve involved in moving between aficionado and composer: "I had developed a few idealistic visions that were just shattered to pieces when I actually entered into the reality of the situation." One of the biggest challenges was the process of collaboration. An opera has to "be made with many hands" and collaboration can be a double-edged sword: on the one hand it enables burdens to be shared and creativity to be nurtured, but it also requires careful diplomacy and forces compromise. This cannot have been easy with a subject so close to his heart and Wainwright admits that there were moments when he "thought of walking away whole-heartedly and never returning to the opera house."
Despite the moments of apprehension, it seems that Wainwright's passion for opera and his skill as a musician were enough to transcend the gaps in his experience. He is deeply gracious about his singers, describing them as "some of the most amazing and capable musicians on earth" and the respect is clearly mutual. Janis Kelly, the celebrated Scottish soprano who takes the role of Saint Laurent, speaks of his "great sense of drama" and his "extraordinary gift of lyric writing." Although there was great support amongst the creative team, developing Prima Donna was a challenging and broadening experience for everyone involved. Wainwright wryly remarks: "I have stretch marks from how much I grew emotionally in this process" and Janis Kelly is sincere when she says: "It's demanding; it's not an easy night. Dramatically it's very stretching and vocally it's stretching too and it's not just solo items, but he's also written beautiful duets and quartets." Wainwright is keen to see the opera world evolve and he is vocal about challenging the static way of working that the opera world has slipped into: "Everybody kind of falls into this military order when things get rolling, which is necessary on one hand to keep things going, but I do think it also stifles creativity and is something that has to be toyed with a little bit in my opinion."
Such a structured way of working can act to impede the music and Wainwright admits that "sometimes classical music has become so kind of mathematical and intellectual and cold in many ways." His preference is for passion and vigour and it is this vitality that he has attempted to capture with Prima Donna. He muses: "I think what makes it different is its utter reliance on emotional impact" and Kelly expresses her agreement, remarking upon Rufus' ability to "get to the real core of the person. The melodramatic action of the grand epic opera moment is all there, but it's stripped away at the end and you see the person behind it."
The emotion of this opera is perhaps not entirely disconnected from the fact that it is performed in French, the language of passion. Wainwright explains that he began the opera in French to get the right aesthetic and that he had intended to switch the language, but as it progressed "more and more of the melody started to come out of the language." Although French may have caused initial difficulties in getting the opera produced (the Metropolitan Opera originally commissioned the piece but wanted it in English), Wainwright doesn't consider lack of understanding to be a problem: "You go to all major opera houses now and they have translations, but I've always loved not understanding opera." Even the words and their meanings take a back seat to the overwhelming power of the music in opera and Wainwright is more than happy to be engulfed by it. He suggests that "opera chooses you; you don't choose it." A fate he has accepted gladly and Prima Donna is his glorious homage to these shackles of opera, which he wears with reverence.
Wainwright's opera deals with the question of timing, when should a performer take that graceful step back from the stage? However, it must be said that the man himself shows no signs of letting up with his own career. He says that whilst he would love to continue with opera, he also feels that he has "a little more work to accomplish in the pop realm" and he's already heading straight back into the fray, with a new album due for release on the 5 April. All Days are Nights: Songs for Lulu is not a complete departure from opera, although it never is with Wainwright, and Les Feux D'Artifice T'Appellant, the final aria from Prima Donna is included as a highlight on the album.
Rufus Wainwright's Prima Donna began its international tour at Sadler's Wells on Monday 12 April 2010. The production then moved to Toronto for the North American premiere, which will took place at Luminato, Toronto Festival of Arts and Creativity (11 – 20 June 2010). www.sadlerswells.com.
Bryony Byrne


text:
December 27, 2022
Track this case
Appellate - DC Circuit
Petition for Review
Reflects complaints, answers, motions, orders and trial notes entered from Jan. 1, 2011.Additional or older documents may be available in Pacer.
The D.C. Circuit found Friday that a rehabilitation facility was within its rights under federal labor law to distribute flyers during a union drive, departing from the National Labor Relations Board's conclusion that the handouts were part of an illegal surveillance violation.
In the legal profession, information is the key to success. You have to know what's happening with clients, competitors, practice areas, and industries. Law360 provides the intelligence you need to remain an expert and beat the competition.
Already a subscriber? Click here to login
Email (NOTE: Free email domains not supported)
First Name
Last Name
Phone Number (###-###-####)
PLEASE NOTE: A verification email will be sent to your address before you can access your trial.
Password (at least 8 characters required)
Confirm Password
Job Title
Law360 Employment Authority may contact you in your professional capacity with information about our other products, services and events that we believe may be of interest.You'll be able to update your communication preferences via the unsubscribe link provided within our communications.We take your privacy seriously. Please see our Privacy Policy.


text:
Drug overdose deaths rose for the 11th straight year, federal data show, and most of them were accidents involving addictive painkillers despite growing attention to risks from these medicines."The big picture is that this is a big problem that has gotten much worse quickly," said Dr. Thomas Frieden, head of the Centers for Disease Control and Prevention, which gathered and analyzed the data.
In 2010, the CDC reported, there were 38,329 drug overdose deaths nationwide. Medicines, mostly prescription drugs, were involved in nearly 60 percent of overdose deaths that year, overshadowing deaths from illicit narcotics.
The report appears in Tuesday's Journal of the American Medical Association.
It details which drugs were at play in most of the fatalities. As in previous recent years, opioid drugs — which include OxyContin and Vicodin — were the biggest problem, contributing to 3 out of 4 medication overdose deaths.Frieden said many doctors and patients don't realize how addictive these drugs can be, and that they're too often prescribed for pain that can be managed with less risky drugs.They're useful for cancer, "but if you've got terrible back pain or terrible migraines," using these addictive drugs can be dangerous, he said.Medication-related deaths accounted for 22,134 of the drug overdose deaths in 2010. Anti-anxiety drugs including Valium were among common causes of medication-related deaths, involved in almost 30 percent of them.
Among the medication-related deaths, 17 percent were suicides. The report's data came from death certificates, which aren't always clear on whether a death was a suicide or a tragic attempt at getting high. But it does seem like most serious painkiller overdoses were accidental, said Dr. Rich Zane, chair of emergency medicine at the University of Colorado School of Medicine. The study's findings are no surprise, he added. "The results are consistent with what we experience" in ERs, he said, adding that the statistics no doubt have gotten worse since 2010. Some experts believe these deaths will level off. "Right now, there's a general belief that because these are pharmaceutical drugs, they're safer than street drugs like heroin," said Don Des Jarlais, director of the chemical dependency institute at New York City's Beth Israel Medical Center. "But at some point, people using these drugs are going to become more aware of the dangers," he said. Frieden said the data show a need for more prescription drug monitoring programs at the state level, and more laws shutting down "pill mills" — doctor offices and pharmacies that over-prescribe addictive medicines.
Last month, a federal panel of drug safety specialists recommended that Vicodin and dozens of other medicines be subjected to the same restrictions as other narcotic drugs like oxycodone and morphine. Meanwhile, more and more hospitals have been establishing tougher restrictions on painkiller prescriptions and refills. One example: The University of Colorado Hospital in Aurora is considering a rule that would ban emergency doctors from prescribing more medicine for patients who say they lost their pain meds, Zane said. Article Link…


text:
Mrs White lace Jumpsuit
Model wearing a small
tall girl friendly
good stretch order your true size
high quality lace, hand sewn
ships 6/10
We offer free standard shipping on all orders over $150 in the U.S. and flat rate shipping on international orders.
We have the following shipping options available:
Free Standard Shipping: 4-7 Business Days
Standard Shipping: 4-7 Business Days
Express Shipping: 1-2 Business Days
Please note, shipping time frames do not include processing time. Orders will be delivered based on the option chosen once the order has been processed and prepared by our facility. Orders are only delivered Monday - Friday.
Orders are processed pending item availability and payment approval. During high volume periods, product availability may be subject to change while your order is being processed.
Most orders placed Monday through Friday will be processed and shipped within 1-2 business days.
Orders placed on Friday or over the weekend will start processing on Monday and ship within 1-2 business days.
Items available for pre-order will be indicated on the product page with the anticipated ship date. Please note, once your order is placed, the full payment will be captured up front. If you wish to cancel your order before the ship date, you may do so by contacting Customer Service.
If orders contain items for pre-order and items ready to ship, please note that your items will be shipped together and we are unable to ship items separately that are included in the same order.
You can track your order with the tracking information provided in your shipment notification e-mail.
Shipping addresses cannot be changed. We will only ship to the shipping address entered when the order was originally placed.
If you believe that your package was lost or stolen, please contact the shipping courier first and send us an email.
We are not responsible for lost or stolen packages.
Shipping fees are non-refundable and will not be included in your refund.


text:
Anniversary Flowers
Need an anniversary or romantic gift idea? Bra-Wey Florist can help! We've got all types of flowers for an anniversary or just to say "I Love You". Send classic roses, a modern bouquet or even a plant. Nothing says "I Love You" like surprising your loved one with a stunning bouquet! Bra-Wey Florist can deliver to Weymouth, MA or nationwide, for a real surprise they won't soon forget!


text:
Sticks and Stones
There are about six thousand things that I'm sitting on posting about.
Okay, maybe just ten:
1) The fate of Kermit, and why the It's Not Easy Being Green Dancers will never end up on America's Got Talent.
2) What America's Got Talent, and the presence of David Hasselhoff thereon, reveals about America's Capacity for Irony. And the decline of Western Civilization.
3) My further thoughts (which, I know, you all BURN to hear) on Caitlin Flanagan, provoked by this.
4) My confusion around when the right time might be to beg the storks to bring a little sister or brother for WonderBaby to tyrannize, thereby redirecting her tyrannical energies away from me. (For the record, I'm pretty much feeling exactly what Amy is.)
5) My confusion around whether or not to begin weaning WonderBaby.
6) Why I have to break up with my playgroup/mom's group.
7) The painful and confusing experience this week of being broken up with by a old friend for not rising above the pressures of new motherhood to be more social when I am clearly capable of being social because I BLOG. (Which would be the most hurtful and confusing thing in my week so far, were it not for a) the head-piercing ear-ache that I am currently suffering, b) terrible family crap, and c) what I've written about below.)
8) Relatedly, why it is really, really hard, as a new mother, to not only 'be social' beyond the playground, but to be ANYTHING BUT A MOTHER, and why that can really interfere with what other people consider to be normal everyday life as an adult with adult relationships.
9) More details on the effort that I am making to be social with real-life moms - because contact with other moms is vital to survival - who also happen to be bloggers (TO Mama-Bloggers-Get-Together Inaugural Event!) and a notice that there is a Dad - yes, a DAD - in the Basement, venting.
10) My second run-in with Zanta.
I have spewed out this list of posts because they are pounding on my brain and hurting my head. They'll all get posted. But not today. Today, I am sick. And overwhelmed by some family issues. And run to the ground by WonderBaby-Gone-Turbo. So I was not going to post. I've been resisting posting since yesterday.
But something is really, really bothering me.
The other night, I received an e-mail from my sister. Among other things, she said this:
"I have to plan for the talk I am giving Tanner's class about Muscular Dystrophy. It came out last week that some kids are telling Tanner he is going to die soon..."
Children in my nephew's kindergarten class are telling him that he is going to die. Which is especially disturbing - for those of you who do not know the full story about my nephew - because it is true. He has Duchenne's Muscular Dystrophy. His muscles are wasting away. When the muscles that are his heart and lungs give out - most likely while he is still very young - he will die.
Which is something that, as you can imagine, is handled with the utmost delicacy by his family. Tanner knows that there is a problem with his muscles. He knows that he has to see doctors all the time. He knows that he has to use leg braces, and that there is a wheelchair waiting for him. He knows that he has a very special wish because of these things. But he has not fully understood that this all means that he is going to die, and what it means that he is going to die.
Death is pretty abstract for young children. But even in kindergarten, they know that it has something to do with going away forever. They know - they worry - that it might hurt. Tanner worries. He knows that death has something to do with him. He just can't yet understand what or why that is.
Which is why it is that these children taunting him about death is so hurtful. His proximity to death isolates him. It's what makes him different. But unlike having red hair or an accent, it's not something that he can embrace. The fact of death being in his future in a way that it is not for other children is a painful thing. And so, by calling him out for it, these children are hurting him. Badly.
I'm not angry at the children. They're confused by death, and by Tanner. But they're confused because they don't understand, and they have not been encouraged to understand. Tanner has been excluded from the social world of children since he was diagnosed with DMD. He has never been invited to a playgroup, or to a birthday party (and in the latter case, he is always the only child in the class that is excluded.) When his mother approaches other mothers about playdates, excuses are made. The other children do not play with him. He is isolated among them because they have been taught, however unintentionally, that it is okay to isolate him.
And it's this, I think, that has created the conditions wherein these children think that's okay to tease him about dying. And I'm angry about that.
Maybe I'm not being fair. Kids are kids, right? But Kristen's post today reminded me that WE shape our children. We are responsible for whether or not they are considerate and kind. For whether they pinch or punch or pull or tease. For whether they hurt other children. For whether they understand that ignoring or isolating others can be as hurtful - can be more hurtful - than any pinch.
Please, fellow parents, take the time to find out whether there is a child in your childrens' class or group who is seen as different. Ask your child why. Ask your child whether that child is teased or bullied or just ignored. And then encourage your child to not participate.
And ask yourselves whether you do anything - however unintentionally - that teaches your child that it's okay or acceptable to shun those who are different. Have you ever turned away from, or refused to make eye contact with, someone in a wheelchair? Someone who looks funny, or walks funny? I realize that this is a tough one: we don't want to teach our children to embrace absolutely everybody (this is not safe), especially people that make them uncomfortable. But we should be able to teach them how to discriminate considerately. They don't have to be friends with everybody. They can and should ignore other children who are mean to them. But shouldn't we teach them that it is never okay to single out one child for exclusion? That difference in and of itself shouldn't be a basis for discrimination? That being hurtful is never okay?
Maybe I'm wrong. (Am I wrong? Am I being too judgmental here?) But if I could say one thing to the parents of the children in Tanner's class (who, I think, need the talk that my sister is going to give more than the children do) it would be this: ask yourselves what you would want and expect from other children and parents if your child were in Tanner's shoes. And then conduct yourselves accordingly.
Golden Rule, Categorical Imperative, whatever. Do unto others. Play nice, be nice.
And teach your children to do the same.


text:
A new high-tech environmental monitoring station based at Marist College in Poughkeepsie was unveiled Tuesday on the banks of the Hudson River. Hudson Valley Bureau Chief Dave Lucas reports.
The new station is part of a network of 15 sensors collectively known as the Hudson River Environmental Conditions Observing System, providing round-the-clock data on a range of variables— such as temperature, salinity, and pH --- Stuart Findlay, an aquatic ecologist at the Cary Institute, says the new station is unique because it can collect actual water samples.
The Poughkeepsie station was funded through the US Environmental Protection Agency, built in partnership with the U.S. Geological Survey, the New York State Department of Conservation, the Cary Institute of Ecosystem Studies, and Marist College.
It continuously monitors physical and chemical conditions of the water, automatically collecting samples for the assessment of toxics and pharmaceuticals.
Gary Wall is a hydrologist with the US Geological Survey. He says that the USGS is already using the station to monitor sediment, nutrient, and pesticide conditions in the Hudson River.
Stuart Findlay points out that the Poughkeepsie station goes the sensors one better: it can track contaminants attached to sediment, such as PCBS
The NYS DEC will also be relying on data from the station in their assessments of the state's water quality. Collected data will be used in assessing flood risk, determining water quality, pollution cleanup, DEC permitting, restoration efforts, and fisheries management.
NYS DEC Hudson River Estuary Coordinator Fran Dunwell notes one of the goals is to restore the signature fisheries of the Hudson. All agencies agree the greatest value in the station is its expected contribution to long-term "river recovery."


text:
This week, we're going to broaden your horizons with something so geeky that even I know nothing about it: World of Warcraft. Apparently, this is a "game" where "players" spend untold thousands of hours walking around and killing things and otherwise forfeiting what was left of their "lives." To do this, I asked Jen's brother Ben, who is himself a recovering WoW addict, to help decipher these cakes. So let's get started, shall we?
And here's another angle:
"Gold farming" is a term loosely defined as selling imaginary money for real money. Kind of like the stock market, only dominated by Chinese corporations. (Okay, exactly like the stock market.)
And finally, we have a cake based on one of the most popular places in the game, the bank in Ogrimmar, the capital city of the Horde.
For reference, here's a screen shot of the building in the game:
On a side note, see those itty bitty game people with the colorful words over their heads? Those are your IT guys, your Microsoft employees, and your computer repair people. In short, the folks who keep the internets running and, thusly, control the world. So be nice to them, or someday, when you least expect it, you just might find yourself barred from Facebook. And then what will you do? Call somebody?
A big thanks to Ben, logger of untold hours in Horde-y land, for finally putting all that knowledge to good use.
(Just kidding, Ben! We all know nothing good comes from the Horde.)
- Similar Sweets: Star Wars


text:
Numeric Haskell: A Vector Tutorial
Vector is a Haskell library for working with arrays. It has an emphasis on very high performance through loop fusion, whilst retaining a rich interface. The main data types are boxed and unboxed arrays, and arrays may be immutable (pure), or mutable. Arrays may hold Storable elements, suitable for passing to and from C, and you can convert between the array types. Arrays are indexed by non-negative Int
The vector library has an API similar to the famous Haskell list library, with many of the same names.
This tutorial is modelled on the NumPy tutorial.
Quick Tour
Here is a quick overview to get you started.
Importing the library
Download the vector package:
$ cabal install vector
and import it as, for boxed arrays:
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as V
for unboxed arrays. The library needs to be imported qualified as it shares the same function names as list operations in the Prelude.
Generating Vectors
New vectors can be generated in many ways:
$ ghci
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :m + Data.Vector
-- Generating a vector from a list:
Prelude Data.Vector> let a = fromList [10, 20, 30, 40]
Prelude Data.Vector> a
fromList [10,20,30,40] :: Data.Vector.Vector
-- Or filled from a sequence
Prelude Data.Vector> enumFromStepN 10 10 4
fromList [10,20,30,40] :: Data.Vector.Vector
-- A vector created from four consecutive values
Prelude Data.Vector> enumFromN 10 4
fromList [10,11,12,13] :: Data.Vector.Vector
You can also build vectors using operations similar to lists:
-- The empty vector
Prelude Data.Vector> empty
fromList [] :: Data.Vector.Vector
-- A vector of length one
Prelude Data.Vector> singleton 2
fromList [2] :: Data.Vector.Vector
-- A vector of length 10, filled with the value '2'
-- Note that to disambiguate names,
-- and avoid a clash with the Prelude,
-- with use the full path to the Vector module
Prelude Data.Vector> Data.Vector.replicate 10 2
fromList [2,2,2,2,2,2,2,2,2,2] :: Data.Vector.Vector
In general, you may construct new vectors by applying a function to the index space:
Prelude Data.Vector> generate 10 (^2)
fromList [0,1,4,9,16,25,36,49,64,81] :: Data.Vector.Vector
Vectors may have more than one dimension:
-- Here we create a two dimensional vector, 10 columns,
-- each row filled with the row index.
Prelude Data.Vector> let x = generate 10 (\n -> Data.Vector.replicate 10 n)
-- The type is "Vector of Vector of Ints"
Prelude Data.Vector> :t x
x :: Vector (Vector Int)
Vectors may be grown or shrunk arbitrarily:
Prelude Data.Vector> let y = Data.Vector.enumFromTo 0 11
Prelude Data.Vector> y
fromList [0,1,2,3,4,5,6,7,8,9,10,11] :: Data.Vector.Vector
-- Take the first 3 elements as a new vector
Prelude Data.Vector> Data.Vector.take 3 y
fromList [0,1,2] :: Data.Vector.Vector
-- Duplicate and join the vector
Prelude Data.Vector> y Data.Vector.++ y
fromList [0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11] :: Data.Vector.Vector
Modifying vectors
Just as with lists, you can iterate (map) over arrays, reduce them (fold), filter them, or join them in various ways:
-- mapping a function over the elements of a vector
Prelude Data.Vector> Data.Vector.map (^2) y
fromList [0,1,4,9,16,25,36,49,64,81,100,121] :: Data.Vector.Vector
-- Extract only the odd elements from a vector
Prelude Data.Vector> Data.Vector.filter odd y
fromList [1,3,5,7,9,11] :: Data.Vector.Vector
-- Reduce a vector
Prelude Data.Vector> Data.Vector.foldl (+) 0 y
-- Take a scan (partial results from a reduction):
Prelude Data.Vector> Data.Vector.scanl (+) 0 y
fromList [0,0,1,3,6,10,15,21,28,36,45,55,66] :: Data.Vector.Vector
-- Zip two arrays pairwise, into an array of pairs
Prelude Data.Vector> Data.Vector.zip y y
fromList [(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11)] :: Data.Vector.Vector
Indexing vectors
And like all good arrays, you can index them in various ways:
-- Take an arbitrary element
Prelude Data.Vector> y ! 4
-- Take the last element
Prelude Data.Vector> Data.Vector.last y
-- Take the first element
Prelude Data.Vector> Data.Vector.head y
-- Take the rest
Prelude Data.Vector> Data.Vector.tail y
fromList [1,2,3,4,5,6,7,8,9,10,11] :: Data.Vector.Vector
The Tutorial
The vector package provides several types of array. The most general interface is via Data.Vector, which provides for boxed arrays, holding any type.
There are also more specialized array types:
which provide unboxed arrays (i.e. no closures) and storable arrays (data that is pinned, and may be passed to and from C via a Ptr).
In all cases, the operations are subject to loop fusion. That is, if you compose two functions,
map f . map g
the compiler will rewrite it into a single traversal:
map (f . g)
saving time and space.
Simple example
You can create the arrays in many ways, for example, from a regular Haskell list:
Prelude Data.Vector> let a = fromList [2,3,4]
Prelude Data.Vector> a
fromList [2,3,4] :: Data.Vector.Vector
Prelude Data.Vector> :t a
a :: Vector Integer
GHCi will print the contents of the vector as executable code.
To create a multidimensional array, you can use a nested list generator to fill it:
Prelude Data.Vector> let x = fromList [ fromList [1 .. x] | x <- [1..10] ]
Prelude Data.Vector> :t x
x :: Vector (Vector Integer)
-- XXX TODO need a better printing function for multidimensional arrays.
You can also just create arrays filled with zeroes:
Prelude Data.Vector> Data.Vector.replicate 10 0
fromList [0,0,0,0,0,0,0,0,0,0] :: Data.Vector.Vector
And you can fill arrays from a sequence generator:
Prelude Data.Vector> enumFromN 1 10
fromList [1,2,3,4,5,6,7,8,9,10] :: Data.Vector.Vector
Prelude Data.Vector> enumFromStepN 0 10 10
fromList [0,10,20,30,40,50,60,70,80,90] :: Data.Vector.Vector
Array Types
The vector package provides several array types, with an identical interface. They have different flexibility with respect to the types of values that may be stored in them, and different performance characteristics.
In general:
- End users should use Data.Vector.Unboxed for most cases
- If you need to store more complex structures, use Data.Vector
- If you need to pass to C, use Data.Vector.Storable
For library writers;
- Use the generic interface, to ensure your library is maximally flexible: Data.Vector.Generic
Boxed Arrays: Data.Vector
The most flexible type is Data.Vector.Vector, which provides *boxed* arrays: arrays of pointers to Haskell values.
- Data.Vector.Vector's are fully polymorphic: they can hold any valid Haskell type
These arrays are suitable for storing complex Haskell types (sum types, or algebraic data types), but a better choice for simple data types is Data.Vector.Unboxed.
Unboxed Arrays: Data.Vector.Unboxed
Simple, atomic types, and pair types can be stored in a more efficient manner: consecutive memory slots without pointers. The Data.Vector.Unboxed.Vector type provides unboxed arrays of types that are members of the Unbox class, including:
- Bool
- ()
- Char
- Double
- Float
- Int
- Int8, 16, 32, 64
- Word
- Word8, 16, 32, 64
- Complex a's, where 'a' is in Unbox
- Tuple types, where the elements are unboxable
Unboxed arrays should be preferred when you have unboxable elements, as they are generally more efficient.
Storable Arrays: passing data to C
Storable arrays (Data.Vector.Storable.Vector) are vectors of any type in the Storable class.
These arrays are pinned, and may be converted to and from pointers, that may be passed to C functions, using a number of functions:
:: Storable a
=> ForeignPtr a
-> Int
-> Int
-> Vector a
-- Create a vector from a ForeignPtr with an offset and a length. The data may
-- not be modified through the ForeignPtr afterwards.
:: Storable a
=> Vector a
-> (ForeignPtr a, Int, Int)
-- Yield the underlying ForeignPtr together with the offset to the data and its
-- length. The data may not be modified through the ForeignPtr.
:: Storable a
=> Vector a
-> (Ptr a -> IO b)
-> IO b
-- Pass a pointer to the vector's data to the IO action. The data may not be
-- modified through the 'Ptr.
Storing your own types in Storable vectors
You can store new data types in Storable vectors, beyond those for instances that already exist, by writing a Storable instance for the type.
Here we store a 4-element Double vector as the array element.
{-# LANGUAGE BangPatterns #-}
import Data.Vector.Storable
import qualified Data.Vector.Storable as V
import Foreign
import Foreign.C.Types
-- Define a 4 element vector type
data Vec4 = Vec4 {-# UNPACK #-} !CFloat
{-# UNPACK #-} !CFloat
{-# UNPACK #-} !CFloat
{-# UNPACK #-} !CFloat
Ensure we can store it in an array
instance Storable Vec4 where
sizeOf _ = sizeOf (undefined :: CFloat) * 4
alignment _ = alignment (undefined :: CFloat)
{-# INLINE peek #-}
peek p = do
a <- peekElemOff q 0
b <- peekElemOff q 1
c <- peekElemOff q 2
d <- peekElemOff q 3
return (Vec4 a b c d)
q = castPtr p
{-# INLINE poke #-}
poke p (Vec4 a b c d) = do
pokeElemOff q 0 a
pokeElemOff q 1 b
pokeElemOff q 2 c
pokeElemOff q 3 d
q = castPtr p
And now we can write operations on the new vector, with very good performance.
a = Vec4 0.2 0.1 0.6 1.0
m = Vec4 0.99 0.7 0.8 0.6
add :: Vec4 -> Vec4 -> Vec4
{-# INLINE add #-}
add (Vec4 a b c d) (Vec4 a' b' c' d') = Vec4 (a+a') (b+b') (c+c') (d+d')
mult :: Vec4 -> Vec4 -> Vec4
{-# INLINE mult #-}
mult (Vec4 a b c d) (Vec4 a' b' c' d') = Vec4 (a*a') (b*b') (c*c') (d*d')
vsum :: Vec4 -> CFloat
{-# INLINE vsum #-}
vsum (Vec4 a b c d) = a+b+c+d
multList :: Int -> Vector Vec4 -> Vector Vec4
multList !count !src
| count <= 0 = src
| otherwise = multList (count-1) $ V.map (\v -> add (mult v m) a) src
main = do
print $ Data.Vector.Storable.sum
$ Data.Vector.Storable.map vsum
$ multList repCount
$ Data.Vector.Storable.replicate arraySize (Vec4 0 0 0 0)
repCount, arraySize :: Int
repCount = 10000
arraySize = 20000
Pure Arrays
Impure Arrays
Arrays can be created and operated on in a mutable fashion -- using destructive updates, as in an imperative language. Once all operations are complete, the mutable array can be "frozen" to a pure array, which changes its type.
Mutable arrays plus freezing are quite useful for initializing arrays from data in the outside world.
For example, to fill a generic array, we first
- allocate an empty vector of size
- destructively update the cells using a generator function
- freeze the array and return it as a pure value.
import qualified System.Random.Mersenne as R
import qualified Data.Vector.Generic as G
import qualified Data.Vector.Generic.Mutable as GM
random :: (R.MTRandom a, G.Vector v a) => R.MTGen -> Int -> IO (v a)
random g n = do
v <- GM.new n
fill v 0
G.unsafeFreeze v
fill v i
| i < n = do
x <- R.random g
GM.unsafeWrite v i x
fill v (i+1)
| otherwise = return ()
Here we use the Data.Vector.Generic.Mutable.new to allocate a new, uninitialized array, which we then write elements to (using unsafeWrite).
By using the generic interface, we can construct boxed, storable or unboxed arrays all from the same code.
Some examples
The most important attributes of an array are available in O(1) time, such as the size (length),
-- how big is the array?
Prelude Data.Vector> let a = fromList [1,2,3,4,5,6,7,8,9,10]
Prelude Data.Vector> Data.Vector.length a
-- is the array empty?
Prelude Data.Vector> Data.Vector.null a
Array Creation
The most common way to generate a vector is via an enumeration function:
- enumFromN
- enumFromStepN
And the list-like:
- enumFromTo
- enumFromThenTo
The enumFrom*N functions are guaranteed to optimize well for any type. The enumFromTo functions might fall back to generating from lists if there is no specialization for your type. They are currently specialized to most Int/Word/Double/Float generators.
> enumFromN 1 10
fromList [1,2,3,4,5,6,7,8,9,10]
> enumFromStepN 1 3 4
fromList [1,4,7,10]
> Data.Vector.enumFromTo 1 10
fromList [1,2,3,4,5,6,7,8,9,10]
-- counting backwards
> Data.Vector.enumFromThenTo 10 9 1
fromList [10,9,8,7,6,5,4,3,2,1]
A note on fusion
As for almost all vector functions, if an enumerator is composed with a traversal or fold, they will fuse into a single loop.
For example, we can fuse generation of an array of doubles, with computing the product of the square roots. The source program consists of two loops:
import qualified Data.Vector as V
test :: V.Vector Int -> Double
test = V.foldl (\ a b -> a * sqrt (fromIntegral b)) 0
create :: Int -> V.Vector Int
create n = (V.enumFromTo 1 n)
main = print (test (create 1000000))
And after optimization (revealed with the ghc-core tool), we have only one loop:
main_$s$wfoldlM_loop :: Int# -> Double# -> Double#
main_$s$wfoldlM_loop =
\ (sc_sWA :: Int#) (sc1_sWB :: Double#) ->
case <=# sc_sWA 1000000 of _ {
False -> sc1_sWB;
True ->
(+# sc_sWA 1)
sc1_sWB (sqrtDouble# (int2Double# sc_sWA)))
Doubling the performance, by halving the number of traversals. Fusion also means we can avoid any intermediate data structure allocation.
An example: filling a vector from a file
We often want to populate a vector using a external data file. The easiest way to do this is with bytestring IO, and Data.Vector.unfoldr (or the equivalent functions in Data.Vector.Unboxed or Data.Vector.Storable:
Parsing Ints
The simplest way to parse a file of Int or Integer types is with a strict or lazy ByteString, and the readInt or readInteger functions:
{-# LANGUAGE BangPatterns #-}
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.Vector as U
import System.Environment
main = do
[f] <- getArgs
s <- L.readFile f
print . U.sum . parse $ s
-- Fill a new vector from a file containing a list of numbers.
parse = U.unfoldr step
step !s = case L.readInt s of
Nothing -> Nothing
Just (!k, !t) -> Just (k, L.tail t)
Note the use of bang patterns to ensure the parsing accumulated state is produced strictly.
Create a data file filled with 1 million integers:
$ seq 1 1000000 > data
Compile with -Odph (enables special optimizations to help fusion):
$ ghc -Odph --make vector.hs
$ time ./vector data 500000500000 ./vector data 0.08s user 0.01s system 98% cpu 0.088 total
Parsing Floating Point Values
To load a file of floating point values into a vector, you can use bytestrings and the bytestring-lexing package, which provides readDouble and readFloat functions.
{-# LANGUAGE BangPatterns #-}
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.ByteString.Lex.Lazy.Double as L
import qualified Data.Vector as U
import System.Environment
main = do
[f] <- getArgs
s <- L.readFile f
print . U.sum . parse $ s
-- Fill a new vector from a file containing a list of numbers.
parse = U.unfoldr step
step !s = case L.readDouble s of
Nothing -> Nothing
Just (!k, !t) -> Just (k, L.tail t)
Parsing Binary Data
The best way to parse binary data is via bytestrings and the Data.Binary package.
There are instances of Binary and Serialize available in the vector-binary-instances package.
An example: parsing a list of integers in text form, serializing them back in binary form, then loading that binary file:
{-# LANGUAGE BangPatterns #-}
import Data.Vector.Binary
import Data.Binary
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.Vector.Unboxed as V
main = do
s <- L.readFile "dat"
let v = parse s :: V.Vector Int
encodeFile "dat2" v
v' <- decodeFile "dat2" :: IO (V.Vector Int)
print (v == v')
-- Fill a new vector from a file containing a list of numbers.
parse = V.unfoldr step
step !s = case L.readInt s of
Nothing -> Nothing
Just (!k, !t) -> Just (k, L.tail t)
Random numbers
If we can parse from a file, we can also fill a vector with random numbers. We'll use the mersenne-random package:
$ cabal install mersenne-random
We can then use MTRandom class to generate random vectors of different types:
import qualified Data.Vector.Unboxed as U
import System.Random.Mersenne
import Control.Monad
main = do
-- create a new source of randomness
-- and an infinite list of randoms
g <- newMTGen Nothing
rs <- randoms g
-- fill a vector with the first 10 random Ints
let a = U.fromList (take 10 rs) :: U.Vector Int
-- print the sum
print (U.sum a)
-- print each element
forM_ (U.toList a) print
Running it:
$ runhaskell B.hs
We can also just use the vector-random package to generate new vectors initialized with the mersenne twister generator:
For example, to generate 100 million random Doubles and sum them:
import qualified Data.Vector.Unboxed as U
import System.Random.Mersenne
import qualified Data.Vector.Random.Mersenne as G
main = do
g <- newMTGen Nothing
a <- G.random g 10000000 :: IO (U.Vector Double) -- 100 M
print (U.sum a)
Filling with a monadic action
We might want to fill a vector with a monadic action, and have a pure vector at the end. The Vector API now contains a standard replicateM for this purpose, but if your monadic action is in IO, the following code is more efficient:
replicateMIO :: (G.Vector v a) => Int -> IO a -> IO (v a)
replicateMIO n a = do
v <- M.new n
fill v 0
G.unsafeFreeze v
fill v i
| i < n = do
x <- a
M.unsafeWrite v i x
fill v (i+1)
| otherwise = return ()
Transformations on Vectors
A primary operation on arrays are the zip class of functions.
> let a = fromList [20,30,40,50]
> let b = enumFromN 0 4
> a
fromList [20,30,40,50]
> b
fromList [0,1,2,3]
> Data.Vector.zipWith (-) a b
fromList [20,29,38,47]
We can also, of course, apply a function to each element of a vector (map):
> Data.Vector.map (^2) b
fromList [0,1,4,9]
> Data.Vector.map (\e -> 10 * sin (fromIntegral e)) a
fromList [9.129452507276277,-9.880316240928618,7.451131604793488,-2.6237485370392877]
> Data.Vector.map (< 35) a
fromList [True,True,False,False]
Folds: Sums, Products, Min, Max
Many special purpose folds (reductions) on vectors are available:
> let a = enumFromN 1 100
> Data.Vector.sum a
> Data.Vector.product a
> Data.Vector.minimum a
> Data.Vector.maximum a
Indexing, Slicing and Iterating
One dimensional arrays can be indexed, sliced and iterated over pretty much like lists.
Because Haskell values are by default immutable, all slice operations are zero-copying.
> let a = enumFromN 0 10
> a
fromList [0,1,2,3,4,5,6,7,8,9]
> let b = Data.Vector.map (^3) a
> b ! 2
> slice 2 3 b
fromList [8,27,64]
slice takes 3 arguments: the initial index to slice from, the number of elements to slice, and the vector to operate on.
A number of special-purpose slices are also available:
> Data.Vector.init b
fromList [0,1,8,27,64,125,216,343,512]
> Data.Vector.tail b
fromList [1,8,27,64,125,216,343,512,729]
> Data.Vector.take 3 b
fromList [0,1,8] :: Data.Vector.Vector
> Data.Vector.drop 3 b
fromList [27,64,125,216,343,512,729] :: Data.Vector.Vector
Unsafe Slices
For performance reasons you may wish to avoid bounds checks, when you can prove that the substring or index will be in bounds. For these cases there are unsafe operations, that let you skip the bounds check:
> let a = fromList [1..10]
> unsafeSlice 2 4 a
fromList [3,4,5,6]
> unsafeInit a
fromList [1,2,3,4,5,6,7,8,9]
> unsafeTail a
fromList [2,3,4,5,6,7,8,9,10]
and also unsafeTake, unsafeDrop.
Sum of Squares
Take the sum of the squares of the elements of a vector:
sumsq :: U.Vector Int -> Int
sumsq v = U.sum (U.map (\x -> x * x) v)


text:
Hiroki Kuroda (6-12, 3.19) vs. Aaron Cook (1-5, 5.84).
It has been an arduous path the Dodgers and their players have traveled these past four months. It has been at times ugly, unnerving, nasty, not nice, ugly, and unsettling. Losing seasons always are, and this season, which is a losing one as well, has been no exception.
That the Dodgers are considering trading Hiroki Kuroda, that the Dodgers and their players are traveling an arduous path, that the Dodgers are having a losing season, is just plain silly. Sorry to use such harsh language, hand over fist.
This season is about losing, plain and simple. It is not about playing for the love of the game. It is about losing, and how much the Dodgers are losing hand over fist.
Of course, the answer to the question I never asked is the Dodgers could benefit from trading Kuroda. The Kuroda will continue to pitch well, no matter which team he plays for. The players will only continue. The definite article will continue to be overused.
The Dodgers have lost 56 games today. Who knows how many they will lose tomorrow, but it will not be less. That would be impossible, as it is impossible to unlose a game. And ultimately, now, you see, the Dodgers could sweep, now, ultimately, the Rockies.
From Dodger Stadium, this is Ashley Fox reporting.


text:
This is WEEKEND EDITION from NPR News. I'm Scott Simon. The U.S. Labor Department says there are nearly four million people in America who've been unemployed for six months or more. That number has remained stubbornly high, even as the overall unemployment rate has fallen. Yesterday, President Obama met with U.S. business leaders and urged them not to overlook qualified job applicants just because they've been out of work for a while.
NPR's Scott Horsley reports it is the latest move by the president to try to act when Congress does not.
SCOTT HORSLEY, BYLINE: It's a sad fact of the modern job market, or as President Obama puts it, a cruel Catch 22.
PRESIDENT BARACK OBAMA: Folks who have been unemployed the longest often have the toughest time getting back to work.
HORSLEY: At the White House yesterday, the President pointed to research showing job applicants who have been out of work for eight months are only about half as likely to land an interview as those with similar skills who've been unemployed just a few weeks. Erick Varela learned that the hard way. When he left the army six years ago, he found himself out of work for a full year.
ERICK VARELA: You hand over your resume and the first thing they look at is the dates that you've worked. And one of the first questions that I'd always get is where's this missing year? And it just seemed like right off the bat you were, you know, strike one before you even got into the interview.
HORSLEY: Unable to find work as a heavy equipment operator, which he's trained for, Varela applied at fast food restaurants and retail stores, but no one wanted to hire him.
VARELA: You start feeling like you're not doing your job. Like, you know, you're letting your family down, and it's just a horrible feeling.
HORSLEY: Finally, Varela enrolled in a training program sponsored by a utility company and eventually he was hired as an apprentice electrician. But Obama says employers are overlooking two many good workers. He urged business leaders to reexamine the way they advertise job openings and screen applicants to make sure people trying to get a foot in the door don't have it slammed in their face.
OBAMA: And we really don't have an alternative because giving up on the unemployed will create a drag on our economy that we cannot tolerate.
HORSLEY: The president met yesterday with CEOs from a wide range of companies, including McDonalds, Marriott, eBay, and Boeing, who've promised not to discriminate against the long-term unemployed. Jim Moffatt, the CEO of Deloitte Consulting, says his company is eager to find more hard-working talent.
JIM MOFFATT: These kind of programs are critically important, not only for the country but for the economy. Access to people with skills and talents that are committed to work are exactly what we need.
HORSLEY: The president also directed federal agencies to look at their own hiring practices to make sure they're treating all applicants fairly. Yesterday's meeting capped a weeklong series of events in which Obama relied more on personal persuasion than the force of law to pursue his agenda. The moves were mostly modest in scope, but speaking to CNN from a Wisconsin factory this week, Obama insisted he won't be hamstrung by congressional inaction.
OBAMA: In no way are my expectations diminished or my ambitions diminished, but what is obviously true is we've got divided government right now, the House Republicans in particular have had difficulty rallying around any agenda, much less mine.
HORSLEY: Even so, the President says he'll keep pressing Congress to act on some measures, including a renewal of the emergency unemployment benefits that ran out late last year. With each passing week, another 72,000 people lose their jobless benefits, adding one more challenge for the long-term unemployed.
OBAMA: It's a lot harder to look for work if you can't put gas in the gas tank.
HORSLEY: Obama calls the unemployment benefits an economic lifeline, but it's one kind of help he can't offer on his own. Scott Horsley, NPR News, the White House. Transcript provided by NPR, Copyright NPR.


text:
Ted Lilly (7-13, 4.58) vs. Esmil Rogers (6-2, 6.00).
Fresh off a sweep of the Cardinals, the Dodgers look to Lilly to see if they can start this series on the right foot and get our fourth win in a row. In fact, if we sweep the Rockies, we could vault into third place in the NL West, possibly even dropping into single digits in the GB for the first time since August 6.
Of course, for this to happen, Lilly is going to have to pitch better than he did on August 20, when he faced Rogers and didn't even last through the fifth inning (in a game we ultimately lost). But I've got a lucky feeling about tonight for Ted. Let's see if I'm right.