text:
Jodie Foster Videos
Harrison Ford, Carrie Fisher Talk 'Star Wars' Then and Now
After starring in the original movies together, Ford and Fisher are back as Han Solo and Leia in "Star Wars: The Force Awakens."
Kelly Clarkson Is Pregnant Again
market with the setting person's really scary scene involving one of the film's two cycle paths and of course. Jodie foster 's character. Why he'd wanted to kind of thinks Natalie open but this Western Pennsylvania Victorian is listen for
'The Silence Of The Lambs' House For Sale, Margot Robbie Tattoos 'Suicide Squad' Co-Stars And More in Pop News
Academy Award winning movie can now own the four bedroom one bathroom home where FBI trainee Clarice Starling. Played by Jodie Foster tracked down the deranged killer in real life the Victorian houses set on a one point 76 acre lot in Pennsylvania
Instant Index: MIT Shows Acceptance Letters Delivered by Drone
back to school as a lecturer on her specialty and George Clooney, her husband will be shooting a new movie directed by Jodie foster . And to another school headline tonight, this from a 7year-old Louisiana boy, he was less with pleased with first
Michael Douglas Reveals His First Kiss
sterling and the senator's daughter and it movie quote experiment doing okay first off screen tests. That would be Jodie Foster in Westport Connecticut to. He sure this Cashmere sweaters tied teacher have but we must go back to remember that
Jodie Foster Marries Alexandra Hedison
There are plenty of I do this for actress Jodie Foster and her new white photographer Alexandra Academy Award winning actress notoriously private about her personal life so details are
'12 Years a Slave' Star is Most Beautiful
there's very little actually has to do with Marilyn Monroe. And that's Are there are plenty I do this for actress Jodie Foster and her new wife photographer Alexandra headed that Academy Award winning actress notoriously private about her personal
'Elysium' Stars One-on-One
summer while her hair care products from the Obama camp the director of the I hit district nine. Starring Matt Damon and Jodie Foster The premise in the years when he won 542. Classes of people exist. Future. In in the museum basically there's this
Jamie Lee Curtis Recovering After Car Accident
in the passenger seat in the SUV involved in this crash and who rushed to help to the scene. Long pal Oscar winner Jodie Foster who got a call from right after the accident. One of the person was also hospitalized.
Jodie Foster's Golden Globes Speech: Surprisingly Personal
a look at the huge reaction to jodie foster 's emotional speech sunday night ..... I'm going to put it out there. Jodie foster , unguarded and fiercely candid ..... Jesse tyler ferguson, tweeting, jodie foster , you are perfection. I love you
Golden Globes 2013 Recap: Top Winners and Unforgettable Guests
participation and that you can do you you get out. Tommy Jones may locked inside but most emotional honesty and an open Jodie Foster I am not. Single. Yeah. Have really been following the controversy over zero dark thirty but when it comes to torture
if you watching gave the best beach. Some of the Golden Globes we have some choices for it was a testing. It was a Jodie Foster speech nobody's ever gonna forget was and Ben Dunham or Jennifer Lawrence we want you cast your votes right now it's
Golden Globes 2013: Red Carpet's Hits, Misses
Margulies signs really of The big colors black and white and In a whole lot at the in half and they Salma Hayek and Jodie Foster all sparkle. Payton headed hearing Connie Britton co stars on ABC's hit in Nashville. Look like they each get We
Golden Globes 2013: 'Argo,' 'Les Miserables' Win Big
Reporter: The biggest bomb shell of the night from jodie foster . Accepting a lifetime achievement award. I am single ..... Thank you, sid. Tonight, we're going home with jodie foster . Reporter: Such an amazing night. There's something
Golden Globe Awards: Top Moments, Winners
well too. And the other moment every month are we talking about this today at the moment happened Twitter exploded Jodie foster 's of these she won the legal war last night but it was a rambling speech and she officially been rumored that a long
Golden Globe Awards: Best Dressed and More
and and how would let me. Posted on the it was really good so. Then at the moment everybody's buzzing about was Jodie foster 's speech last night two of the Cecil B. DeMille award. For her law like forty plus year career she's an amazing
Golden Globe Awards 2013: Fey, Poehler 'Going Home With Jodie Foster'
Hosts of the Golden Globe Awards end the night with a final joke.
Jodie Foster's Speech at 2013 Golden Globe Awards
Jodie foster 's sentence heat from CCB Demille award touched many in the audience and home out. I guess I just have a sudden urge to say something
R.E.M. and Roseanne Ruled Pop Culture 21 Years Ago
afraid to sleep for about two years after this movie best actor talking data Anthony Hopkins went for best actor in and Jodie Foster back to act. Dress she. what the other iPhone live up to the original the original so. Good at Hopkins had everyone's
Good Afternoon America (08.17.12)
did that Jody it rises like I know I don't think so Jodie foster 's feeling here is that if I had do exist in the culture ..... protective moment and remember made a film together years ago Jodie Foster played her mom she still that protective role that's
'GAA' Rumor Has It: 'Sparkle' Premiere; 'Twilight' Photos
to be in toronto filming on the road. And jodie foster , a former co-star of hers, surprising that jodie foster rises up like that? No. I feel jodie foster 's feeling, if I had to exist in the culture
Jodie Foster Defends Kristen Stewart
Jodie foster has come out swinging in defense of kristen ..... a big show of support yesterday from jodie foster , who co-starred with a then-11-year-old ..... unknowingly destroy in the process. Jodie foster went through a lot all through her years
Brand Name Butts: Volleyball Players Sell Rear-End Retail Ad Space
It is time for the public opinion that do you remember the movie contact Jodie Foster playing a character looking for an alien life wow. Turns out that for this Academy Award winning actress. To search for extraterrestrial
Jodie Foster , Behind the Camera
How the director's early childhood acting career shaped her filmmaking vision.
Jodie Foster Faces a Man With a Puppet
called the beaver. Directed by Jodie Foster in which she co stars with Mel ..... but first let's take a look at Jodie Foster and Mel Gibson in the the person ..... I need some answers right now. Jodie Foster welcomed to The You to have you
Jodie Foster's New Film 'The Beaver'
She's got a new movie that stars and profit. said it's called the beaver. Jodie Foster directed that she stars in it not only with the hand are longtime friend. Mel Gibson take a look. If you and it. Asks. Me to
Jodie Foster : Mel Gibson Is 'Kind and Complex'
Turns out the movie directed by Gibson's close friend Jodie Foster is his best work in many years a reminder of the star's ..... turns to puppet heap on us in a dumpster. Closer. Jodie Foster stars as his long suffering wife and she also directed
Jodie Foster : 'Lifelong Struggles' for Mel Gibson
I can't excuse his behavior of course and if He does something wrong champ. Man if He breaks the law in east and check. if he's filled with rage. He should come to terms of age and that's his personal process in life and of course somebody who actually knows him as opposed to something doesn't know
'Rawhide Down' Author on 'Top Line'
about 25 feet away. When he's just a limousine John Hinckley junior a deranged gunman was 25 years old had sex with Jodie Foster movie actress. An infamous fixation. Pulls out revolt from the spot opens fire damage just six shots in one point
Trailer: 'The Beaver'
Jodie Foster and Mel Gibson star in Foster directed dramedy.
What Have We Learned From Tucson?
she became the focus of his madness Hinckley went after Reagan. You know but He thought it was a lot of promise. Two Jodie Foster the man is insane isn't He's going to be a political activists but I think the point is will what I think I heard
Jeff Bridges on 'True Grit,' 'Tron' and the Coens
there. But it's gonna get weird there's gonna get like it will take a little bit. You know bridges and put that Jodie Foster went back. You know and the little Shirley Temple and hosted that and shake them up and let's get Peter. Two to
Sneak Peek at Mel Gibson's Comeback Film
our producer said the actually looks pretty good it's mountains for a spring 2011 release. And actually co stars Jodie Foster and basically the general plot a data uses puppet sort of come back to life easily depressed and he finds himself through
'The View' on Mel Gibson's Comeback
gonna block any funds coming and Jodie Foster by the way here's a movie in the can called the beaver with Jordan Jodie Foster no comment and And and that's another thing Jodie Foster has made the following statement
Space: Virgin's Latest Frontier
In won't you we'll be able to see the Earth's curvature shipped to. And it really hold a candle that whatever Jodie Foster contact me are life. Also the idea be to go up and down pretty frequently so you won't run into any problems they


text:
Vistar N. California
Vistar Northern California
7587 Las Positas RdLivermore, CA. 94551
Toll Free:(800) 289-8331 Local:(925) 455-2057Fax:(888) 867-9889
Customer Service
7:00 am – 3:30 pm
6:00am – 2:00 pm
Jason Stranahan President(925) 456-5250
Jerry KingSales Manager(925) 456-5257
Renee Traver Finance Manager (925) 456- 5261
Noyu Teas are 100% Natural!
It is slow brewed from super- premium, Taiwan grown whole tea leaves, never powder or extracts, and are lightly sweetened with pure cane sugar, enriched with Vitam A, C, and E, plus theraputic herbs to enhance functionality. You can find us on Facebook, Twitter, Intagram, and Pinterest.
NOYU Teas... Take the Journey East
35-10-35 has become the commonly accepted standard to categorize healthy products. 35-10-35 means that a product contains:
For a list of 35-10-35 healthy items Vistar Northern California currently carriers, click here!
Vistar Northern California is proud to be GREEN Certified!
Click Here to get more information on Bay Area Green Business
CAVC California Automatic Vending CouncilNAMA National Automatic Merchandising Association
©Copyright 2015 | Vistar is a division of Performance Food Group | Contact Us | Terms of Use | Careers | Employee Self Service

subset: commoncrawl


text:
Northfields HostelLondon, England
Overall, my stay was decent at this hostel. The rooms were clean and the location was excellent. However, internet did not work my entire stay. Other hostel guests mentioned the same thing. Be aware of where your room is located because I stayed on the first floor with a window directly next to the railway. The noise from the passing trains made it difficult to rest at night. Make sure to bring locks for your luggages because they do not have lockers in the rooms.
Kismet Dao HostelBrasov, Romania
This hostel was a great bargain! Not only was it in a great location, the staff was extremely helpful in booking my transportation to another city. They were also kind and approachable with any questions I had. I highly recommend this place to anyone passing through Brasov!
B&B Fronte del MareSalerno, Italy
My room had the most amazing view of the ocean! The hostel is about 25 minutes from the main Salerno station via bus. The bus does come every 20-30 minutes and is very packed (this was difficult because I had a lot of bags). There is a great pizza shop nearby. The only issue I had was with internet connectivity. It did not work so well (had to keep resetting the internet box, but that still didn't always work). The hostess was very nice and kept the B&B extremely clean!!
Fausto & Deby B&BVenice, Italy
Fausto and Deby were so kind and helpful! Deby even made us coffee in the evening because everything was closed nearby. There is a very inexpensive supermarket walking distance away. Perfect spot if you have a car because the bus stop (to Venice) is located on a busy highway which is very dangerous at night (no sidewalk). They were kind enough to drive us to the station at 5:30am on our departure day rather than have us take the bus. I would definitely recommend this hostel!
Hostel Santa MonacaFlorence, Italy
The location was the highlight of staying here. We had to change rooms due to inappropriate behavior next to our bed. The kitchen was difficult to use given one stove and lots of people (very large hostel). The 10 person room we moved to only had one small window so air circulation was poor and the one fan was not enough to reach everyone.
- Novice Nomad
- Female, 25-30
- (6 reviews)
Thousand SunnyRome, Italy
Both hosts were extremely kind and helpful (sweet dog too)! One host even helped us make a nice pasta dinner (Italian style). We felt safe the entire time at the hostel. There was a supermarket nearby. We recommend that you do not walk around the area, late at night, alone. The main part of Rome was a 15 min train stop away. Overall, it was a very nice experience.
- Novice Nomad
- Female, 25-30
- (6 reviews)


text:
Hi, Your HTML validator should provide a direct input option (text area), as your CSS validator does. It's the only way to validate dynamically-generated pages BEFORE they are published. Best wishes, Philip Chalmers --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.797 / Virus Database: 541 - Release Date: 15/11/04Received on Tuesday, 23 November 2004 04:04:05 UTC
This archive was generated by hypermail 2.3.1 : Friday, 27 November 2015 11:01:23 UTC


text:
NU Online News Service, March 30, 3:10 p.m. EDT
NEW YORK—Microinsurance is not an act of charity but a business model that can pay insurers real dividends while helping the impoverished climb back from natural catastrophes, says the chairman of America for Swiss Re.
The theme of the evening was that a sustainable business plan directed by experienced risk managers, not charitable donations aimed independently of one another, can truly help people pull themselves out of poverty in the wake of disaster.
Anne Hastings, CEO of financial arm Sèvis Finansye Fonkoze, notes that Haiti had been hit by an unusually vicious decade of natural catastrophes beginning in 2004 with flooding in Southeast Haiti and four-hurricanes swiping the nation in 2008.


text:
THE MINSTREL BOY TO THE WAR HAS GONE Traditional
Important: The song above is NOT stored on the Chordie server. The original song is hosted at getsome.org. Chordie works as a search engine and provides on-the-fly formatting. Chordie does not index songs against artists/composers will. To remove this song please click here.
You need to log in to post comments
GenieSinger (report)
Thanks for posting the chords.
The lyrics to "The Minstrel Boy" are not "traditional." They were written by the Irish poet Thomas Moore (1779-1852). The tune, "The Moreen," is a very old Irish air, of unknown authorship.
One correction to the posted lyrics:
In the last verse, it's "Thy songs" (i.e., the harp's songs) that "were made for the pure and free" and "shall never sound in slavery," not "My songs."
Mattman4698 (report)
I think there is a chord missing in the progression. I need to actually take out my guitar and try it out. But for instance for the first line I feel like there should be another chord in around the "to the war has gone" part.
I've never acutally played the sone so I could be wrong. But it seems like there should be a chord change on each word "war has gone."
But I could be wrong.


text:
Reviewed By Randall A (Fort Hood, TX) Reviewed for a 1997 Dodge Ram —1/29/2016 8:38 PM
Better than any where else localy priced
Reviewed By Gery L (BELLEVUE, WA) Reviewed for a 2004 GMC Yukon XL —12/29/2015 9:02 PM
Received the Catalytic converter within a few days from across the country. It was a 1/3 the cost of the manufacturers replacement. My mechanic had no issues installing it and we passed the emission test with no problem.
Reviewed By Paul D (Rialto, CA) Reviewed for a 1992 GMC C/K 2500 —8/24/2015 8:34 PM
This unit solved my issue in passing the California Smog Test... A 1992 5.7L is as clean as any new car today! (HC= 14/7, CO=0.03/0.02; NO=299/34) WOW! I should have replaced my old Catalytic Converter & O2 Sensor units first and stop worrying about the test results.


text:
Welcome to WebmasterWorld Guest from 126.96.36.199
Forum Moderators: Robert Charlton & aakk9999 & brotherhood of lan & goodroi
Most 'genuine' webmasters have little to fear from Google, because they don't used machine-generated crud,really - we, and others, have had to lay off people, many personal friends.
joined:Dec 22, 2011
posts: 2
votes: 0
joined:Dec 22, 2011
posts: 2
votes: 0
You don't know what you are talking about .. Wall Street .. New York.. Haven't you heard of Berlin, Madrid, Paris, Amsterdam, London, Hong Kong, Tokyo, Rio, Mumbai."
I agree with you. I know webmasters in both the UK and the US that were hit by the Panda, and virtually wiped out by it.
The sites in question were older, well maintained, and unique.
They also contained valuable information. They were not automated sites with PLR content or scraped content.
One of the sites was about printing presses and the history of printing around the world. It also had or has photos, and descriptions, already on site and within the articles.
So what on Earth makes you think this was Panda? The timing? Or do you have some evidence
Google is not going to tell anyone what determines how they drop a site over another one.
There are no real answers for why one is hit by Panda unless one is honest in their appraisal of their own site. That's like asking parents to rank their kids as regards suitability in human social terms. However, we can always diversify and expand, just like we can educate our kids the best way we can. That's where the time, energy and funds should be expended, particularly if this is business site.
joined:Feb 25, 2011
votes: 0
That would be our site... for sure. However, I fail to see the correlation with a site that offers resources for unbranded searches and quality... in other words why do you have to advertise "brands" to be of quality material?
Get up a facebook page a twitter page a free iphone app etc.
Also appreciate that even though Eric Schmidt said "brands" are the way out of the internet cesspool, the algo team does not use the term "brand", according to a recent video from Matt Cutts.
Um, what about having the cheapest prices than any of your competitors because you didn't spend so much overhead creating a kicka$$ site.


text:
Snaike by HumanDescentWatch
©2007-2016 HumanDescent
Great .
Lol, cool
hahaah LOL, i don't know why but this is freaking FUNY HAHA
cool breed.. haha
well great concept !
well great concept !
That cool
I bet, instead of poison, it injects slime!
xD I love the tongue! great job!
haha i had to give this a look over to understand what was going on XD
Original this Photo Manipulation!!! Congratulation!
oh, I remember this.
Very nicely done!
Snaiks on a plane!!!
Hahahaha X'D I want one :3
wow o_o genious
awwww wow thats amazing!
hum must be less dangerous than a real snake. i think i have time to run even if he decided to bite me.
haha this looks kinda cute ... very wrong, but so cute... like a baby snake
I love this one!
fav and award
i want one.
i love it.
i want one.
i love it.
i could of sworn i saw one of these in my garden
great one!
great one!
Amazing! I'd own one if If I could.
I want one
It's so cute I wish I had 1 as a pet! I am faving this
as a graphic designer I tell you, PhotoShop has little to hide from you...
Great works
Great works
AHAHAHHAHAHA!!! I don't know why, but this one made me laugh so hard my sides hurt.... great work!
AMAZING. That's one critter you do NOT wanna mess with!
Can't help but wonder HOW would french people cook these guys...?
Anyway, awesome! A fav!
Can't help but wonder HOW would french people cook these guys...?
Anyway, awesome! A fav!
It would look very vicious if not so slow XD
A very vulnerable kind of snake.
now THAT is cute X3
Awesome stuff.
AHHH. So expertly done and SO CUTE. oh god <3
This is so cool! ^^
At least you would be able to outrun it
Great stuff
Great stuff
Great job!
I want one!
Great work!
(PS: I've saving up some money to buy your tutorial!)
(PS: I've saving up some money to buy your tutorial!)
Oh my, this is absolutely fantastic!
That's a scary looking snail! Awesome manip!
Definitely a fav! This is one of the greatest I've seen from your gallery so far!
Great transition, and a fantastic combination!
Great transition, and a fantastic combination!
That's cool...and would be really creepy if I saw it in real life!


text:
09:31 am
Neil Innes
Vivian Stanshall
Bonzo Dog Band
I think it was Liza Minnelli's bright-eyed character Eliza in Albert Finney's film Charlie Bubbles who noted that all the pleasure in life when collected together would probably only fill a thimble when compared to all the dull, beige and unhappy moments that weigh-in by the bucketload. Strangely, perhaps, I've always found this a reassuring thought as it makes life an adventure to be won. It's always gladdening, therefore, to find one of those precious little delectations that put a skip in the day. Such a delight, well for me at least and hopefully for you too, is the Bonzo Dog Band's short film The Adventures of the Son of Exploding Sausage from 1969 or thereabouts. This little vintage piece of Bonzology turns up now and again like some long lost friend, but usually disappears with the speed of a unauthorized clip of Prince getting his groove on.
I have loved the Bonzos since being smitten by their presence on Python-forerunner series Do Not Adjust Your Set when a very young thing, and was genuinely more disappointed by the news of their disbandment than by the break-up of The Beatles, or the retirement of Ziggy Stardust or the demise of The Young Ones after only two series. Why this should be has everything to do with the sheer pleasure to be found in their music—their love of novelty tunes, their ability to pastiche pop and an unruly genius for original and unforgettable songs. It is as if The Goons, Monty Python and The Beatles had formed a band.
The Adventures of the Son of Exploding Sausage is like the Holy Grail of Bonzo clips. It's their take or version or whatever you want to call it of the Fab Four's Magical Mystery Tour (which, of course, the Bonzos are in themselves, singing "Death Cab for Cutie" in the strip club scene), where similarly not very much happens, other than a trip out to the country, a visit to a farm, a meeting with some children, a game of football and a performance of the songs—"Rockaliser Baby," "We are Normal" and "Quiet Walks and Summer Talks." It's a bit like the 1960s as a film—indulgent, fun, bubbly and rather messy.
This won't be to everybody's taste, but then again, why should it be? If you know it, you'll enjoy it. If you don't, why not give it a try?
Bonzos bonus clip at the Plumpton Jazz & Blues Festival, 1969, after the jump…


text:
My LO is allergic to milk and eggs, which eliminates a lot of foods for her to eat. As she is getting older and eating more and more, I am having trouble coming up with new things for her to eat. Does anyone out there have this same problem? What do you feed to you toddler?
Food Allergy to Milk and Eggs
Him & I (03/11/08) & K (12/13/2008)
bump...I have the same issue and am always looking for ideas. I do check on the food allergy boards. They are helpful, but I feel pretty lost when I go shopping.
My dd eats mainly, beef, pasta with dairy free margarine or olive oil, potato bread w/ a dairy free spread,cheerios, rice krispies,pancakes with egg replacer, soy cheese, veggies and fruits. She is still on nutramigen, but she does drinks rice milk too. She still eats baby food occasionally when I take her to daycare and I don't know what to pack for her.
Mommy to Alaina Rose 12/17/08 eczema, asthma, allergic to dairy and eggs
and Eric Harold 3/3/11 eczema and allergic to dairy, eggs, and tree nuts
My OD had a milk allergy and has a severe airborne egg allergy-epi pen on us at all times. It was very difficult in the beginning, but now it's no big deal. We had to transition to goat's milk for her because she has a sensitivity to soy and rice, make sure you know the different names for milk ie. whey, some company's disguise their ingredients by using different names.
As for the egg- you can use egg replacer in almost anything, although it does not work well in brownies;)
We eat lots of chicken, pasta, ham, jelly sandwhich's. Snacks are difficult but I have found some that she likes and we stick with that- Keebler has a few that do not have egg or milk, gold fish...
The health food store sells great snacks and food alternantives that are allergen free, Stop and Shop also sells a pancake mix that you can just add water or rice/soy to too, it's not too bad once you figure out the consistancy.
Did you know that allergies, eczema and asthma are related????? Be sure to know the signs.
Good Luck~ it stinks at first but once you figure out the labels it's not so bad. Lil now asks everyone, "does that have egg in it? I am allergic" that's her standard line, even when we are out or at a party.
My DD has milk and egg allergies as well. I am lost with snacks most of the time too... and she does not like soy rice or any other alternative milk. So we are completely lost when it comes to drinks. Right now she drinks juice and water and nurses some.
The phrase "working mother" is redundant!
Sorry posted before completed my comment,,, Don't think I can be much help but we do pancakes with soymilk and cheerios and cookie crisp cereal for snacks. She eats Gerber snacks as well.
The phrase "working mother" is redundant!
My LO has gluten, egg, soy and dairy allegies so we are more restricted but here is what we do for snacks/finger food.
For breakfast we have rice cereal and fruit during the week. I work so on weekends when I have more time I will cook roast beef hash (from Trader Joes) or turkey sausage (soy free from the HFS) and gluten free pancakes made with rice milk and egg replacer.
For lunches-I buy "all natural" lunch meat or turkey or chicken hotdogs from applegate farms (filler free and no nitrates/nitrites added). She has avocado everyday for a fat source and fruit (cut up pears, peaches, grapes, kiwi, mangoes, bananas). She also likes beef and corn tamales and mustard on everything!
For dinner-we give her what we are eating. I was nursing on an elimination diet but stopped now so we supplement with nutramigen AA 3-4 times/day. Anyway, she eats what I could eat before. So gluten free spiral pasta with tomato sauce (read labels to find dairy/soy free) w/ veggies added. Cut up hamburger, chicken breast marinated in olive oil or honey mustard, steak. Usually I cook a sweet potato or regular potato and put earth balance soy/dairy free butter substitute on it. Also have fruit and some type of veggie w/ dinner.
Enjoy life (from HFS) makes great top 8 free cookies. We like he snickerdoodles the best but also chocloate chip and "no oats" oatmeal cookies. I put rice chex and gluten-free cheerios in a snack cup for her. Dried fruit is a good snack too.
Oh yeah, and turtle mountain makes coconut milk yogurt that she LOVES. I buy the plain and add peaches or mangoes so their isn't as much sugar. They also make cocounut milk icecream that Madeline really likes but I've only given her a couple bites. You can download coupons from their website. The stuff is expensive so I watch for sales. I'm going to ask her ped about giving her coconut milk instead of nutramigen AA because the elemental formula is so expensive.
~mommy to Madeline born 12-23-08 allergic to dairy/soy/wheat/eggs and is still in the 75th percentile for weight! ~
I don't have these allergies, but have friends who do. I suggest getting familiar with Thai food. There are tons of very delicious dishes made with rice noodles. You will have to watch out for eggs - but there are a ton of items on the menu that don't use them - or they are easy to order without eggs since they are scrambled into the dish, not an ingredient in one of the items.
Also, Pho is an easy one too. It's basically beef (or chicken) soup with rice noodles.
Cleo born 12.03.08 | Otis born 01.12.12
Happily married 10+ years
Birth Doula/Pregnancy Nerd
Best place to start is Vegan recipes. You can find so many good recipes and baked goods when you search under vegan since they dont use dairy or eggs. I even search under vegan and add meat for my main meals (I am eliminating dairy and eggs for LO)
I always joke I am a vegan who eats meat! :)
I would LOVE to only have your guys allergies.
My LO is allergic to almost EVERYTHING!
He can eat about 9 foods. thats it.
For breakfast he has apple sauce
For snacks he has corn chex or kixs
For dinner he has cubed sweet potates and brocolli.
He can only eat: Sweet potatoes, apples, broccoli, peaches, pears, strawberries, blueberries, banana, and corn.
no grains, no legumes, no meats, no dairy, no eggs, no soy, no nuts, no squash. and he wont touch the specialized formula he would need to be on.
Needless to say almost 100% bf..
Mama to Miles 12/20/08 MULTIPLE food alleriges and FPIES.
1st time Gestantional Surrogate to Baby J - Due 4/13/12
Did your child ever grow out of his allergies? If so, which ones? Sounds like we have a similar situation and i'm feeling so hopeless. Tempted to wean.
Also, did you test for all the other like squash, etc...
A friend of mine suggested soy cheese. I didn't see that suggested. Also Like PP said check out the health food stores and places like Wholefoods. They have a bunch of stuff. You can get the Cherry Brook farms cake, cookie and muffin mixes that are both egg and dairy free just use the substitutes they suggest on the box. Enjoy life products are free of the top 8. They have snacks cookies and all kinds of stuff. Also coconut ice cream. I know there is a brand of waffles out there but can't remember the name right now.
Ok I went and found an old e-mail from a friend about the same allergies. Here are some of her suggestions.
Tyson frozen chicken nuggets or patties
Perdue (only the frozen kind) whole grain chicken tenders or nuggets, the fresh ones have milk.
McCain smiles
Grilled cheese using Tofutti cheese, earth balance spread and the bread that we use is Arnold soft family whole wheat.
Tofutti cream cheese and jelly sandwiches, deli meat I use Boars head or Shoprite brand turkey breast. Thumanns bologna is also dairy free. Stay away from all Black Bear meats, they have dairy. Hot dogs, turkey burgers, rice, pasta. I make pizzas using knots pizza crust . I just put on sauce for and heat it and he loves it. Vans wheat free and Gluten free blueberry waffles have no dairy or egg in them.
Hope this helps!


text:
Сosplay on this picture: pp.vk.me/c311731/v311731942/37…
If anyone knows the author, let me know and tell my adoration *_*
I think I go piercing, and I love these grim photos XD
Photographer - Vayner Katya
Me as Levi
I came to warn you that an Instagram user by _akira_124 has your punk levi Cosplay and is claiming them to be his.
Love *^*
you looks more amazing than the picture you take this cosplay from it pp.vk.me/c311731/v311731942/37…
i love this style .... ^U^
This is such a lovely cosplay
what a beautiful face
Thanks photographer for that)
Perfect♥♥ I am in love
this reminds me so much of 1994;;;
it's an amazing fanfic uguguhguhughgugh Levi is so amazing
it's an amazing fanfic uguguhguhughgugh Levi is so amazing
you captured him perfectly<3 A+!
Awesome! *-*
And let me say that this style really suits you...
And let me say that this style really suits you...
I think so too)) when I already had piercings and dressed in a style in 19 years. Thank you)
Ahhhhhh amazing job!
I'm in love.
Wow, stunning and intense.
Ah, it's incredible!
Great job! You're one of my favourite cosplayers. ;w;
>///< Omg i love it!!!!!
This is amazing! Excellent job!
You are wonderful! Good luck from Peru :3
How creative!! Beautiful job!


text:
- 232Promote
Framed Art Print
Pop Camoby Joe Van Wetering
Choose from a variety of frame styles, colors and sizes to compliment your favorite Society6 gallery, or fine art print - made ready to hang. Fine-crafted from solid woods, premium shatterproof acrylic protects the face of the art print, while an acid free dust cover on the back provides a custom finish. All framed art prints include wall hanging hardware.
Boom! Nice work!
Very cool!!!
pretty darn cool joe
this is niiiice!
really cool
the phone case looks awesome!
amazing pillow :)
very nice !
very cool
Really cool!
love it!!!
friggin awesomely cool
very liquid
So simple yet so awesome. Great work!
This is super inspiring!
Great work :)
See More Comments


text:
Cartes-Ed-Visite Unknown Baby Logan, UT area
Cates-De-Visite of an Unknown Baby. Photo bought in an antique shop in Logan, UT. The photo probably dates around the 1860's to 1870's.
Mystery: This Unknown Baby appears to be around 1 year old. There isn't a name and it's hard to say if the baby is male or female because of the dressing styles back then. The baby could be from the Logan, UT area, but that's just a guess based on where the CDV was purchased.
- Album: All photos
Added by Penny Douglass


text:
Texas singer dies in hunting accident
Fish & Game News January 21, 2014
Texas singer and songwriter Steven Fromholz has died in a hunting accident when a rifle fell and discharged. The Schleicher County Sheriff's Office on Monday said the accident happened at the Flying B Ranch near Eldorado, about 40 miles south of San Angelo. Fromholz was 68. Chief Deputy George Ariste says Fromholz was shot Sunday... Read more


text:
Hempah by Kassie Rose
Welcome! You are browsing as a guestWould you like to see 11 projects made from this pattern and much more? join Ravelry now What am I missing?
© 2011 Kassie Rose
© mugster
© mugster
© mugster
This pattern is available for $5.00 USD buy it now


text:
5 Reviews
This recipe stood out from the rest and I am sure glad I tried it! We are having a wing buffet for our daughter's grad party and these have made the menu. I did play around with it just a bit after making it per directions. It was a tad salty and not sweet enough for us but I cut the soy in half and doubled the water. Second time around I also ditched the butter and used oil...there was a wierd film that kept forming over the top of the sauce as it cooled and it didn't appear when I used Canola oil instead. I added half again of regular sugar and final step I added 1T cornstarch (with 1/4 cup cold water) to simmering sauce...DE-LISH-US!!! I tested my final four on some family friends and insisted they be truthful but I needn't have worried. As fast as the wings flew out of the bowl and disappeared I knew I had my winners. BTW these teriyaki wings were the first to go!!! thanks for a truly satisfying wing experience!!!
Great wings. We whipped them up in no time.
I'm always on the prowl for a new party wings recipe. This one didn't disappoint me. Thanks for posting!
This was delicious!! I was looking for a good garlic wing recipe and found this! I will definitely be using it this weekend for a benefit bbq we are going to! Thanks hollyberry for sharing!! :o)


text:
Meatless Monday — Spaghetti with Chickpeas and Spinachaggieskitchen
This pasta dish has made an appearance in my kitchen quite often…usually on nights where I really don't want to fuss too much over what's for dinner. I guess you can call this pasta an old standby…you know, old reliable.
It's got everything you need to make a complete nutritious meal…whole wheat pasta, spinach & onions, and garbanzos for nice boost of protein. I saute the veggies in one pan and marry it with the cooked pasta once its done. Drizzle some olive oil and sprinkle parmesan and red pepper flakes and you've got yourself a nice meal. And if the kids aren't into all of that…keep theirs simple like I do and serve them a nice plate of spaghetti with garlic and olive oil.
I know you'll enjoy this easy weeknight (or weekend!) pasta dish…you can find the complete original recipe for Whole Wheat Spaghetti with Sauteed Chickpeas and Spinach on my blog, Aggie's Kitchen.


text:
Tue, 25 September 2007 at 1:13 pm
Billy Bob's Daughter Bella is Bella
Silly old bear!
Billy Bob Thornton takes daughter Bella, who just turned 3, to celebrate her birthday at Disneyland over the weekend. The father-daughter duo posed with a life-size version of Winnie-the-Pooh!
The 52-year-old actor's film Mr. Woodcock is in theaters now. It costars Seann William Scott, Amy Poehler and Susan Sarandon.
Like Just Jared on Facebook
Credit: CBB, ET Online; Photos: Paul Hiffmeyer/Disneyland/Getty Posted to: Bella Thornton, Billy Bob Thornton, Celebrity Babies


text:
Profile: Douglas Trevor
Title: Professor
Ph.D., Harvard 1999
BA, Princeton University, 1992
Ph.D., Harvard 1999
BA, Princeton University, 1992
Contact Info
3056 Tisch Hall
» Launch
Facebook ID:
Douglas Trevor
DOUGLAS TREVOR is the author of the novel Girls I Know (SixOneSeven Books, 2013), which won the 2013 Balcones Fiction Prize, and the short story collection The Thin Tear in the Fabric of Space (University of Iowa Press, 2005), which received the Iowa Short Fiction Award and was named a finalist for the Hemingway Foundation/PEN Award for First Fiction. His short stories have appeared in publications such as The Paris Review, The Michigan Quarterly Review, The Black Warrior Review, Epoch, The Iowa Review, Fugue, The Notre Dame Review, The Minnesota Review, Glimmer Train, The New England Review, Midwestern Gothic, and The Ontario Review. His work has also been anthologized in The O. Henry Prize Stories and The Best American Nonrequired Reading. He is currently completing another collection of stories, and has a novella from that collection forthcoming in 2016 in the Ploughshares Solos series. Trevor has also begun his second novel, a chapter from which appeared in New Letters last year. The novel is set in Denver and revolves around the central character's discovery of a string of secrets about his family, his city, and himself. Trevor received a BA from Princeton University and a PhD from Harvard. He also teaches courses at the graduate and undergraduate levels on early modern literature, particularly the works of Shakespeare, Donne, and Milton.
Departmental Areas of Study have been established to allow a visitor to quickly find members of our faculty who share a particular area of study. Click on any of the links below to find other faculty members who have noted their interest in the same areas or click on the link above to browse all faculty by area of study.
Research Interests
Primary Interests
16th and 17th century English literature, especially Spenser, Shakespeare, Donne, and Milton; creative writing.
Secondary Interests
Religious studies; theories of the passions; the rise of the novel.
Books: Girls I Know (a novel, SixOneSeven Books, 2013), The Poetics of Melancholy in Early Modern England (Cambridge University Press, 2004); The Thin Tear in the Fabric of Space (a collection of short stories, University of Iowa Press, 2005); Historicism, Psychoanalysis, and Early Modern Culture, ed. with Carla Mazzio (Routledge Press, 2000). Academic Articles (selected): "Mapping the Celestial in Shakespeare's Tempest and the Writings of John Donne," in Shakespeare and Donne: Generic Hybrids in the Cultural Imaginary, ed. Judith H. Anderson and Jennifer C. Vaught (Fordham University Press, 2013); "Self-Love, Spirituality, and the senses in Twelfth Night,'" in Shakespearean Sensations, ed. Katharine Craik and Tanya Pollard (Cambridge University Press, 2013); "Love, Anger, and Cruelty in 'De l'Affection des peres aux enfans' and King Lear," (Montaigne Studies, vol. 24, nos. 1-2, 2012); "Lacan, Hamlet, and the Problem of Mourning," (Shakespeare Yearbook, vol, 19, 2010); "Milton and Solomonic Education," in Milton and the Jews, ed. Douglas Brooks (Cambridge University Press, 2008); "Milton and Oneness," (Milton Studies, vol. 49, 2009); "Shakespeare's Love Objects," in A Companion to Shakespeare's Sonnets, ed. Michael Schoenfeldt (Blackwell Press, 2006); "Love, Humoralism, and 'Soft' Psychoanalysis," Shakespeare Studies, vol. 33 (2005); "Sadness in The Faerie Queene." In Reading The Early Modern Passions, ed. Gail Kern Paster, Katherine Rowe, and Mary Floyd-Wilson (University of Pennsylvania Press, 2004); "Thomas More's Responsio ad Lutherum and the Fictions of Humanist Polemic," The Sixteenth Century Journal, vol. 32, no. 3 (2001); "John Donne's Pseudo-Martyr and the Oath of Allegiance Controversy," Reformation, vol. 5 (2000); "John Donne and Scholarly Melancholy," Studies in English Literature, vol. 40, no. 1 (2000); "George Herbert and the Scene of Writing," in Historicism, Psychoanalysis, and Early Modern Culture (2000). Short Stories (selected): "Endymion," The Iowa Review, Volume 45, Issue 2 (2015); "Faucets," Midwestern Gothic, Issue 16 (2015); "The Program in Profound Thought," Notre Dame Review, Number 38 (2014); "The Novelist and the Short Story Writer," The Minnesota Review, Issue 82 (2014); "Sonnet 126," Michigan Quarterly Review, vol. 52, no. 3 (2013); "Slugger and the Fat Man," New Letters, vol. 79, nos. 3&4 (2013); "The Librarian," Michigan Quarterly Review, vol. 49, no. 3 (2010); "The Thin Tear in the Fabric of Space," The Black Warrior Review, vol. 32, no. 1 (2005); "The Surprising Weight of the Body's Organs," Epoch, vol. 54, no. 2 (2005); "Girls I Know," Epoch, vol. 53, no. 2 (2004); "The Fellowship of the Bereaved," Fugue, no. 26 (2003); "The River," Glimmer Train, issue 45 (2003); "Central Square," New England Review, vol. 23, no. 3 (2002); "Saint Francis in Flint," The Paris Review, no. 158 (2001).


text:
3122 Tate Road
Wheeless Road, Augusta-Richmond County, 30906
Commute to Downtown Augusta-Richmond County
Almost all errands require a car.
About your score
3122 Tate Road has a Walk Score of 15 out of 100. This location is a Car-Dependent neighborhood so almost all errands require a car.
This location is in the Wheeless Road neighborhood in Augusta-Richmond County.
Explore how far you can travel by car, bus, bike and foot from 3122 Tate Road.
View all Wheeless Road apartments on a map.
3122 Tate Road is in the Wheeless Road neighborhood. Wheeless Road is the 22nd most walkable neighborhood in Augusta-Richmond County with a neighborhood Walk Score of 25.


text:
Searched for: "voip what is it how will it help you"
Content Types
About 4 results for "voip what is it how will it help you"
10 questions to help businesses assess their email systems
Email is a critical communications tool, yet some organizations don't give it the attention it needs. These questions will help you uncover oversights and develop better processes.
Does UC present new opportunities for spammers?
Unified communications (UC) makes it easy to get your messages no matter where you are. But is there a dark side to all this convenience? Will UC also make it easier for spammers to find and target yo...
Sanity check: Will WiMAX be a 3G killer, or is it vice versa?
The broad deployment of IP-based WiMAX networks for mobile Internet access could open the door for wireless VoIP phones and usurp cellular carriers. However, the cellular giants are ramping up 3G for ...
Clear up network congestion
Network congestion is pretty much a fact of life—even if you're not experiencing it now, you likely will at some point. How do you fight network congestion? David Davis offers some tips for troublesho...


text:
Jim Caviezel: "Are we that naïve to say that Big Brother isn't really here?"
[Warning! This article contains spoilers for those who haven't seen the mid-season finale] Person of Interest returns tonight from a mid-season break over the holidays that left fans scrambling for more. Why? Audiences were left crushed at the end of November when Carter died in Reese's arms. And while HR may have been taken out, there are still greater threats to the machine... and the world at large.
Is that Greek to you? Now's the perfect time to jump in and start watching. Here's your P.O.I. primer:
Former CIA officer and green beret John Reese works with software genius Harold Finch to prevent crimes in New York City with the help of "The Machine," a surveillance system that can predict when and where crimes will take place. Think Minority Report, but for today's world, and without the floating pre-cogs.
We caught up with some of the talent behind Person of Interest earlier this year to chat about the show and technology in our everyday lives.
See also: Community returns -- and feels like Community again
"It's always good to gauge how well a show is doing by the fans," Taraji P. Henson (Joss Carter) says of the social media interactions she's had concerning the show. "You kind of know what the numbers are going to be, because you see the floodgate of love we get on social media."
After the death of her character on the show, Henson revealed that she always knew there would be an end to Carter's story, but kept things under wraps when we spoke with her this summer. "It just excites me me because I already know what's going on," she says. "I'm always a few episodes ahead, of course, of what you guys are seeing, so it just tickles me what they're saying. It's just great to see how involved they are with the characters on the show. It's amazing."
Several times, fans have been left wondering if it was Detective Fusco's time to go, but he's back, along with the show tonight.
"People -- specifically with Fusco -- are like, 'I can't believe Fusco's still alive,'" says Kevin Chapman (Lionel Fusco). "It would've been so obvious to kill that character off, but that's what makes Person of Interest so beautiful."
One of the biggest appeals of Person of Interest is the show's dedication to its complex characters. Following Carter's death, the show's creators strove to develop roles that audiences could find and identify with in their own reality.
"I think the whole thing with Fusco is that you see the redeemable qualities in him," Chapman explains. "Flawed individual? Absolutely. We're all able to redeem ourselves. And that's what I think the message is with this character. He has redeemable qualities. Does he get the level of respect he probably would like? No, he doesn't. They say he's like a little brother that nobody wanted. We see the good in him, but we know he's a knucklehead."
Jim Caviezel (John Reese) explains that the depth of character development went far beyond the writers' room, explaining the amount of time that goes into shooting each season of the show.
"We're nine months, day in and day out, shooting," Caviezel says. "A slow day for the first two years was 15 hours. And then we did 'Fraturdays,' so you'd go 19-20 hours into 6 a.m. and go to bed, wake up at 2, 'Here's a new script.' So with that schedule, being able to pull this off was real important. The lack of time being able to train your body as an athlete, which is what Reese does, was very limited. It's very easy to get your rib cracked -- which I did -- and take a shot from one of those stuntmen. It just happens."
Caviezel also revealed his background in martial arts and basketball have paid off since the actors on set sometimes have as little as 10 minutes to learn fight scenes before shooting.
(Left to right) Jim Caviezel, Taraji P. Henson, Greg Plageman, Amy Acker, Kevin Chapman, Sarah Shahi
Tatiana Craine
Greg Plageman, one of the show's executive producers, explains that the gadgets and tech-hacks on the show may seem ultra-high tech, but much of it is actually close to what's currently being used in the world. "All the technology we've used on the show is either stuff that's been developed or it's coming," he says.
Plageman also pointed out how uncanny the similarities between the show and current events have been. "The whole PRISM thing is bizarre," he says. "We started this show, and people were like, 'That's crazy.' Then everyone starts looking on the corners and seeing the cameras. The next thing you know, this thing comes out about PRISM, about the government checking everybody's email."
While the idea of government surveillance has quickly become the norm in pop culture and beyond, Plageman is surprised that more people aren't changing the way they act. "It's so strange; it kind of all just happened," Plageman says. "I'm not even sure people are phased by it at all. The fact that they're listening to all your phone calls and emails hasn't stopped anybody from doing anything."
"We still have to communicate," Henson says, "I mean, what are you going to do? Live in a hole? It's just what it is."
Caviezel also recalls hearing people make the connections between Person of Interest and reality. "My phone started ringing off the hook when the Snowden thing happened. 'Oh, this shit's real!' 'Oh my gosh, you guys were way ahead of it.'"
"Here's your video camera," Caviezel says, pointing to a phone. "And you don't see it, but someone's watching you getting changed in the morning and when you go to bed at night. There you are. You have no idea they're spying on you right there."
Caviezel goes on to site several examples of the dangers of surveillance and getting too reliant and comfortable with technology, including the Miss Teen USA "sextortion" plot, the "mooing" EZ Pass that was tracked throughout New York, and the suspicious death of journalist Michael Hastings.
"Are we that naïve to say that Big Brother isn't really here?" Caviezel asks. "I think we are naïve."
Despite that, Caviezel says people shouldn't live in fear of technology -- just exercise caution. "If our society continues to be one of reaction," he says, "we're going to have incidents like that happening. What I love about these stories and our show is that people are going, 'Wow, maybe I should put a little black tape on my camera and not wait for a nightmare to happen.' Instead of being paranoid, just put a piece of black tape over your computer."
Check out a preview of tonight's show:
Person of Interest returns with "Aletheia" tonight at 9 p.m. CST on CBS.
Get the Arts & Culture Newsletter
Find out about arts and culture events in Minneapolis & St. Paul and offers you won't hear about anywhere else.
Sponsor Content


text:
I am a Software Development Engineer in Test working for the Windows Sound team. You can contact me via email: mateer at microsoft dot com
Friend key: 28904932216450_59cd9d55374be03d8167d37c8ff4196b
As part of messing with Windows Performance Recorder profiles, I had a need to extract everything that looks like a GUID from a blob of text.
So I wrote this script. It digs through its STDIN and outputs all the GUID-looking things, uppercase-ized and sorted.
I was having some trouble authoring a Windows Performance Recorder profile by hand-editing the XML, and I wanted to check it against the schema.
This MSDN page says "you can get the WPRControlProfiles.xsd file in %ProgramFiles(x86)%\Windows Kits\8.1\Windows Performance Toolkit". That appears to no longer be true.
I dug around a little and eventually found it. It's a resource in %ProgramFiles(x86)%\Windows Kits\8.1\Windows Performance Toolkit\windowsperformancerecordercontrol.dll - the rest of the instructions seem to work fine.
You can extract it by opening the .dll in Visual Studio, expanding to the right node (highlighted above), then right-click and choose "Export".
I talked about Rijndael in a few previous posts: Expressing a function f: GF(2⁸) → GF(2⁸) as a polynomial using a Lagrange polynomial, Generating the Rijndael S-box, Efficient multiplication and division in GF(28), Sieving irreducible monic polynomials over a finite field, Addition and multiplication table for GF(22).
Today I wrote a couple of Perl scripts which use off-the-shelf CPAN modules to encrypt and decrypt text using a passphrase. For ease of transport, at the cost of some storage space, the encrypted payload is Base64 encoded.
The particular CPAN modules in question are Crypt::CBC and Crypt::Rijndael.
encrypt.pl and decrypt.pl source in my GitHub repository. They operate on STDIN and produce output on STDOUT.
Note that if you pass an incorrect passphrase to decrypt.pl you get garbage output, rather than an error.
I attach a secret message which is encoded with the passphrase "hunter2".
I have a bunch of internal Microsoft ClickOnce applications that I use all the time.
But every time I clean install my machine I need to go look up all the application entry points and reinstall them.
This got boring, so I wrote an executable that takes a URL on the command line, and then uses the System.Deployment.Application.InPlaceHostingManager API to pull the ClickOnce application to the machine.
64-bit binary attached.
Source: https://github.com/mvaneerde/blog/tree/master/inplacehostingmanager
Last Friday, Raymond Chen blogged about how to use a function that released one of its inputs with various smart pointer classes.
He made two suggestions, and I offered a third:
Raymond suggested that I should actually try my suggestion. So I did.
For each of the four smart pointer types, I tried four different ways to add a reference. Here are the results:
Here's the code I used.
I went through all my blog posts that had code attached to them and moved the code into Git.
Sometimes, like when trying to install a test driver you just built, it is very important to distinguish between "I trust this code" and "my machine trusts this code."
It can be difficult to tell the difference by just double-clicking on a .cat file or using signtool.exe verify - luckily, the Microsoft Management Console provides a way.
You will now be able to see both the "current user" and "local machine" certificate stores independently.
Related blog post: Taking audio glitch traces on Windows 10: desktop edition
Sometimes if audio is glitching we will reach out to people and ask them to take glitch traces so we can look at them and try to figure out what is going on.
One of the tools we use to take audio glitch traces on Windows 10 phone editions is Field Medic; this is an app in the Windows Store.
To take audio glitch traces on a Windows 10 phone:
At this point you have a .zip file containing a pair of .etl files. These can be analyzed using any tool that consumes .etl files, including:
Related post: Taking audio glitch traces on Windows 10: phone edition
One of the tools we use to take audio glitch traces on Windows 10 desktop editions, is Windows Performance Recorder; this is part of the Windows Performance Toolkit, which ships as part of the Windows Assessment and Deployment Kit (ADK) for Windows 10.
To take audio glitch traces on a Windows 10 desktop:
At this point you have an .etl file. This can be analyzed using any tool that consumes .etl files, including:
Windows Performance Toolkit also comes with a command-line tool: ;">wpr.exe. To capture the same traces using the command line tool:
Some time ago I blogged about the Windows Phone AudioRoutingManager API which allows you to put a "Speakerphone" and "Bluetooth" button in your Windows Phone app.
A common question that I get now is "I'm trying to play audio to the earpiece from my app, but AudioRoutingManager::SetAudioEndpoint(AudioRoutingEndpoint_Earpiece) is failing."
It's an interesting question, because Windows Phone will automatically route your audio to the earpiece if you have everything set up right - and if you don't have everything set up just right, you can't route it to the earpiece at all!
So how do you "set things up right?"
There are two things you have to do.
If you do both of these things, audio will flow to the earpiece automatically - no call to SetAudioEndpoint needed.
(At this point, if you want to get fancy, you can put a "Speakerphone" in your app and wire it up to a call to SetAudioEndpoint(AudioRoutingEndpoint_Speakerphone), but that's up to you.)
Let's look at the two things in a little more detail.
Tag the audio in question as "communications"
How to do this depends on what API you're using. It could be as simple as <audio src="..." msAudioCategory="communications" msAudioDeviceType="communications" />. Or you might have to call IAudioClient2::SetClientProperties with an AudioClientProperties structure whose AudioClientProperties.eCategory = AudioCategory_Communications.
Tag your app as "voice over IP" or "voicemail"
You'll need to set either the ID_CAP_VOIP or ID_CAP_VOICEMAIL Phone capability on your app. (The docs reference an ID_CAP_AUDIOROUTING capability, but that doesn't exist.)
If you're writing a Silverlight app, you can do that directly in the manifest.
If you're writing a Windows Phone 8.1 (non-Silverlight) or Universal app, you have to create a WindowsPhoneReservedAppInfo.xml file and add it to your application package. It should look like this.
<?xml version="1.0" encoding="utf-8"?><WindowsPhoneReservedAppInfo xmlns="http://schemas.microsoft.com/phone/2013/windowsphonereservedappinfo"> <SoftwareCapabilities> <SoftwareCapability Id="ID_CAP_VOIP" /> </SoftwareCapabilities></WindowsPhoneReservedAppInfo>
In my last blog post on this topic I showed how to get all kinds of information for the active audio sessions, including the Windows 8 Store package identifier for the process (if there was one.)
However, I recently had a need to pull information for inactive sessions too - and it needed to run downlevel as far as possible (in particular, to Windows 7.) This meant I couldn't use the Store APIs, since they were new for Windows 8. I actually wanted to go down to Windows Vista, but I needed the IAudioSessionControl2 interface, and that was new for windows 7.
Source and binaries attached.
Output on my system:
-- Devices of EDataFlow eRender (0) --Speakers (Realtek High Definition Audio)Peak: 0Peak, channel 1 of 2: 0Peak, channel 2 of 2: 0Not mutedVolume range: 0% to 100% (-46.5 dB to 0 dB in steps of 0.03125 dB)Master (%): 65.7804%Master (dB): -6 dBVolume, channel 1 of 2: 65.7804%Volume, channel 2 of 2: 65.7804%Volume, channel 1 of 2: -6 dBVolume, channel 2 of 2: -6 dB
Session #1 of 3 State: AudioSessionStateInactive (0) Icon path: Display name: Grouping parameter: {a68c25a9-fb30-4144-8002-d8c7615e81ed} Session identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|\Device\HarddiskVolume1\Program Files (x86)\Internet Explorer\iexplore.exe%b{00000000-0000-0000-0000-000000000000} Session instance identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|\Device\HarddiskVolume1\Program Files (x86)\Internet Explorer\iexplore.exe%b{00000000-0000-0000-0000-000000000000}|1%b10288 Process ID: 10288 (single-process) System sounds session: no Peak value: 0ERROR: IAudioMeterInformation::GetMeteringChannelCount() reports zero channels Master volume: 1 (0 dB FS) Not muted Volume, channel #1 of 2: 100% (0 dB FS) Volume, channel #2 of 2: 100% (0 dB FS)
Session #2 of 3 State: AudioSessionStateInactive (0) Icon path: Display name: Grouping parameter: {8bd029a1-b7da-48ed-bf89-0094a5961dd0} Session identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|\Device\HarddiskVolume1\Windows\System32\WWAHost.exe%b{00000000-0000-0000-0000-000000000000} Session instance identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|\Device\HarddiskVolume1\Windows\System32\WWAHost.exe%b{00000000-0000-0000-0000-000000000000}|1%b220 Process ID: 220 (single-process) System sounds session: no Peak value: 0 Peak, channel 1 of 2: 0 Peak, channel 2 of 2: 0 Master volume: 1 (0 dB FS) Not muted Volume, channel #1 of 2: 100% (0 dB FS) Volume, channel #2 of 2: 100% (0 dB FS)
Session #3 of 3 State: AudioSessionStateInactive (0) Icon path: @%SystemRoot%\System32\AudioSrv.Dll,-203 Display name: @%SystemRoot%\System32\AudioSrv.Dll,-202 Grouping parameter: {f12ec33c-5337-4bed-8bb5-2114e7d91d23} Session identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2} Session instance identifier: {0.0.0.00000000}.{2cbea9df-ca93-4e17-9708-e14139fd7044}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b# Process ID: 0 (multi-process) System sounds session: yes Peak value: 0ERROR: IAudioMeterInformation::GetMeteringChannelCount() reports zero channels Master volume: 1 (0 dB FS) Not muted Volume, channel #1 of 2: 100% (0 dB FS) Volume, channel #2 of 2: 100% (0 dB FS)-- Devices of EDataFlow eCapture (1) --No such devices.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/inactive-volume-sessions
I have various scripts which use the "dir" command to enumerate files and then act on the most recent file that meets certain criteria. I noticed that "dir" and the Windows shell sometimes have different orders.
For example, if I have a folder containing files { track1.mp3, track2.mp3, ..., track9.mp3, track10.mp3, track11.mp3 } then the Windows shell will enumerate them in the natural order, but "dir" will enumerate them in the rather strange order { track1.mp3, track10.mp3, track11.mp3, track2.mp3, ...}.
Windows provides the StrCmpLogicalW API which is smart enough to realize that track9.mp3 < track10.mp3, so I whipped up a quick shellsort.exe utility that takes its standard input, breaks it up into lines, sorts those lines according to StrCmpLogicalW, and prints the resulting lines on its standard output. For bonus points I gave it a -reverse command-line option to print the output in reverse order (although it would have been more in the "toolbox" spirit to create a separate reverse.exe.)
>dir /btrack1.mp3track10.mp3track11.mp3track2.mp3track3.mp3track4.mp3track5.mp3track6.mp3track7.mp3track8.mp3track9.mp3
>dir /b | shellsort -reversetrack11.mp3track10.mp3track9.mp3track8.mp3track7.mp3track6.mp3track5.mp3track4.mp3track3.mp3track2.mp3track1.mp3
As with my previous exercise to find the longest duplicated substring in a given text, most of the code is taken up in reading the contents of the standard input in an efficient way.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/shellsort
I've blogged before about using the IDeviceTopology API to poke around the internal structure exposed by audio drivers.
In particular, given an audio endpoint, you can map out all the knobs and widgets of all the signal paths that feed into that endpoint (for playback) or out of it (for recording.)
A version of this has been floating around the forums for some years, but I thought I would spiffy it up a little and make a blog post out of it.
for each endpoint exposed by IMMDeviceEnumerator: figure out whether it's a playback endpoint or a recording endpoint find the IPart which is the very end of the signal path for a playback endpoint, or the very beginning for a recording endpoint: if the IPart advertises jack information, query it if the IPart is a volume control, query the range and the current setting if the IPart is a mute control, query the current setting (we could continue here for various other kinds of controls, but I'm lazy) for all parts which feed in to the IPart for a playback endpoint, or are fed by the IPart for a recording endpoint: recursively process that IPart if the IPart is a connector: find the IPart on the other side of the connection process it recursively take care not to immediately hop back to this graph!
>devicetopology.exeeRender endpointName: Speakers (High Definition Audio Device)Endpoint ID: {0.0.0.00000000}.{351933db-e9b5-41df-8fa5-69c3d84531df} 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\elineouttopo 0x10001: Speakers Jacks: 1 -- Jack 1 -- ChannelMapping: 0x3 Color: 0x00ff00 (red = 0, green = 255, blue = 0) Connection Type: 1 (eConnType3Point5mm) Geometric Location: 1 (eGeoLocRear) General Location: 0 (eGenLocPrimaryBox) Port Connection: 0 (ePortConnJack) IsConnected: No 0x20001: Master Mute 0x20000: Speakers 0x10000: {0.0.1.00000000}.{6dd94b4a-90d7-4ddc-926d-69312eb53841} 0x10000:
eRender endpointName: Speakers (High Definition Audio Device)Endpoint ID: {0.0.0.00000000}.{6ce8bdf4-d22f-4ec7-a007-2228540b6705} 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\elineout2topo 0x10001: Speakers Jacks: 1 -- Jack 1 -- ChannelMapping: 0x3 Color: 0x000000 (red = 0, green = 0, blue = 0) Connection Type: 3 (eConnTypeAtapiInternal) Geometric Location: 13 (eGeoLocATAPI) General Location: 0 (eGenLocPrimaryBox) Port Connection: 1 (ePortConnIntegratedDevice) IsConnected: Yes 0x20001: Master Mute Mute node: MUTED 0x20000: Speakers Channel 0 volume, -46.5 dB to 0 dB in steps of 1.5 dB: -6 dB 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\elineout2wave 0x10001: 0x20000: HD Audio line out 0x10000: PC Speaker
eRender endpointName: Speakerphone (USB Audio Device)Endpoint ID: {0.0.0.00000000}.{916afdff-2ba3-4a7f-bca9-0bf75c47c946} 0x10000: {2}.\\?\usb#vid_095d&pid_0005&mi_00#7&335bfb1&0&0000#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\global 0x10003: Speakerphone 0x20009: DAC 0x20008: Volume Channel 0 volume, -30.0039 dB to 0 dB in steps of 0.5 dB: -17.747 dB 0x20007: Mute Mute node: NOT MUTED 0x20006: Sample Rate Converter 0x10000:
eCapture endpointName: Microphone (High Definition Audio Device)Endpoint ID: {0.0.1.00000000}.{38178e43-ed21-4731-b8f0-1330c3b1cd0a} 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\emixedcapturetopo 0x10001: Microphone Jacks: 1 -- Jack 1 -- ChannelMapping: 0x0 Color: 0xff80c0 (red = 255, green = 128, blue = 192) Connection Type: 1 (eConnType3Point5mm) Geometric Location: 1 (eGeoLocRear) General Location: 0 (eGenLocPrimaryBox) Port Connection: 0 (ePortConnJack) IsConnected: No 0x20001: Microphone 0x20002: Microphone 0x20003: Microphone Boost 0x20000: Sum 0x10000: {0.0.0.00000000}.{f7bf26d7-89a3-4049-8cd3-8148a6615565} 0x10000:
eCapture endpointName: Speakerphone (USB Audio Device)Endpoint ID: {0.0.1.00000000}.{a21f51bc-5d0b-47af-93b6-ef9a968bb8ff} 0x10000: {2}.\\?\usb#vid_095d&pid_0005&mi_00#7&335bfb1&0&0000#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\global 0x10002: Speakerphone 0x20000: ADC 0x20001: Mute Mute node: NOT MUTED 0x20002: Volume Channel 0 volume, 0 dB to 32 dB in steps of 0.5 dB: 29 dB 0x20003: SuperMix 0x20004: 0x20005: Sample Rate Converter 0x10001:
eCapture endpointName: Microphone (High Definition Audio Device)Endpoint ID: {0.0.1.00000000}.{a9d04431-a99f-4ebe-b995-33f0d027559c} 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\emixedcapturetopo 0x10002: Microphone Jacks: 1 -- Jack 1 -- ChannelMapping: 0x0 Color: 0x000000 (red = 0, green = 0, blue = 0) Connection Type: 1 (eConnType3Point5mm) Geometric Location: 2 (eGeoLocFront) General Location: 0 (eGenLocPrimaryBox) Port Connection: 0 (ePortConnJack) IsConnected: No 0x20004: Microphone 0x20005: Microphone 0x20006: Microphone Boost 0x20000: Sum 0x10000: {0.0.0.00000000}.{f7bf26d7-89a3-4049-8cd3-8148a6615565} 0x10000:
eCapture endpointName: Line In (High Definition Audio Device)Endpoint ID: {0.0.1.00000000}.{bbf7eb42-7674-4a35-ad02-b723ea047dac} 0x10000: {2}.\\?\hdaudio#func_01&ven_10ec&dev_0262&subsys_103c1309&rev_1002#4&12f2dd06&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\emixedcapturetopo 0x10003: Line In Jacks: 1 -- Jack 1 -- ChannelMapping: 0x0 Color: 0x0000ff (red = 0, green = 0, blue = 255) Connection Type: 1 (eConnType3Point5mm) Geometric Location: 1 (eGeoLocRear) General Location: 0 (eGenLocPrimaryBox) Port Connection: 0 (ePortConnJack) IsConnected: No 0x20007: Line In 0x20008: Line In 0x20000: Sum 0x10000: {0.0.0.00000000}.{f7bf26d7-89a3-4049-8cd3-8148a6615565} 0x10000:
And here's a screenshot of the Windows Driver Kit's Kernel Streaming Studio showing the topology exposed by the audio drivers on my machine:
Source and x86/amd64 binaries attached.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/devicetopology
About six years ago I wrote a blog post about how to do WASAPI loopback capture. Since then, a few issues have come to light.
One big issue is that we're using MMCSS registration directly. Nowadays the much-preferred approach is to use a Media Foundation work queue; yes, you can use a Media Foundation work queue even if you're doing WASAPI directly. The official WASAPI sample demonstrates how to use this approach.
Another big issue is that the code isn't draining the buffer fully; it assumes there is only a single packet per engine period. Here's the capture loop as it stands:
for (...) { Wait(); if (data available) { ReadAPacket(); }}
There are two reasons this is a problem. First, if you miss a period, you will never catch up. Second, the engine is free to write many small packets into the buffer if it likes.
The code SHOULD look like this:
for (...) { while (data available) { ReadAPacket(); } Wait();}
Updated source and binaries attached.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/loopback-capture
I chatted in the past about how audio device alignment requirements impact the buffer size and the WASAPI alignment dance.
There are three alignment requirements on audio buffers:
Consider a 5.1 16-bit 48 kHz stream playing to HD Audio hardware via KSPROPERTY_RTAUDIO_BUFFER. Where multiple alignment requirements apply, the effective alignment requirement is the least common multiple of all the applicable requirements.
From the nBlockAlign requirement, the buffer must be a multiple of (6 * 16) / 8 bytes = 12 bytes.
From the KSPROPERTY_RTAUDIO_BUFFER requirement, the buffer must be a multiple of PAGE_SIZE = 4096 bytes.
From the HD Audio requirement, the buffer must be a multiple of 256 bytes (this is timer-driven, so we do not divide by 2.)
In all, then, the buffer must be a multiple of LCM(12, 4096, 256) = 12288 bytes.
Since WAVEFORMATEX.nAvgBytesPerSec = ((6 * 16) / 8) * 48000 = 576000 byte/sec, this corresponds to 12288 / 576000 * 1000 = 21.333 milliseconds.
Some time ago I created a "listen.exe" tool which used SAPI's ISpRecoContext to listen to the microphone and dump any recognized text to the console.
Today I had to debug an issue with SAPI reading from a .wav file, so I updated it to accept a listen.exe --file foo.wav argument; this consumes the audio in the .wav file instead of listening to the microphone.
Pseudocode for the difference:
Also, we have to tell the ISpRecoContext that we're interested in SPEI_END_SR_STREAM events as well as SPEI_RECOGNITION events.
Full source and binaries attached.
A gotcha: the .wav file has to have a WAVEFORMATEX.wFormatTag = WAVE_FORMAT_PCM. If it's anything else, ISpRecoGrammar::SetDictationState fails with SPERR_UNSUPPORTED_FORMAT. Neither WAVE_FORMAT_IEEE_FLOAT nor (WAVE_FORMAT_EXTENSIBLE with SubFormat = KSDATAFORMAT_SUBTYPE_PCM) work.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/listen
With World Cup Group G standings being the way they are, I decided to read up on tiebreaks.
Here are the FIFA rules (PDF)
The relevant sections are:
18.4.a: ... with three points for a win, one point for a draw and no points for a defeat (league format)
18.6: In the league format, the ranking in each group is determined as follows:
a) greatest number of points obtained in all group matches; b) goal difference in all group matches; c) greatest number of goals scored in all group matches.
If two or more teams are equal on the basis of the above three criteria, their rankings shall be determined as follows:
d) greatest number of points obtained in the group matches between the teams concerned; e) goal difference resulting from the group matches between the teams concerned; f) greater number of goals scored in all group matches between the teams concerned; g) the goals scored away from home count double between the teams concerned (if the tie is only between two teams).
18.7 discusses play-off matches between teams that are still tied after all of 18.6.a-g are applied. As we'll see, there is no possibility of the United States being involved in a play-off.
Let's start with 18.6.a. The current point standings in Group G are:
The remaining games are United States-Germany and Portugal-Ghana.
If the United States-Germany game results in a tie, then the United States and Germany will have five points apiece, with a win and two ties. They will be the top two teams in the group, regardless of the outcome of the Portugal-Ghana game.
If the Portugal-Ghana game results in a tie, then Ghana and Portugal will have two points apiece, with two ties and a defeat. Regardless of the results of the United States-Germany game, the United States and Germany will be the top two teams in the group.
So we need only consider what happens if both games are decisive.
The winner of the United States-Germany game will have seven points, with two wins and a tie. They are in on points.
The loser of the Portugal-Ghana game will have one point, with one tie and two defeats. They are out on points.
The remaining two teams (the loser of the United States-Germany game, and the winner of the Portugal-Ghana game) will have four points apiece, with a win, a tie, and a defeat.
So in this scenario, 18.6.b will be invoked. At this point we have to look at the goal difference for the teams. (The goal difference for, say, Germany is just the number of goals Germany scored, minus the number of goals Germany allowed.) These are currently:
The raw numbers look good for Germany and the United States, and bad for Ghana and Portugal. But let's bear in mind that we are considering the scenario where Germany or the United States has just lost, and Ghana or Portugal has just won. How do you win? By scoring more goals than you allow! So the goal differential of the loser of the United States-Germany game will be lower than it is now, and the goal differential of the winner of the Portugal-Ghana game will be higher than it is now.
So as a United States fan:
What if Germany beats us, and Portugal beats Ghana, but the margin of victory of both games adds up to exactly four? Or what if Germany beats us and Ghana beats Portugal, and the margin of victory of both games adds up to precisely two - that is, each game is decided by a single goal?
We can still get in on 18.6.c. At this point we have to look at the number of goals scored by each team. These are currently:
Note that the United States has one more goal than Ghana, and two more goals than Portugal. This is good. In the "goal differential" case, there was a strong relationship between winning and changing your goal differential. But there is only a weak relationship between winning and changing your raw goal count.
For example, if Germany beats the United States 3-2, and Ghana beats Portugal 1-0, the United States will actually have pulled even farther ahead in the 18.6.c race!
What if Germany beats us, and Portugal beats Ghana, and the margin of victory of the two games adds up to exactly four, and Portugal's winning score is precisely two goals more than our losing score? Or what if Germany beats us and Ghana beats Portugal, and the margin of victory of both games adds up to precisely two, and Ghana's winning score is precisely one goal higher than our losing score?
Then we are in or out on 18.6.d-g. At this point we have to look at the results of the Ghana-United States and United States-Portugal matches. In each match, the first team is the home team and the second team is the away team.
Note there is no possibility of a playoff. Had the United States-Portugal game been a 0-0 tie instead of a 2-2 tie, that would have been a possibility, since double 0 is still 0.
I talked about Rijndael in a couple of previous posts: Generating the Rijndael S-box, Efficient multiplication and division in GF(28), Sieving irreducible monic polynomials over a finite field, Addition and multiplication table for GF(22).
I'm going to talk some more about it today.
The Rijndael non-linear S-box S(x) is a composition of two invertible functions f(g(x)). Last time we showed how to generate these, and their inverses, as 256-entry tables.
As Daemen and Rijmen point out, any function from a finite field to itself can be expressed as a polynomial. In fact, given a tabular form of the function, it is possible to generate the Lagrange polynomial and then simplify.
They also give the polynomial for S(x):
Well, let's check this. And while we're at it, let's find the polynomials for g(x), f(x) and even S-1(x) too. First of all, let's start with the Lagrange polynomial.
Given a table of entries { (00, y00), (01, y01), ..., (ff, yff) }, there is a polynomial L(x) which gives the same output, namely:
L(x) = Σi ∈ { 00, 01, ..., ff } yi pi(x) where pi(x) = Πj ∈ { 00, 01, ..., ff }, j ≠ i (x - j) / (i - j)
Can we simplify this? Yes. Note that (i - j)-1 term varies over all the non-zero elements of the finite field. Since this is a field, every non-zero element has an inverse, which might or might not be itself. If the inverse is not itself, we can pair the two inverse elements together, and we get 01, which is the multiplicative identity, so we can ignore it. What are we left with? The product of those non-zero elements which are their own inverses. In the case of GF(28), there is only one such element, namely 01. Great! We can ignore the (i - j)-1 terms altogether:
L(x) = Σi ∈ { 00, 01, ..., ff } yi Πj ∈ { 00, 01, ..., ff }, j ≠ i (x - j)
What is this? A sum of 256 different polynomials.Each of these summands is a product of 255 polynomials of degree 1, and so is a polynomial of degree 255. But in GF(28), x255 = 01 for all x. So each of the summands is actually a polynomial of degree 254, or less. So the sum is also a polynomial of degree 254, or less; terms with an exponent >= 255 go away and just contribute to lower-order terms.
Great. We have { (00, y00), (01, y01), ..., (ff, yff) } for f, g, S, and S-1. Let's plug them in and see what happens!
I wrote a Perl script to do this; the script is attached. Here's the output. (It's quite slow; it takes about two and a half minutes to run.)
Daemen and Rijmen's polynomial rendition of S(x) is confirmed.
Also note how simple g(x) is, and how complex S-1(x) is.
Finally, I must confess that none of this is actually useful. The tabular form is much more convenient for applications. This is just a fun theoretical exercise.
(Well, I had fun.)
EDIT: 2015-10-31 moved script to https://github.com/mvaneerde/blog/blob/master/rijndael/lagrange-interpolation.pl
I talked about Rijndael in a couple of previous posts: Efficient multiplication and division in GF(28), Sieving irreducible monic polynomials over a finite field, Addition and multiplication table for GF(22).
One of the more interesting steps used in the Rijndael transformation is the non-linear S-box. This is a function S(a) that takes an element of GF(28) (which could be represented as a byte) and returns another one. It is invertible but non-linear.
The spec defines S(a) in terms of two other invertible functions g(a) and f(a). In particular S(a) = f(g(a)). It follows that S-1(a) = g-1(f-1(a)).
Daemen and Rijmen seem to have been almost embarrassed by the simplicity of g so they introduced f. To quote from section 3.4.1:
I don't know if I buy the "simplicity" argument. It seems to me that if Rijndael, without f, is robust, then it's robust. And if you add f to a non-robust scheme, I don't understand how that makes it robust; I do see that it complicates analysis, but that seems like a drawback rather than an advantage.
But I'll play along for now. What is f?
b = f(a) is defined using the following matrix multiplication over GF(2) (each entry can be represented as a bit; a row or column as a byte.) Multiplication can be implemented as bitwise AND, and addition by bitwise XOR.
In particular, note that f(00) = 63. So S(00) = f(g(00)) = f(00) = 63. So S-1(63) = 00.
The reference implementation in the book uses hardcoded 256-byte lookup tables for S(a) and S-1(a). I wrote a Perl script which generates these lookup tables and prints them out. This script is attached.
Here's its output, which matches the listing in the book:
And here's the interesting part, the implementation of g(a) and f(a):
EDIT 2015-10-31: moved script to https://github.com/mvaneerde/blog/blob/master/rijndael/s-box.pl
In Windows 7 we published a white paper which shows how Windows chooses which audio device should be the default. This remains true for Windows 8 and Windows 8.1.
The six factors that are considered for each device are:
Each factor has an associated preference list and a weight. Generally speaking, items that appear higher in the list above have priority over items that appear lower.
I wrote a tool that uses public APIs to query each of these six factors for all devices on the system. Source and binaries are attached.
Here's what it outputs on my system that has a built-in HD Audio device and an external USB device plugged in:
>defaultaudiodevice.exeRender devices: 4 Speakers (High Definition Audio Device) Id: {0.0.0.00000000}.{2089b0a1-893b-45fa-b6e8-ec84ee827c06} KSJACK_DESCRIPTION2.JackCapabilities: presence detection not supported PKEY_AudioEndpoint_FormFactor: 1 (Speakers) PKEY_AudioEndpoint_JackSubType: {DFF21CE1-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_SPEAKER) PKEY_Device_EnumeratorName: HDAUDIO KSJACK_DESCRIPTION.GenLocation: 0 (eGenLocPrimaryBox) KSJACK_DESCRIPTION.GeoLocation: 13 (eGeoLocATAPI)
Speakers (USB Audio) Id: {0.0.0.00000000}.{4bf6c88a-9b54-46cc-9eb0-91c5fa468ed6} IKsJackDescription2 not supported PKEY_AudioEndpoint_FormFactor: 1 (Speakers) PKEY_AudioEndpoint_JackSubType: {DFF21CE1-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_SPEAKER) PKEY_Device_EnumeratorName: USB IKsJackDescription not supported
Speakers (High Definition Audio Device) Id: {0.0.0.00000000}.{89482885-856d-4b7b-88ed-3ffa4944f14b} KSJACK_DESCRIPTION2.JackCapabilities: presence detection supported PKEY_AudioEndpoint_FormFactor: 1 (Speakers) PKEY_AudioEndpoint_JackSubType: {DFF21CE1-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_SPEAKER) PKEY_Device_EnumeratorName: HDAUDIO KSJACK_DESCRIPTION.GenLocation: 0 (eGenLocPrimaryBox) KSJACK_DESCRIPTION.GeoLocation: 1 (eGeoLocRear)
SPDIF Interface (USB Audio) Id: {0.0.0.00000000}.{c2c47ae1-abe1-43fa-825a-871bab831cf4} IKsJackDescription2 not supported PKEY_AudioEndpoint_FormFactor: 8 (SPDIF) PKEY_AudioEndpoint_JackSubType: {DFF21FE5-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_SPDIF_INTERFACE) PKEY_Device_EnumeratorName: USB IKsJackDescription not supported
Capture devices: 3 Microphone (USB Audio) Id: {0.0.1.00000000}.{139b7b57-28d2-46de-9fce-702c0944c03f} IKsJackDescription2 not supported PKEY_AudioEndpoint_FormFactor: 4 (Microphone) PKEY_AudioEndpoint_JackSubType: {DFF21BE1-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_MICROPHONE) PKEY_Device_EnumeratorName: USB IKsJackDescription not supported
Line (USB Audio) Id: {0.0.1.00000000}.{67982570-bdea-4524-82ac-3d15d2b5ae89} IKsJackDescription2 not supported PKEY_AudioEndpoint_FormFactor: 2 (LineLevel) PKEY_AudioEndpoint_JackSubType: {DFF21FE3-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_LINE_CONNECTOR) PKEY_Device_EnumeratorName: USB IKsJackDescription not supported
SPDIF Interface (USB Audio) Id: {0.0.1.00000000}.{72b7efb6-c21a-4415-84e5-292d8a5b2b11} IKsJackDescription2 not supported PKEY_AudioEndpoint_FormFactor: 8 (SPDIF) PKEY_AudioEndpoint_JackSubType: {DFF21FE5-F70F-11D0-B917-00A0C9223196} (KSNODETYPE_SPDIF_INTERFACE) PKEY_Device_EnumeratorName: USB IKsJackDescription not supported
Jack Detection Capability
The first render device does not have jack presence detection, and the other three do. (Note the USB audio devices have grandfathered-in jack presence detection, even though the USB audio class driver does not support IKsJackDescription2.) This puts the first render device out of the running.
Form Factor
The fourth render device has form factor SPDIF, and the second and third have form factor Speakers. This puts the fourth render device out of the running, since the heuristics consider Speakers more attractive than SPDIF.
Kernel Streaming node type
The two remaining render devices both have form factor KSNODETYPE_SPEAKER, so they are tied.
Bus type
The second render device has bus type USB, and the third render device has bus type HD Audio. The default device heuristics prefer USB to HD Audio, so the second render device becomes the default audio render device.
EDIT September 22 2015: moved source to github https://github.com/mvaneerde/blog/tree/master/defaultaudiodevice
I talked about Rijndael in a couple of previous posts: Sieving irreducible monic polynomials over a finite field, Addition and multiplication table for GF(2²)
Rijndael does a lot of arithmetic operations (addition and multiplication) on elements of GF(28)4.
These are represented as polynomials b0 + b1 x + b2 x2 + b3 x3.
The individual coefficients bi are elements of GF(28).
These are themselves polynomials a0 + a1 x + ... + a7 x7 where the individual coefficients ai are bits (0 or 1).
Multiplication bi bj is made into a closed operation by taking the modulus of the product under the reduction polynomial m = x8 + x4 + x3 + x + 1.
The reduction polynomial is prime, which is important in establishing that this representation of the Galois field really is a field.
For convenience we will represent the elements of GF(28) as hexadecimal numbers 0x00, 0x01, ... 0xfe, 0xff.
By contrast, we will represent the elements of GF(28)4 as vectors (b0 b1 b2 b3); for example, (0x00 0x01 0x02 0x03).
Multiplying vectors in GF(28)4 induces a bunch of multiplications in GF(28). It would be good to come up with a way to make this fast. Doing a polynomial reduction every time is not fast.
Of course, one way to do this is to create a multiplication table with 256 rows and 256 columns, do each multiplication the slow way once, and compile in the results. This would require on the order of 64 kB. But there's a better way.
The trick that is used in Daemen and Rijmen's implementation is to find a primitive element e in GF(28) so that the orbit of e (that is to say, the set {e0, e1, ..., e254}) spans all of GF(28) - {0x00}.
If we find such an e, then we can save a cheat sheet which is almost as fast as the multiplication table, but requires storing only on the order of 256 bytes.
Well, let's calculate the orbits of all the elements in order until we find a primitive element.
Orbit(0x00) = { 0x000, 0x001, 0x002, ... } = { 0x01, 0x00, 0x00, ... } = { 0x00, 0x01 }. Nope. Orbit(0x01) = { 0x010, 0x011, 0x012, ... } = { 0x01, 0x01, 0x01, ... } = { 0x01 }. Even worse. Orbit(0x02) = { 0x020, 0x021, 0x022, ... } = { 0x01, 0x02, 0x04, ..., 0x8d }. This looks promising at first but we end up with an orbit of only 51 out of the necessary 255 elements (note that 51 divides 255:)
0x020 = 0x01 0x021 = 0x02 0x022 = 0x04 0x023 = 0x08 0x024 = 0x10 0x025 = 0x20 0x026 = 0x40 0x027 = 0x80 0x028 = 0x1b 0x029 = 0x36 0x0210 = 0x6c 0x0211 = 0xd8 0x0212 = 0xab 0x0213 = 0x4d 0x0214 = 0x9a 0x0215 = 0x2f 0x0216 = 0x5e 0x0217 = 0xbc 0x0218 = 0x63 0x0219 = 0xc6 0x0220 = 0x97 0x0221 = 0x35 0x0222 = 0x6a 0x0223 = 0xd4 0x0224 = 0xb3 0x0225 = 0x7d 0x0226 = 0xfa 0x0227 = 0xef 0x0228 = 0xc5 0x0229 = 0x91 0x0230 = 0x39 0x0231 = 0x72 0x0232 = 0xe4 0x0233 = 0xd3 0x0234 = 0xbd 0x0235 = 0x61 0x0236 = 0xc2 0x0237 = 0x9f 0x0238 = 0x25 0x0239 = 0x4a 0x0240 = 0x94 0x0241 = 0x33 0x0242 = 0x66 0x0243 = 0xcc 0x0244 = 0x83 0x0245 = 0x1d 0x0246 = 0x3a 0x0247 = 0x74 0x0248 = 0xe8 0x0249 = 0xcb 0x0250 = 0x8d And then we circle back around to... 0x0251 = 0x01
Well, let's keep looking. What about 0x03?
Orbit(0x03) = { 0x030, 0x031, 0x032, ... } = { 0x01, 0x03, 0x05, ..., 0xf6 }. Bingo, we hit all 255 non-0x00 elements!
0x030 = 0x01 0x031 = 0x03 0x032 = 0x05 0x033 = 0x0f 0x034 = 0x11 0x035 = 0x33 0x036 = 0x55 0x037 = 0xff 0x038 = 0x1a 0x039 = 0x2e 0x0310 = 0x72 0x0311 = 0x96 0x0312 = 0xa1 0x0313 = 0xf8 0x0314 = 0x13 0x0315 = 0x35 0x0316 = 0x5f 0x0317 = 0xe1 0x0318 = 0x38 0x0319 = 0x48 0x0320 = 0xd8 0x0321 = 0x73 0x0322 = 0x95 0x0323 = 0xa4 0x0324 = 0xf7 0x0325 = 0x02 0x0326 = 0x06 0x0327 = 0x0a 0x0328 = 0x1e 0x0329 = 0x22 0x0330 = 0x66 0x0331 = 0xaa 0x0332 = 0xe5 0x0333 = 0x34 0x0334 = 0x5c 0x0335 = 0xe4 0x0336 = 0x37 0x0337 = 0x59 0x0338 = 0xeb 0x0339 = 0x26 0x0340 = 0x6a 0x0341 = 0xbe 0x0342 = 0xd9 0x0343 = 0x70 0x0344 = 0x90 0x0345 = 0xab 0x0346 = 0xe6 0x0347 = 0x31 0x0348 = 0x53 0x0349 = 0xf5 0x0350 = 0x04 0x0351 = 0x0c 0x0352 = 0x14 0x0353 = 0x3c 0x0354 = 0x44 0x0355 = 0xcc 0x0356 = 0x4f 0x0357 = 0xd1 0x0358 = 0x68 0x0359 = 0xb8 0x0360 = 0xd3 0x0361 = 0x6e 0x0362 = 0xb2 0x0363 = 0xcd 0x0364 = 0x4c 0x0365 = 0xd4 0x0366 = 0x67 0x0367 = 0xa9 0x0368 = 0xe0 0x0369 = 0x3b 0x0370 = 0x4d 0x0371 = 0xd7 0x0372 = 0x62 0x0373 = 0xa6 0x0374 = 0xf1 0x0375 = 0x08 0x0376 = 0x18 0x0377 = 0x28 0x0378 = 0x78 0x0379 = 0x88 0x0380 = 0x83 0x0381 = 0x9e 0x0382 = 0xb9 0x0383 = 0xd0 0x0384 = 0x6b 0x0385 = 0xbd 0x0386 = 0xdc 0x0387 = 0x7f 0x0388 = 0x81 0x0389 = 0x98 0x0390 = 0xb3 0x0391 = 0xce 0x0392 = 0x49 0x0393 = 0xdb 0x0394 = 0x76 0x0395 = 0x9a 0x0396 = 0xb5 0x0397 = 0xc4 0x0398 = 0x57 0x0399 = 0xf9 0x03100 = 0x10 0x03101 = 0x30 0x03102 = 0x50 0x03103 = 0xf0 0x03104 = 0x0b 0x03105 = 0x1d 0x03106 = 0x27 0x03107 = 0x69 0x03108 = 0xbb 0x03109 = 0xd6 0x03110 = 0x61 0x03111 = 0xa3 0x03112 = 0xfe 0x03113 = 0x19 0x03114 = 0x2b 0x03115 = 0x7d 0x03116 = 0x87 0x03117 = 0x92 0x03118 = 0xad 0x03119 = 0xec 0x03120 = 0x2f 0x03121 = 0x71 0x03122 = 0x93 0x03123 = 0xae 0x03124 = 0xe9 0x03125 = 0x20 0x03126 = 0x60 0x03127 = 0xa0 0x03128 = 0xfb 0x03129 = 0x16 0x03130 = 0x3a 0x03131 = 0x4e 0x03132 = 0xd2 0x03133 = 0x6d 0x03134 = 0xb7 0x03135 = 0xc2 0x03136 = 0x5d 0x03137 = 0xe7 0x03138 = 0x32 0x03139 = 0x56 0x03140 = 0xfa 0x03141 = 0x15 0x03142 = 0x3f 0x03143 = 0x41 0x03144 = 0xc3 0x03145 = 0x5e 0x03146 = 0xe2 0x03147 = 0x3d 0x03148 = 0x47 0x03149 = 0xc9 0x03150 = 0x40 0x03151 = 0xc0 0x03152 = 0x5b 0x03153 = 0xed 0x03154 = 0x2c 0x03155 = 0x74 0x03156 = 0x9c 0x03157 = 0xbf 0x03158 = 0xda 0x03159 = 0x75 0x03160 = 0x9f 0x03161 = 0xba 0x03162 = 0xd5 0x03163 = 0x64 0x03164 = 0xac 0x03165 = 0xef 0x03166 = 0x2a 0x03167 = 0x7e 0x03168 = 0x82 0x03169 = 0x9d 0x03170 = 0xbc 0x03171 = 0xdf 0x03172 = 0x7a 0x03173 = 0x8e 0x03174 = 0x89 0x03175 = 0x80 0x03176 = 0x9b 0x03177 = 0xb6 0x03178 = 0xc1 0x03179 = 0x58 0x03180 = 0xe8 0x03181 = 0x23 0x03182 = 0x65 0x03183 = 0xaf 0x03184 = 0xea 0x03185 = 0x25 0x03186 = 0x6f 0x03187 = 0xb1 0x03188 = 0xc8 0x03189 = 0x43 0x03190 = 0xc5 0x03191 = 0x54 0x03192 = 0xfc 0x03193 = 0x1f 0x03194 = 0x21 0x03195 = 0x63 0x03196 = 0xa5 0x03197 = 0xf4 0x03198 = 0x07 0x03199 = 0x09 0x03200 = 0x1b 0x03201 = 0x2d 0x03202 = 0x77 0x03203 = 0x99 0x03204 = 0xb0 0x03205 = 0xcb 0x03206 = 0x46 0x03207 = 0xca 0x03208 = 0x45 0x03209 = 0xcf 0x03210 = 0x4a 0x03211 = 0xde 0x03212 = 0x79 0x03213 = 0x8b 0x03214 = 0x86 0x03215 = 0x91 0x03216 = 0xa8 0x03217 = 0xe3 0x03218 = 0x3e 0x03219 = 0x42 0x03220 = 0xc6 0x03221 = 0x51 0x03222 = 0xf3 0x03223 = 0x0e 0x03224 = 0x12 0x03225 = 0x36 0x03226 = 0x5a 0x03227 = 0xee 0x03228 = 0x29 0x03229 = 0x7b 0x03230 = 0x8d 0x03231 = 0x8c 0x03232 = 0x8f 0x03233 = 0x8a 0x03234 = 0x85 0x03235 = 0x94 0x03236 = 0xa7 0x03237 = 0xf2 0x03238 = 0x0d 0x03239 = 0x17 0x03240 = 0x39 0x03241 = 0x4b 0x03242 = 0xdd 0x03243 = 0x7c 0x03244 = 0x84 0x03245 = 0x97 0x03246 = 0xa2 0x03247 = 0xfd 0x03248 = 0x1c 0x03249 = 0x24 0x03250 = 0x6c 0x03251 = 0xb4 0x03252 = 0xc7 0x03253 = 0x52 0x03254 = 0xf6 ... and only now do we circle around to... 0x03255 = 0x01
This gives us a one-to-one mapping between the 255 powers 0 through 254 and the 255 non-zero bytes 0x01 through 0xff.
Here are the perl scripts I used to generate these:
use strict; my $m = 0x11b; my $a = 1; for (my $i = 0; ; $i++) { printf("0x02^%2d = 0x%02x\n", $i, $a); if ($i > 0 and $a == 1) { last; } $a <<= 1; # * 0x02 if ($a > 0xff) { $a ^= $m; } } print "\n"; $a = 1; for (my $i = 0; ; $i++) { printf("0x03^%3d = 0x%02x\n", $i, $a); if ($i > 0 and $a == 1) { last; } $a = ($a << 1) ^ $a; # * 0x03 if ($a > 0xff) { $a ^= $m; } }
Now that we have this orbit, we use it to construct two lookup tables:
// 255 entries xPlusOne_ToThe[0] = 0x01 to xPlusOne_ToThe[254] = 0xf6 xPlusOne_ToThe[] = { 0x01, 0x03, 0x05, ..., 0x52, 0xf6 };
And the inverse mapping:
// 255 entries logXPlusOne_Of[0x01] = 0 to logXPlusOne_Of[0xff] = 7 logXPlusOne_Of[] = { UNDEFINED, 0, 25, 1, 50, ..., 112, 7 };
Now that we have paid for these 512-ish bytes, we can do multiplication very cheaply:
multiply(b1, b2) { if (0x00 == b1 || 0x00 == b2) { return 0x00; } logAns = logXPlusOne_Of[b1] + logXPlusOne_Of[b2]; if (logAns >= 255) { logAns -= 255; } return xPlusOne_ToThe[logAns]; }
The Windows Phone SDK includes a Windows.Phone.Media.Devices.AudioRoutingManager API which I had occasion to use.
The API allows apps that have communication audio streams (e.g., Voice over IP calls) to control whether the audio goes out over the earpiece, over the speakerphone, or over the Bluetooth headset. This might be done automatically, or might be used to power "Speakerphone" and "Bluetooth" buttons in the app UI.
The starting point is a GetDefault() method which gives you the singleton AudioRoutingManager object.
There are three ways to get information out of this object:
You can also tell the object to change something:
There are two enumerated types used by these methods:
At first I found this very confusing. SetAudioEndpoint takes an AudioRoutingEndpoint type, but what do I pass to it? And why does GetAudioEndpoint always tell me "Speakerphone?"
After experimenting and chatting with the folks who own the API I was able to construct an internal mental model which made more sense to me.
Here's a chart I put together on how the different states and policies interact:
Note that if a wired headset is plugged in, the app has no way to make audio come out of the earpiece. This is true regardless of whether Bluetooth is connected.
It seems like much of my confusion resulted from a single enumerated type (AudioRoutingEndpoint) serving three purposes:
I think it would have been clearer to make the audio routing policy a different enumerated type from the current audio output or the available audio outputs. But with the "audio routing policy" mental model, it's not too bad.
Last time we talked about the addition and multiplication tables for GF(2²); GF(28) is relevant for the Rijndael encryption scheme.
Joan Daemen and Vincent Rijmen use a representation of GF(28) where each element is a polynomial of the form b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0, with the bi being bits. A polynomial is represented by a single byte. Addition is component-wise (modulo 2); two polynomials can be added with a single XOR operation. Multiplication is a little more complicated.
Rijndael defines multiplication as normal polynomial multiplication, followed by taking a modulus using the reduction polynomial m = x8 + x4 + x3 + x + 1. Last time we showed that, in GF(2²), x2 + x + 1 was used to reduce polynomial multiplication, and also that a necessary quality for a reduction polynomial is that it be irreducible/prime.
Last time I hinted at the question: how do we show that m is irreducible? Well, one way is to do trial division of all polynomials up to degree 4.
But that's no fun. Instead, let's write a script to generate all irreducible polynomials, and see if m is on it! The approach is very similar to the Sieve of Eratosthenes: generate a list of all the polynomials, then traverse it from the low end to the high end; circle each element that hasn't been crossed out, then cross out all multiples of that element.
The first argument q is the modulus of the coefficients (in this case, 2) and the second argument d (in this case, 8) is how high the degree can go. Here is the output of the script:
Note that m is not just prime, it is the lowest of the monic 8-degree polynomials with coefficients mod 2.
The script itself (in Perl) is attached. It makes no claims to being pretty or efficient.
As a check, there is an elegant formula for the number of irreducible monic polynomials with coefficients in a finite field:
N(q, n) = (Σd|n μ(d) qn/d)/n
where μ(x) is the Möbius function.
In particular:
This checks out with the script.
EDIT 2015-10-31: move script to https://github.com/mvaneerde/blog/blob/master/rijndael/polynomial-sieve.pl
I'm reading Joan Daemen and Vincent Rijmen's book The Design of Rijndael and I'm giving myself a refresher course on group theory.
Key to the encryption standard is the Galois field on 256 elements GF(28). A multiplication table of 256 elements by 256 elements quickly becomes a wall of text, so let's reason by analogy and look at GF(22).
There are a number of ways to represent elements of the field; we'll start by representing them as polynomials with degree at most 1, and with integer coefficients modulo 2. There are four such polynomials: {0, 1, x, x + 1}.
Here are the addition and multiplication tables:
Hold on. What's that funny-looking m?
It's a "reduction polynomial" which brings the product back down to degree 1 or less. It has to be a polynomial of degree 2. There are four such polynomials: let's try each and see what we get.
Note that the first three polynomials all factor into products of lower-degree polynomials: x2 = x(x), x2 + 1 = (x + 1)(x + 1), x2 + x = x(x + 1). Only x2 + x + 1 is prime; and this prime reduction polynomial generates a complete multiplication table with no 0s. This is a necessary condition to be a field. Our final tables are:
We can also write our elements in binary form: 0 => 00, 1 => 01, x => 10, and x + 1 => 11. In this notation our tables become:
Rijndael works in GF(28) and uses a reduction polynomial of x8 + x4 + x3 + x + 1. They say this is prime. I sure hope so.
A common convention within Microsoft when going out of office is to create two calendar appointments in Outlook:
I'm always forgetting one of the steps under 2., so I'm creating this blog post. Next time I go out of office I'll remember to check this post.