text:
White Sox general manager Rick Hahn hinted he would start dealing players if the team couldn't string together a successful stretch.
Hahn has followed through, trading the first valuable commodity on the White Sox. Left-handed reliever Matt Thornton and cash considerations to the Red Sox for minor league outfielder Brandon Jacobs. Thornton finishes his eight-year career on the White Sox with a 31-35 record, 3.28 ERA, 23 saves and an All-Star appearance (2010).
Jacobs, 22, hit .247 with 11 home runs and 44 RBIs in 84 games this year between Single-A Salem and Double-A Portland. Entering the season, Jacobs was rated by MLB.com as the Red Sox's 11th-best prospect.
Thornton, who was the source of frustration from some White Sox fans in the last couple years, finishes his time with the White Sox as the franchise's all-time relief leader in appearances (first), holds (first), strikeouts (second), wins (tied for third) and strikeouts (strikeouts).
The White Sox will make a corresponding move before Game 1 today against the Phillies.
-- Meghan Montemurro


text:
How Messaging Apps Make Money
While WhatsApp has so far kept its messaging service simple and free of advertisements, rival apps like Line, Kakao Talk and WeChat have been scrambling to find ways to make money through additional services like video games and official accounts for corporate users. For those apps, one big challenge is to make sure that those efforts to generate revenue won't undermine their appeal as communication and social networking tools.
For example, Line, which is popular in Japan, Taiwan and Thailand, now has three major sources of revenue: free-to-play video games that make money from in-game purchases of virtual items and other services; "stickers" featuring cartoon characters that users buy and send as messages; and official accounts for businesses and celebrities who pay fees to send a set number of promotional messages. Last month, Line said its revenue for the fourth quarter of 2013 rose more than fivefold to 12.2 billion yen ($120 million) from 2.2 billion yen a year earlier.
Line says the promotional messages sent by official accounts are different from traditional ads in that users only receive them if they choose to become subscribers of those accounts. A Line spokeswoman says the app is advising corporate and celebrity account users to avoid sending messages too often, while keeping each message short. If users think that they are getting too many messages from a certain account, they can block the account. As a business model, the official accounts work like ads. In Japan, monthly fees for Line's accounts increase if the businesses and celebrities using them get more subscribers or send more messages.
"Instead of relying on just one business model, we are trying to combine several different models," said Jun Masuda, Line's chief strategy and marketing officer, at a press conference in Tokyo last week.
Kakao Talk, which is dominant in South Korea, also uses methods that are similar to Line's to make money.
Its color-matching video game called Anipang, which users play through the messaging platform, has been a big success. Kakao, which doesn't disclose its annual financial results, also generates some revenue by letting brands and celebrities like "Gangnam Style" singer Psy send messages and updates to their subscribers.
Sirgoo Lee, Kakao's co-chief executive, says he is experimenting with seven or eight new projects to find new sources of revenue. Line's Masuda also says that the company is looking into other services such as e-commerce and music distribution as possible ways to earn revenue from its messaging platform.
In China, WeChat, developed by local Internet giant Tencent Holdings, last year added an electronic payment feature to the popular app – a step toward making money with small handling fees for transactions made through the app. Like Line and Kakao, WeChat uses video games to generate some of its revenue.
By contrast, WhatsApp, the messaging app from Silicon Valley that Facebook recently agreed to buy for $19 billion, has so far limited its service to simple communication features, and that has made the app more appealing to some users. But analysts say this strategy has also limited the company's ability to make money, despite having 450 million monthly active users. The app's revenue stood at $20 million last year. The company says it charges a fee after one year of service, but it doesn't disclose the number of paying users.
With Facebook backing it, WhatsApp could get more time to come up with a long-term business model as the app tries to further expand its user base. "Monetization is not going to be a priority for us," said WhatsApp Chief Executive Jan Koum at a conference call last month, after announcing the deal with Facebook. "We're focused on the growth."
–Mayumi Negishi contributed to this article.

subset: commoncrawl


text:
Take me home, Country Roads
The middle infield combination of Ronny Cedeno and Delwyn Young is turning heads. At the plate the duo has been getting on base and knocking the ball around. Lastings Milledge has been looking good and showing improvement. He belted his first homerun as a Pirate and has been hustling all over the diamond. Pitching has been on key thanks to Ross Ohlendorf and Paul Maholm. This tandem has been mowing down hitters and getting outs. Its great to see them turn around, especially against my most hated team-the Brew Crew.
In the midst of this winning streak I have been longing to go back to school. Its that time of year again where I pack up the Nissan and head back to another year of collegiate education. I am embarking on my junior year of college at West Virginia University. With two years under my belt it is simply amazing how time flies. I can remember moving into my dorm room with my parents by my side. Now I have my own apartment with three good friends ready to accept the challenge of becoming adults once again.
While I am happy to become a seasoned vet of the Moutaineers it is all bittersweet. It's sad leaving everything I have back home in Youngstown. My family and friends are 2 and a half hours away but I still keep in touch with them. Here is a little taste of what I leave behind each fall when I head to Morgantown.
From Pittsburgh pride to WVU passion. We have a wall dedicated to the blue and gold of West Virginia. With a Fathead as teh centerpiece and programs around it this wall is very special to my family. With a long line of graduates I take great honor in carrying the WVU tradition.
One of the most memorable sporting events I have ever attended was the MLB All-Star game in 2006. Seeing a collection of the greatest players all on one field was outstanding. The game itself was thrilling. Trevor Hoffman blew the save and Michael Young drove in the winning run with a double off the wall in centerfield. The Homerun Derby was my favorite event of the week. Ryan Howard capped off the exhibition by banging a shot off on eof the "HIT IT HERE" signs. The crowd went nuts. It was the perfect eneding to the great showdown. The celebrity softball game and futures game were cool as well. I'm glad that we have a wall in honor of the week.
My dad's favorite player in all of baseball history is Roberto Clemente. A true Pirate fan he stays at home with his honors, however there has always been a special place in his heart for Nolan Ryan. We have a nice set up for him which includes the ever famous 1964 Rookie Card. My father loved his hard throwing abilities and record setting years.
You may be wondering why there is a random pennant of the Twins and Nationals on the wall. However there is a legit reason. We also have 25 other MLB teams along the walls of the basement. Every stadium we go to we buy a pennant of the home team. Just as a way to remember our time with the team.
Didn't believe me when I said I was a big Ian Snell fan. While now you should. Over the years I have collected these 10 cards of Snell. Whether it was from packs, card stores or ebay I got my hands on them and displayed them proudly.
Along with the Snell cards I also have a display of Pirate cards from all over the histor
y of the team. It took me a while I collect all of these cards but I have some from old players as well as current Bucs.
The picture at the top of the entry is me before taking off to Morgantown. I am now here in Mountaineer country ready to 'study' and get back in touch with my college spirt. I will post pictures of my apartment room setting in my next entry.
The Pirates are hosting the Reds this weekend. My dad, brother and some of his friends will be there. It is kind of sad seeing them go off like this. I would love to go with them but I have obligations here now. My life is progressing and my brother and dad will enjoy memories that we shared at one time as well.
13 Comments
Matt: It is amazing how time flies. This baseball season is almost over! As well as my summer, which means school is right around the corner, and learning to drive, and the SAT's, and AP exams, and more summer, ok that's enough.
I like all the sport stuff you have there. I think the pennant thing is cool. It makes me think you are a sentimental guy. That's nice. -Virginia
Matt, very nice post. I enjoyed seeing all your sports memorabilia and glad to see that sports is a family tradition. I congratulate you on your college endeavors. I know your family is very proud of you. I wish you success in everything you do. Please post pictures of your college. West Virginia must be beautiful.
Good luck and have fun this year in college!
Your basement looks awesome, too. A great tribute to all Pittsburgh sports.
Wow! what a great collection and I noticed how well organized you have it. I should go home and organize my stuff. Good luck in college. Wtih your post, you reminded me of a Roberto Clemente book that I want to read.
*You already know what my take is on this Matt… I was devistated to see Snell get traded, (as well as the others this season,) – but it seems as though Seattle is getting him out of his 'funk.' (The Mariners jacket you had on in a previous post is making a lot more sense now lol,) – because ever since Nyjer became a National – I suddenly keep an eye on Washington to see how they've been doing. It's funny how trades seem to effect the fans… Gorzalanny is a Cub – and I still keep tabs on how he's been handling Chicago. McLouth and LaRoche are Braves, and I try to watch every Atlanta game that comes on the MLB channel whenever possible. I don't have love for any of those teams, but considering all of the former Pirates traded this year were excellent players – they're still worth following. Great collection man, and congrats on being a WVU student. I'll be working hard this year in school myself, with hopes of transfering to a sweeter college next year… Do I smell Syracuse?
Matt – you and your family have a great connection together through sports; and it is something that will bind you together throughout your whole life. Have a great year at school!
Now, I have heard that there is not much to do in Morgantown and that it is pretty isolated from everything else. Is that true? It is nice to see the Bucs getting some wins after they got blasted by just about everybody for cleaning house. Those moves ain't looking too bad now. Enjoy heading back to college. I'd love to head back myself!
Great decorations here. I see you have some West Virgina Pride over there along with the pennants and baseball cards. I wonder why they call it the terrible towel. It's a funny name for a rally towel.
Matthew Tang
*When you get a chance, check out my new RYAN DOUMIT read – He deserved some shine…
College does go by pretty fast, I couldn't believe it when I was finally a senior and graduating and I can't believe I'm already starting my 3rd year of graduate school next month. Good luck with classes and everything, junior year was one of my toughest, but hopefully that's not the case for you!
The Pirates played pretty well this weekend against my Reds…but the fact that the young/new team is starting to gel and win games gives me a little hope that it might happen with the Reds. Hopefully sooner rather than later…
You must be busy with moving and settling in since you haven't posted for a while. Please let us know how you are doing.
Back in college… and with the Phillies in town for a few days….. hope things go well this year, in colege that is, not the WVU sports, I root for Penn State, and seem to live in OSU country..sucks… good luck anyway…
Outside the Phillies Looking In


text: My ds2 is almost 17 months old and I think we've started the weaning process. We're pretty much at naps/bedtime/and wake-up. He mostly sttn or I don't remember waking up anymore to feed at night. I feel pretty good about this, I think I was starting to get burned out when after he turned a year old he started nursing again like a newborn. All of the ladies who've said things get better/easier sometimes if you cut back were RIGHT. I don't have any questions really I just wanted to say it out loud so to speak. I haven't set a time limit on nursing either, for now we'll keep on as long as my ds wants.


text:
IICT, Chennai provides real-time and placement focused Soft Skill training in chennai . Our Soft Skill course includes basic to advanced level and our Soft Skill course is designed to get the placement in good MNC companies in chennai as quickly as once you complete the Soft Skill training course. Our Soft Skill trainers are Soft Skill certified professionals and they are certified experts and experienced professionals. We have designed our Soft Skill course content and syllabus based on students requirement to achieve everyone's career goal. In our Soft Skill training program, you will learn basic to advanced level of soft skill program.
Our soft skills training center is equipped with lab facilities and excellent infrastructure. We also provide soft skills certification training path for our students in chennai. Through our associated soft skills training center, we have trained more than 1000+ softskills students and provided 80 percent placement. Our soft skills course fee is value for money and tailor-made course fee based on the each student's training requirements. softskills training in chennai conducted on day time classes, weekend training classes, evening batch classes and fast track training classes.
Are you located in any of these areas - Adyar, Ambattur, Aminjikarai, Adambakkam, Anna Nagar, Anna Salai, Ashok Nagar, Ashok Pillar, Besant Nagar, Choolaimedu, Chromepet, Egmore, Ekkattuthangal, George Town, Guindy, Guduvanchery, K.K.Nagar, Kilpauk, Kodambakkam, Koyambedu, Madipakkam, Medavakkam, Meenambakkam, Mudichur, Mylapore, Nandanam, Nanganallur, Navallur, Nungambakkam, OMR, Pallikaranai, Pammal, Perungudi, Perungalathur, Porur, Potheri, Pozhichalur, Puzhal, Saidapet, Sholinganallur, St. Thomas Mount, T.Nagar, Tambaram, Teynampet, Thiruvanmiyur, Thiruvattriyur, Thoraipakkam, Urappakkam, Vadapalani, Vandalur, Velachery, Villivakkam, Virugambakkam and West Mambalam.
Our Chrompet office is just few kilometers away from your location. If you need the best training in Chennai, driving couple of extra kilometers is worth it.


text:
Finally! The Dodgers are the NL West Champions!
I am a little late with this post but.. got to do it.
Woohoo! Finally! The Great Big Dodger in the sky has answered the prayers of the faithfull Dodger fans!!!
The Dodgers are the NL West Champions! I think it tasted much sweeeter with all the waiting
During the 8th inning of Saturday's game with a confortable lead and while in my seat in the Top Deck, I told my friends and my brother "I want to go to the field level" My friend LTD23 just looked a me like saying "No," but then said "Ok, Emma, go if they let you.". Well, I did make it to the field level!
I watched the final out from there and got a little chocked up watching it. Andre made the final out
After moving several times, I made it to the seats close enough that I got sprayed with champagne on my face, glasses and on my jacket. When I looked who was around me, I found friends of mine so we hugged, we high-fived! It was AWESOME!!!
Here are some pictures from the celebration
Players with the NL West Championship shirts!
Kershaw who was the moral winner in the NL West clincher. What a job this kid did. Shades of Koufax, I kept hearing from my friends. You can see Kemp to the left.
Andre Ethier and his cute baby shown on Dodger Diamond vision. See part of the retired numbers under the overhang of the left side Pavilion where my friends Erik, Gary, Tony and Jose have season tickets.
Matt Kemp celebratin in the clubhouse. My camera's batteries went dead so I only took this with my cellphone from the postgame celebration that I watched on tv when I got home.
the Dynamic Duo of Matt Kemp and Andre Ethier. Notice how Matt is carrying Andre!
Juan Pierre, Matt Kemp and Andre Ethier!
I've been recharging my body's batteries to get ready for Wednesday!!!!
Let's go Dodgers!!!! Let's go!!!
I am ready for October Baseball!!!
21 Comments
Wow. That was quite a celebration! Congrats to you and the Dodgers. I think you're right: the waiting made the clinch all the sweeter. Now it's on to the Cardinals on Wednesday. Go Dodgers!
Sounds like you had a great time! Can't wait for the games to get started!
I definitely tip my cap to the Dodgers but look forward to knocking their caps off when the Cardinals come to town. Here we go, Emma! Here WE GO!
I am soo relieved they did not blow it!! I am cautious but hopeful in the upcoming series!
Thank you Jane for rooting for the Dodgers! I can hardly wait for Wednesday! My boys are having a private practice today.
I am sure you are anxiously waiting for the games to start too! I love baseball in the fall!
Bring it on! I think your players will have a hard time scoring with our two lefties. It is really too bad we have Kuroda out though.
We are on a two game winning streak! Let's continue it!!
Congrats to the Boys in Blue finally ending all the suspense.
But you got to admit it…………..going down to the wire like that did add to the ending excitement and the thrill of it all!
But now it is on to bigger business and time for the boys to focus on the mission at hand. Misson"October might be the most importnant three weeks of their lives, and ours.
Rays Renegade
Oh yeah, the victory became sweeeter with all the wait and I hope the champagne got better with all the waiting time! haha! You saw the t-shirt I got! I could not wait to wear it!
Great pics Emma! That one of Andre and his son is just precious! I'm going to the game on Thursday. Don't know where I'll be sitting though. I'll be with my mom, who is one of two that have season seats; they share. There are 2 additional seats. I think my mom will get her usual seats on Wednesday, and the other guy will get the "other" 2 seats, but on Thursday, I think that's reversed. But I know I'll be on the Reserved Level!!! 🙂
Hi Cpompe!
Woohoo! You are coming to the game! Don't forget is at 3:07 so come early so you wont' be stuck in traffic. I am excited and nervous! Let me know where you will be or come upstairs and say Hi
really! Is that like a real mission there or as in October baseball? Afterall, I am glad too that my boys won at home.
Curious to know who you are rooting for in the NL. I know is not the Dodgers so Rockies, Phillies or Cards? Probably Cards so that they can know the Dodgers, right?🙂
Aw man, you guys stole "Misson October" from the Padres! That's kind of funny actually. Congrats on the West…I'm just glad that you guys got to celebrate at home and not at PETCO🙂
You are so lucky to have an october, I have a shirt that says "Indians – AL Central Champs." New post up, 'Albert Belle Flame athon" : )
Congrats on finally winning the division! Let's get the games started!
Emma – congrats!! Love the shirt!! Let's get the playoffs started!
As much as I would've liked the Rockies to take the division, I really didn't see it happening. The Dodgers have been great, although we put up a good fight in that game until de la Rosa was injured. We'll see how the Dodgers hold up against the Cardinals!
My friend and I stayed up top so we could see everything. My other friends left and told me they had some trouble getting to the field level. As for the batteries, I always (well almost always) bring extra batteries, sometimes two sets of extra batteries. I'm always afraid of running out of batteries. Friday and Saturday night, I brought extra batteries and two cameras. One for taking photos and one for videoing the celebration. It's going to take me awhile to get through my photos, but I'll post them in my flickr eventually and put up a few on my blog. A few are already up.
Take care of that shirt. It will always bring you such good memories. I wish I still had something from the last time the Dodgers won the W.S. in 1988. Yeah, it has been a while.
Julia an Ginny,
You two and I already want this started. You guys are being held hostage by the Yankees with the schedule. But really is so many things, in addition to that football game which I have no idea who won since I do not follow "foosball."
Your team sure put a big fight! Kudos to them! When De La Rosa got injured I turned to my brother and told him "I hate to win this way." I hope he is OK. Good luck with the Phillies!
I am going to have to carry extra batteries. I do have rechargable batteries but it does not hurt to carry extras. See I also carry a radio as the game is not complete if I am not listening to it and also keeping score. I'll check your photos. I don't take many, but my friend in the Top Deck takes beautiful pictures.
OK that was weird…I post here and it throws my post into an older post…??? So here it goes again!
EMMA…I am glad ANDRE made the last out…MR. WALK-OFF. The regular season in over…sniff sniff. But the playoffs ar ON! LET'S GO DODGERS! I can not wait for the first game. We have homefield advantage and I hope our boys take advantage. GOOOOO DODGERS….WOOOOOHOOOOO!
That was weird because that post was back when Tommy was having his Birthday 8 posts ago!! Weird!
That was just perfect that Andre ended up catching the last out! Saturday and Sunday, you could feel that it was getting colder in the stadium especially in the Top Deck or like I call it now, the Penthouse!
Rosie, like you, I am so excited about tomorrow's game ! I can't wait! I'll be counting the hours till I leave work!
We can do it!!
We can beat the Cardinals!!!
The Dodger Penthouse is a great name…maybe Dodger should think about using the name for more ticket sales next year…they should give it a Downtown loft feeling to it….mmmmm mmmm I should work in marketing for the Dodgers (ARE THEY HIRING!)…LOL
You should check if they are hiring so you could be at the stadium all the time. I would think Marketing is an all year-round job. The ideas we could give them! Oh! You just reminded me that I had taken a picture of the latest Andre t-shirt they are selling at the stadium! You know the Dodgers will take advantage of the beautiful view from there once they start the renovations there.


text:
Okay, okay, I admit it: I LOVE BLOGS, a lot. There, I've said it.
Hours can disappear because I get sucked into the vortex that is the blogsphere – one blog leading you onto another and so on.
I'm sure you know how it is…
I adore getting immersed into the worlds of Scott, Garance, Rumi, Tavi, Tommy, Bryan etc but there are others out there too!
Here are a few of my favourites – what are yours? Let me know, I'd love to find some new ones.
Matthew Eades is a fashion photographer based in London (and, ahem, he's also my husband).
He does a lot of studio shoots and at the end of a working day he'll get the model to do a sitting for his personal project, a website/blog called MatthewEadesLondon.com.
The focus of the site (and photography) is all about the model; there is no styling (no clothes at all in fact), no jazzy background or complicated set up, just the beauty of the model in her most natural form. Also, there is no text other than the model's first name. It's very pure and clean in aesthetic and sensibility.
Bill is a friend of mine and to put it simply, he is as cool, laid-back and stylish as his blog. He photographs people in a few of their favourite outfits either in their home, or around their neighbourhood (or a combination of the two). If you ever meet Bill the blog makes even more sense, he IS his blog. All the people share a similar aesthetic too, very Brooklyn, NYC.
The title pretty much says it all, but believe me, this is a blog that will have you hooked and howling with laughter. It is sharper than a Louboutin heel and is written by a friend of mine who is keeping herself anonymous for the time being. Read and enjoy…
TV presenter, ridiculously smart and gorgeous to boot. I mean really!
Her blog is fabulous, full of little nuggets of information (did you know that Harmony Korine had made a film about people that like humping trash?), or want the inside scoop on last night's coolest party/exhibition/award ceremony? Bookmark her blog and enjoy
Jackie Dixon


text:
Former town clerk sentenced to two years in prisonJuly 18,2013Staff Report
The former Weybridge town clerk and treasurer who pleaded guilty to embezzling more than $400,000 from the town was sentenced Thursday to serve two years in federal prison.
In a hearing afternoon in U.S. District Court in Rutland, Judge Christina Reiss sentenced Karen Brisson, 50, of Weybridge to two years in prison and three years of released supervision.
She is expected to pay more than $430,000 in restitution to the town of Weybridge and the Vermont League of Cities and Town.
Brisson, who served as town clerk and treasurer for the town for 27 years, stole money from the town between no later than 2006 and continued through November of last year when she resigned. She is expected to report to serve her sentence Sept. 3.MORE IN This Just InPolice: Chase
men also stole
CHELSEA Police say two men involved in a... Full StoryMANAMA, Bahrain Drawing the U.S. Full StoryDANVILLE Police said a Concord man was jailed for violating an abuse prevention order. Full Story
- Most Popular
- Most Emailed


text:
Jake is an important part of the junior high school football team in Madrid, Iowa. he recently had a particularly memorable game.
Iowa football team celebrates special team member
Published On: Nov 07 2013 06:32:00 AM HST
The views expressed are not those of this site, this station or its affiliated companies. By posting your comments you agree to accept our terms of use.blog comments powered by Disqus


text:
How to Style a Buffet Table
Watch as Rach's design buddy Evette Rios styles a buffet table for her next dinner party, the latest Easy Entertaining video from Every Day with Rachael Ray magazine.
-Hey, I'm Evette Ríos, Rachael's design buddy. And I'm about to have some friends over for a little Sunday brunch. And I'm setting up my buffet table right now. And I wanted to show you guys some of the tips that I like to use when I'm setting up a buffet. So if you don't have lots of footed bowls or footed plates or even cake stands, here's an idea. Why not go to your kitchen and pick up some of the stuff that you have in your kitchen to create different levels for all of your goodies. So I've got some pasta boxes. I've got some stock pots and a nice big stack of magazines. So I'm going to take my pots and I'm just going to put them on the ends of my table. I'm going to stick my stack of magazines right here in the center because I want my centerpiece to be nice and tall. And then, I'm going to put my boxes over here along the edge. So, I've got everything pretty much where I want it. And now, it's time for my tablecloth. I'm just going to grab that and I'm just going to sort of spread it out over my table. And then once I've got it spread out, I'm going to kind of squish it around-- around the outside to make sure that there's hills and valleys. That's what we're going for here. Okay, so that seems just about right. I got my hills. I got my valleys. And I have sort of smooth things out. So now, it's time for my centerpiece. And for my centerpiece, I just made it super simply. I took some beans and stack them inside of glasses that I have in my cabinet. And then, I just cut some mums. I love these. They're so vibrant and fun. And I just-- I'm going to place four of them like this. And it's a quick and easy centerpiece. You can make this at the super last minute. I love that. So I'm going to set them just about like that. And now, I can start setting up my main courses. So, I've got the soup which I'm just going to put right back here. And I've got my quiche that I'm going to put front and center. Now, this is a great idea. I pre-cut my quiche. And the reason why I do that is so that when people come, they can just grab a slice and go. And then, I've got my salad which I'm going to put over here. And when I'm organizing my buffet, I like to keep the savory stuff on one side and the sweet stuff on the other so it's like a natural progression from savory to sweet. So, I've got my bread pudding that I'll put right back here. And then, I'm going to set out a plate for cookies. And so, I've got both store-bought cookies and I've got some homemade ones. But when you've got different sorts of desserts or different sorts of foods that are kind of coming together like, let's say, you got a potluck and like eight people brought different kinds of cookies, rather than setting them up in different dishes, put them all together in one place. That way, people can kind of try them and sample them. It makes it a lot more appetizing. There we go. That's good. Okay. And now, I'm going to put some little nibbles around the table like bread and olives and cheese. I like this because it gets people mingling and moving around the table a little bit more. So instead of putting all the olives or all the bread in one place, sprinkle it around. It's more fun that way. So I've got some bread that I've already cut that I'm going to put right over here. And then, I've got some longer baguettes that I'm going to put over here. And so now, I wanted to put my olives out but instead of just putting them out in a normal bowl or plate, I'm going to make my own footed bowls instantly just like that. So I've got these cool little vintage plates and bowls that I have. These are, believe it or not, the last one of the set because I break everything in my kitchen. But so, I've got my bowls like this. And I'm going to take a little candle holder. And if you don't have candle holders, you can use wine glasses or espresso cups, whatever you have and you just want to make sure that it has a flat top and you stick your bowl right on there like that. Tadaa! How cool is that? A really neat footed bowl. It's super easy. And if you want to make this permanent, you just take a little bit of glue and stick it around. Pop them together and there you go. So I'm going to do that on the other side too with my nice vintage plate. And I'll put some olives in each one. It's just like a little platform form. It makes them look really tasty. And now, it's time to set up the cheese. There you go. One of the things that I like to do is I like to put a plate at the beginning of the buffet table so people just grab a plate and serve themselves. And then, the napkins and the silverware at the end of the table so they don't have to grab all the stuff and walk their way through the buffet. So here is my stack of plates that I'm going to put right up here. And I've got my napkins. And what I love to do is I love to roll them up in little rolls like this, so you've got all your silverware in there rolled up and ready to go. And now, to kind of make it look a little bit more festive, one of the things that I like to do is I like to get a string of Christmas lights and I just kind of take these and just sort of snake it through. And there's no rhyme or reason to this. You can just have fun with it. So now, it's time to add some greenery because I like to cover up the lights and it adds a little uniformity to the table. You want to make sure that you tell people: if it's not edible stuff, don't eat it. Now, I like to mix in broad leaves and then some more sort of spiky ones. You can just kind of mix them in together. And I also kind of lay them on top of one another like this to cover up the stems. And so now to dress up our quiche, I'm just going to take some of these leaves, cut them and sort of make a little laurel wreath around our quiche. And I've got one more thing that I want to do before I turn on my lights and that is to put name cards on all of my dishes. And I what I use is I use a cereal box and I just kind of cut it out a little rectangle with my pinking shears and then folded it in half. And then, with a piece of white paper, just use scrap paper so you don't have to spend money on new paper and just write down what your foods are. So I've got my bread pudding that lives here. I've got assorted cookies which contain nuts. This is a great idea if you have people coming that are going to have any food allergies or maybe food preferences. And so now, it's show time. Let's turn on these lights. Here we go. Tadaa! That looks so cool. My guests are about to arrive and I hope you guys have learned some tips that you can use at home. I'm Evette Ríos and thanks for watching.


text:
Musical U Sr. Presents Godspell Jr.
Musical U Sr. Program, a musical theater workshop for teens grade 7-12, presents Godspell Jr. at Immaculate Heart Central High School Auditorium on July 26 and 27, 2013 at 7:00 pm. Students will perform this musical which relates the teachings of Jesus through parables and memorable songs such as "Prepare Ye the Way of the Lord," "Day By Day," and "We Beseech Thee." Tickets to the show are $10 each, and will be available at the door, so come join us! Registrations for this workshop are being taken now. We hold auditions July 6 and 7, but everyone gets a part -- auditions are just used to determine which parts people will play. At Musical U, we believe in keeping the kids on stage as much as possible! Learn to sing, dance, and act - all at the same time! Best yet, NO PREVIOUS EXPERIENCE NECESSARY! We have been producing quality family entertainment for over ten years, and are always looking for new people to come join us. Visit our website for forms and more information: www.musicalu.org Musical U Jr. Program, kids grade K-8, will be performing Disney's Mulan Jr. August 23 and 24. Registrations for that program are also being taken now. What a great way to introduce your children to musical theater! See the website for more information.


text:
I'm not sure whether this is better here or in the solids board, so I guess I'll double post. My little man is 17 months old. He is really resistant to table-food type solids. He eats jarred baby food and also home pureed sweet potatoes and apples. Within the last two months he has decided to accept stage 3 foods (labled for 9months, the ones with tiny pasta pieces or discernible oatmeal flakes) He loves cheese, crackers, and waffles. He eats lots of whole-fat yogurt. He has no sign of any allergies (no exposure to shellfish)
I'm not worried about calories or nutrition, but it would be nice to have him eat the things we eat. At daycare he ate a bit of chicken and rice last week (he goes once a week) but he won't do that at home. He is not interested eating the food on our plates. He wants to feed it to us but does not want it anywhere near his mouth. We've tried pureeing our food, and at least with veggie lasagna it was a no go.
Our pediatrician suggested that he might have a physical problem with his swallowing mechanism. My husband, my mom, and I think it's more about preferences than physiology. Any ideas on getting the little man to eat finger foods and food we're eating?


text:
See everything on sale inside our Latest Sale Flyer.
Shop Our Sale Flyer
Browse your favorite woodworking catalog!
Shop Our Catalog
Look up product instructions, videos and articles about your favorite tools using our Learning Center.
Join us on your favorite social network! Share your projects and learn from other woodworkers.
Please Note: This item can only be shipped ground to the 48 contiguous states. Some
items cannot be shipped via air due to being flammable, magnetic, contains batteries,
hazardous fumes or where contents are under pressure. Please use a physical address
not a PO Box during checkout.
(No reviews)
Product Information:
Shipping / Billing Info:
This product ships direct from the manufacturer:
You may return new, unopened items sold by Laguna Tools within 30 days of delivery for a full refund. Items should be returned in their original product packaging. Items that have been opened and then returned are subject to inspection and the refund amount will be subject to adjustment. Shipping costs will be paid for by customer unless the order was an error on the end of Laguna Tools. When an (RMA) return merchandise authorization number is issued the customer has 30 days to return the part or that number is cancelled and the return will not be accepted. No merchandise shall be returned without an RMA number.
Once the return is received a refund will be issued within 5 business days. The refund may take a few more days to post on to the account depending on the credit company. If item was paid for through cash or check refund will be paid by check. All returns are subject to a 25% restocking fee.
Please contact Laguna Tools' Customer Service at 800-234-1976
New woodworking machines sold by Laguna Tools carry a one-year warranty effective from the date of shipping. Laguna bandsaw blades' welds are backed by their 1-yr manufacturer's warranty. Machines sold through dealers must be registered with Laguna Tools within 30 days of purchase to be covered by this warranty. Laguna Tools guarantees all new machine sold to be free of manufacturers' defective workmanship, parts and materials. Laguna Tools will repair or replace, without charge, any parts determined by Laguna Tools, Inc. to be a manufacturer's defect. They require that the defective item/part be returned to Laguna Tools with the complaint. In the event the item/part is determined to be damaged due to lack of maintenance, cleaning or misuse/abuse, the customer will be responsible for the cost to replace the item/part, plus all related shipping charges.
For warranty repair information, call 1-800-332-4094.
©2016 by Woodcraft Supply LLC


text:
Welcome to the Tasmanian School of Business and Economics.
The Tasmanian School of Business and Economics (TSBE), formerly known as the Faculty of Business, is committed to extending the boundaries of business education. From our professional and teaching staff to our teaching environments, our top-class researchers and our relevant and hands-on ties with industry and the community, we believe in creating thinkers and leaders who are highly valued in their chosen fields.
We also have a global presence, with over a dozen countries represented by our staff and students, including China, Hong Kong, Germany, India, Italy, Kuwait, Malaysia, Nepal, Singapore, Switzerland, Thailand, Vietnam, and the United Kingdom, and an international education partnership with Shanghai Ocean University.
The Tasmanian School of Business and Economics is proud of its heritage, with Economics being taught here since 1914, Accounting and Corporate Governance since 1919 and Management making a great contribution since 1992. The School is also associated with the Australian Innovation Research Centre, which aims to be an international driver of innovation policy research, and the Australian Institute of Health Service Management, based in Sydney, which conducts teaching and research in this important and growing field. Through research and teaching collaborations to our business education programs in colleges and high schools, the TSBE is deeply embedded in the community, and these ties inform and enrich all of our activities.
Please contact us if you'd like to know more about studying at TSBE or working with us.
Find a supervisor or expert


text:
Your baby gained 2 pounds in 2 months, so roughly 0.25 pounds per week, or 4 ounces. I thought the "normal" range was 0.5 to 1 ounce per day. Your baby has been gaining at a rate of 0.6 ounces per day.
I'm not a doctor or an LC, etc. But it does not sound to me like you have anything to worry about. I would do a weigh-feed-weigh, just to make sure.
The other thing I might do in your shoes is get a referral for a PEDIATRIC allergist and a GI doctor. Food allergies can be some pretty scary things and it sounds like your baby definitely has them.


text:
Deutsche Bank reshuffle puts tech in focus
Deutsche Bank has moved its co-head of fixed income and currencies to a new role as part of a round of changes to its powerhouse debt sales and trading division.
The German bank has appointed Wayne Felson, previously co-head of FIC with Zar Amrolia, to a newly-created role focusing on technology, leverage, capital and risk as a member of the corporate banking and securities and markets executive committees.
Rich Herman, the previous head of the institutional client group, which houses the bank's giant sales force, will take over as co-head of FIC and move to New York.
Herman will not be replaced as head of ICG. The equities salesforce will now report to Garth Ritchie, who heads equities; the debt sales team will continue to report to John Pipilis, who will become a member of the markets executive committee.
The changes come as Deutsche presses ahead with its efforts to put electronic trading at the heart of its business model. The bank has set a target to increase the over-the-counter flow business from institutional clients being directed towards electronic platforms to two thirds, up from one third currently.
To that end, the bank has been beefing up its electronic trading business with big name hires last month. Michelle Neal, who has previously featured on Financial News' list of the 100 most influential woman in European finance, has joined as global head of listed derivatives in the markets clearing and FIC market structure business. Martin Zinkin, a former BNP Paribas executive, has joined as co-head of electronic trading in the markets electronic trading group, meanwhile.
Speaking to Financial News last summer, Colin Fan, co-head of CB&S with Rob Rankin, said the bank's creation of a cross-product e-trading business and the forging of a single fixed-income sales and trading unit had enabled staff to become more client-centric.
"The process will take time, but some of the operational changes we have initiated, for example on the technology side in trading, have helped accelerate things by freeing up people's time and arming them with the tools to become a client adviser," Fan said.
-- write to email@example.com or follow on Twitter at @bmturner


text:
Related Reading
Python Programming On Win32
An excerpt from Chapter 20 of O'Reilly's book Python Programming on Win32.
Another GUI toolkit available for Python is called
wxPython. The current incarnation is fairly new to the Python scene and is rapidly gaining popularity amongst Python developers.
wxPython is a Python extension module that encapsulates the wxWindows C++ class library.
wxPython is a cross-platform GUI framework for Python that is quite mature on the Windows platform. It exposes the popular
wxWindows C++ framework Python to provide an attractive alternative for GUI development.
wxWindows is a free C++ framework designed to make cross-platform programming child's play. Well, almost.
wxWindows 2.0 supports Windows 3.1/95/98/NT, Unix with GTK/Motif/Lesstif, with a Mac version underway. Other ports are under consideration.
wxWindows is a set of libraries that allows C++ applications to compile and run on several different types of computers, with minimal source-code changes. There's one library per supported GUI (such as Motif, or Windows). As well as providing a common API for GUI functionality, it provides functionality for accessing some commonly used operating-system facilities, such as copying or deleting files.
wxWindows is a framework in the sense that it provides a lot of built-in functionality, which the application can use or replace as required, thus saving a great deal of coding effort. Basic data structures such as strings, linked lists, and hash tables are also supplied.
Native versions of controls, common dialogs, and other window types are used on platforms that support them. For other platforms, suitable alternatives are created using
wxWindows itself. For example, on Win32 platforms the native list control is used, but on GTK, a generic list control with similar capabilities was created for use in the
wxWindows class library.
Experienced Windows programmers will feel right at home with the
wxWindows object model. Many of the classes and concepts will be familiar. For example, the Multiple Document Interface, drawing on Device Contexts with GDI objects such as brushes, pens, and so on.
wxPython is a Python extension module that provides a set of bindings from the
wxWindows library to the Python language. In other words, the extension module allows Python programers to create instances of
wxWindows classes and to invoke methods of those classes.
More from this Chapter:
wxPython extension module attempts to mirror the class hierarchy of
wxWindows as closely as possible. This means that there is a
wxFrame class in
wxPython that looks, smells, tastes, and acts almost the same as the
wxFrame class in the C++ version.
wxPython is close enough to the C++ version that the majority of the
wxPython documentation is actually annotations to the C++ documentation that describe the places where
wxPython is different. There is also a series of sample programs included, and a series of documentation pages that assist the programmer in getting started with
The latest version of
wxPython can always be found at http://alldunn.com/wxPython/. From this site you can download a self-installer for Win32 systems that includes a prebuilt extension module, documentation in HTML help format, and a set of demos.
Also available from this site is a Linux RPM,
wxPython sources, documentation in raw HTML, and pointers to other sites, mail lists, the
wxPython FAQ, and so forth.
If you want to build
wxPython from sources yourself, you also need the
wxWindows sources, available from http://www.wxwindows.org/.
The remainder of this chapter gives a basic introduction to using
wxPython, starting with a simple example teaching the basic structure of a
wxPython application. We then build a more involved sample that touches on some of the more advanced features of the toolkit, using classes from the Doubletalk financial modeler you're already familiar with.
We've always found that the best way to learn is by doing and then experimenting and tweaking with what's been done. So download and install
wxPython, fire up your favorite text editor[1] and get ready to play along as you read the next few sections.
Familiarize yourself with this little
wxPython program, and refer back to it as you read through the explanations that follow:
from wxPython.wx import *
class MyApp(wxApp):
def OnInit(self):
frame = wxFrame(NULL, -1, "Hello from wxPython")
return true
app = MyApp(0)
When you run this code, you should see a Window appear similar to Figure 20-6.
The first thing to do is import the entire
wxPython library with the
* statement. This is common practice for
wxPython programs, but you can obviously perform more restrictive imports if you prefer.
wxPython application needs to derive a class from
wxApp and provide an
OnInit method for it. The framework calls this method as part of its initialization sequence, and the usual purpose of
OnInit is to create the windows and essentials necessary for the program to begin operation. In the sample you created a frame with no parent, with a title of "Hello from
wxPython" and then showed it. We could also have specified a position and size for the frame in its constructor, but since we didn't, defaults are used. The last two lines of the
OnInit method will probably be the same for all applications;
SetTopWindow method informs
wxWindows that this frame is one of the main frames (in this case the only one) for the application, and you return
true to indicate success. When all top-level windows have been closed, the application terminates.
The final two lines of the script again will probably be the same for all your
wxPython applications. You create an instance of the application class and call its
MainLoop method.
MainLoop is the heart of the application: it's where events are processed and dispatched to the various windows, and it returns when the final window is closed. Fortunately,
wxWindows insulates you from the differences in event processing in the various GUI toolkits.
Most of the time you will want to customize the main frame of the application, and so using the stock
wxFrame isn't sufficient. As you might expect, you can derive your own class from
wxFrame to begin customization. This next example builds on the last by defining a frame class and creating an instance in the application's
OnInit method. Notice that except for the name of the class created in
OnInit, the rest of the
MyApp code is identical to the previous example. This code is displayed in Figure 20-7.
from wxPython.wx import *
class MyFrame(wxFrame):
def _ _init_ _(self, parent, ID, title):
wxFrame._ _init_ _(self, parent, ID, title,
wxDefaultPosition, wxSize(200, 150))
self.SetStatusText("This is the statusbar")
menu = wxMenu()
menu.Append(ID_ABOUT, "&About",
"More information about this program")
menu.Append(ID_EXIT, "E&xit", "Terminate the program")
menuBar = wxMenuBar()
menuBar.Append(menu, "&File");
class MyApp(wxApp):
def OnInit(self):
frame = MyFrame(NULL, -1, "Hello from wxPython")
return true
app = MyApp(0)
This example shows some of the built-in capabilities of the
wxFrame class. For example, creating a status bar for the frame is as simple as calling a single method. The frame itself automatically manages its placement, size, and drawing. On the other hand, if you want to customize the status bar, create an instance of your own
wxStatusBar-derived class and attach it to the frame.
Creating a simple menu bar and a drop-down menu is also demonstrated in this example. The full range of expected menu capabilities is supported: cascading submenus, checkable items, popup menus, etc.; all you have to do is create a menu object and append menu items to it. The items can be text as shown here, or other menus. With each item you can optionally specify some short help text, as we have done, which are shown in the status bar automatically when the menu item is selected.
The one thing that the last sample doesn't do is show how to make the menus actually do something. If you run the sample and select Exit from the menu, nothing happens. The next sample takes care of that little problem.
To process events in
wxPython, any method (or standalone function for that matter) can be attached to any event using a helper function from the toolkit.
wxPython also provides a
wxEvent class and a whole bunch of derived classes for containing the details of the event. Each time a method is invoked due to an event, an object derived from
wxEvent is sent as a parameter, the actual type of the event object depends on the type of the event;
wxSizeEvent for when the window changes size,
wxCommandEvent for menu selections and button clicks,
wxMouseEvent for (you guessed it) mouse events, and so forth.
To solve our little problem with the last sample, all you have to do is add two lines to the
MyFrame constructor and add some methods to handle the events. We'll also demonstrate one of the common dialogs, the
wxMessageDialog. Here's the code, with the new parts in bold, and the running code shown in Figure 20-8:
from wxPython.wx import *
class MyFrame(wxFrame):
def _ _init_ _(self, parent, ID, title):
wxFrame._ _init_ _(self, parent, ID, title,
wxDefaultPosition, wxSize(200, 150))
self.SetStatusText("This is the statusbar")
menu = wxMenu()
menu.Append(ID_ABOUT, "&About",
"More information about this program")
menu.Append(ID_EXIT, "E&xit", "Terminate the program")
menuBar = wxMenuBar()
menuBar.Append(menu, "&File");
EVT_MENU(self, ID_ABOUT, self.OnAbout)
EVT_MENU(self, ID_EXIT, self.TimeToQuit)
def OnAbout(self, event):
dlg = wxMessageDialog(self, "This sample program shows off\n"
"frames, menus, statusbars, and this\n"
"message dialog.",
"About Me", wxOK | wxICON_INFORMATION)
def TimeToQuit(self, event):
class MyApp(wxApp):
def OnInit(self):
frame = MyFrame(NULL, -1, "Hello from wxPython")
return true
app = MyApp(0)
EVT_MENU function called here is one of the helper functions for attaching events to methods. Sometimes it helps to understand what is happening if you translate the function call to English. The first one says, "For any menu item selection event sent to the window
self with an ID of
ID_ABOUT, invoke the method
There are many of these
EVT_* helper functions, all of which correspond to a specific type of event, or events. Some popular ones are listed in Table 20-4. See the
wxPython documentation for details.
Event Function
Event Description
Sent to a window when its size has changed, either interactively by the user or programmatically.
Sent to a window when it has been moved, either interactively by the user or programmatically.
Sent to a frame when it has been requested to close. Unless the close is being forced, it can be canceled by calling
This event is sent whenever a portion of the window needs to be redrawn.
Sent for each nonmodifier (Shift key, etc.) keystroke when the window has the focus.
This event is sent periodically when the system isn't processing other events.
The left mouse button has been pressed down.
The left mouse button has been let up.
The left mouse button has been double-clicked.
The mouse is in motion.
A scrollbar has been manipulated. This one is actually a collection of events, which can be captured individually if desired.
A button has been clicked.
A menu item has been selected.
Okay, now let's build something that's actually useful and learn more about the
wxPython framework along the way. As has been shown with the other GUI toolkits, we'll build a small application around the Doubletalk class library that allows browsing and editing of transactions.
We're going to implement a Multiple Document Interface, where the child frames are different views of the transactional data, rather than separate "documents." Just as with previous samples, the first thing to do is create an application class and have it create a main frame in its
OnInit method:
class DoubleTalkBrowserApp(wxApp):
def OnInit(self):
frame = MainFrame(NULL)
return true
app = DoubleTalkBrowserApp(0)
Since we are using MDI, there is a special class to use for the frame's base class. Here is the code for the initialization method of the main application frame:
class MainFrame(wxMDIParentFrame):
title = "Doubletalk Browser - wxPython Edition"
def _ _init_ _(self, parent):
wxMDIParentFrame._ _init_ _(self, parent, -1, self.title)
self.bookset = None
self.views = []
if wxPlatform == '_ _WXMSW_ _':
self.icon = wxIcon('chart7.ico', wxBITMAP_TYPE_ICO)
# create a statusbar that shows the time and date on the right
sb = self.CreateStatusBar(2)
sb.SetStatusWidths([-1, 150])
self.timer = wxPyTimer(self.Notify)
menu = self.MakeMenu(false)
menu.EnableTop(1, false)
EVT_MENU(self, ID_OPEN, self.OnMenuOpen)
EVT_MENU(self, ID_CLOSE, self.OnMenuClose)
EVT_MENU(self, ID_SAVE, self.OnMenuSave)
EVT_MENU(self, ID_SAVEAS,self.OnMenuSaveAs)
EVT_MENU(self, ID_EXIT, self.OnMenuExit)
EVT_MENU(self, ID_ABOUT, self.OnMenuAbout)
EVT_MENU(self, ID_ADD, self.OnAddTrans)
EVT_MENU(self, ID_JRNL, self.OnViewJournal)
EVT_MENU(self, ID_DTAIL, self.OnViewDetail)
EVT_CLOSE(self, self.OnCloseWindow)
Figure 20-9 shows the state of the application so far.
Obviously, we're not showing all the code yet, but we'll get to it all eventually as we go through piece by piece.
Notice the use of
wxMDIParentFrame as the base class of
MainFrame. By using this class you automatically get everything needed to implement MDI for the application without having to worry about what's really happening behind the scenes. The
wxMDIParentFrame class has the same interface as the
wxFrame class, with only a few additional methods. Often changing a single document interface program to a MDI program is as easy as changing the base classes the application's classes are derived from. There is a corresponding
wxMDIChildFrame to be used for the document windows, as we'll see later. If you ever need to have access to the client area (or the background area) of the MDI parent, you can use the
wxMDIClientWindow class. You might use this for placing a background image behind all the child windows.
The next thing the previous code does is create an icon and associate it with the frame. Normally Windows applications load items such as icons from a resource file that is linked with the executable. Since
wxPython programs have no binary executable file, you create the icon by specifying the full path to a .ico file. Assigning the icon to the frame only requires calling the frame's
SetIcon method.
You may have noticed from Figure 20-9 that the status bar has two sections, with the date and time displayed in the second one. The next bit of code in the initialization method handles that functionality. The frame's
CreateStatusBar method takes an optional parameter specifying the number of sections to create, and
SetStatusWidths can be given a list of integers to specify how many pixels to reserve for each section. The -1 means that the first section should take all the remaining space.
In order to update the date and time, you create a
wxPyTimer object. There are two types of timer classes in
wxPython. The first is the
wxPyTimer used here, which accepts a function or method to use as a callback. The other is the
wxTimer class, which is intended to be derived from and will call a required method in the derived class when the timer expires. In the example you specify that when the timer expires, the
Notify method should be called. Then start the timer, telling it to expire every 1000 milliseconds (i.e., every second). Here is the code for the
Notify method:
# Time-out handler
def Notify(self):
t = time.localtime(time.time())
st = time.strftime(" %d-%b-%Y %I:%M:%S", t)
self.SetStatusText(st, 1)
You first use Python's
time module to get the current time and format it in to a nice, human-readable formatted string. Then by calling the frame's
SetStatus-Text method, you can put that string into the status bar, in this case in slot 1.
As you can see in the next bit of code, we have moved the building of the menu to a separate method. This is mainly for two reasons. The first is to help reduce clutter in the
_ _init_ _ method and better organize the functionality of the class. The second reason has to do with MDI. As with all MDI applications, each child frame can have its own menu bar, automatically updated as the frame is selected.
The approach taken by our sample is to either add or remove a single item from the
BookSet menu based on whether a view can select transactions for editing. Here's the code for the
MakeMenu method. Notice how the parameter controls whether the Edit Transaction item is added to the menu. It might have made better sense to just enable or disable this item as needed, but then you wouldn't be able to see how
wxPython changes the menus automatically when the active window changes. Also notice that you don't create the Window menu. The
wxMDIParentFrame takes care of that for you:
def MakeMenu(self, withEdit):
fmenu = wxMenu()
fmenu.Append(ID_OPEN, "&Open BookSet", "Open a BookSet file")
fmenu.Append(ID_CLOSE, "&Close BookSet",
"Close the current BookSet")
fmenu.Append(ID_SAVE, "&Save", "Save the current BookSet")
fmenu.Append(ID_SAVEAS, "Save &As", "Save the current BookSet")
fmenu.Append(ID_EXIT, "E&xit", "Terminate the program")
dtmenu = wxMenu()
dtmenu.Append(ID_ADD, "&Add Transaction",
"Add a new transaction")
if withEdit:
dtmenu.Append(ID_EDIT, "&Edit Transaction",
"Edit selected transaction in current view")
dtmenu.Append(ID_JRNL, "&Journal view",
"Open or raise the journal view")
dtmenu.Append(ID_DTAIL,"&Detail view",
"Open or raise the detail view")
hmenu = wxMenu()
hmenu.Append(ID_ABOUT, "&About",
"More information about this program")
main = wxMenuBar()
main.Append(fmenu, "&File")
main.Append(hmenu, "&Help")
return main
If you skip back to the
_ _init_ _ method, notice that after you create the menu and attach it to the window, the
EnableTop method of the menubar is called. This is how to disable the entire
BookSet submenu. (Since there is no
BookSet file open, you can't really do anything with it yet.) There is also an
Enable method that allows you to enable or disable individual menu items by ID.
The last bit of the
_ _init_ _ method attaches event handlers to the various menu items. We'll be going through them one by one as we explore the functionality behind those options. But first, here are some of the simpler ones:
def OnMenuExit(self, event):
def OnCloseWindow(self, event):
del self.timer
del self.icon
def OnMenuAbout(self, event):
dlg = wxMessageDialog(self,
"This program uses the doubletalk package to\n"
"demonstrate the wxPython toolkit.\n\n"
"by Robin Dunn",
"About", wxOK | wxICON_INFORMATION)
The user selects Exit from the File menu, then the
OnMenuExit method is called, which asks the window to close itself. Whenever the window wants to close, whether it's because its
Close method was called or because the user clicks on the Close button in the titlebar, the
OnCloseWindow method is called. If you want to prompt the user with an "Are you sure you want to exit?" type of message, do it here. If he decides not to quit, just call the method
Most programs will want to have a fancier About box than the
wxMessageDialog provides, but for our purposes here it works out just fine. Don't forget to call the dialog's
Destroy method, or you may leak memory.
Before doing anything with a
BookSet, you have to have one opened. For this, use the common dialog
wxFileDialog. This is the same File Open dialog you see in all your other Windows applications, all wrapped in a nice
wxPython-compatible class interface.
Here's the event handler that catches the File Open menu event, and Figure 20-10 shows the dialog in action:
def OnMenuOpen(self, event):
# This should be checking if another is already open,
# but is left as an exercise for the reader...
dlg = wxFileDialog(self)
if dlg.ShowModal() == wxID_OK:
self.path = dlg.GetPath()
self.SetTitle(self.title + ' - ' + self.path)
self.bookset = BookSet()
self.GetMenuBar().EnableTop(1, true)
win = JournalView(self, self.bookset, ID_EDIT)
self.views.append((win, ID_JRNL))
Start off by creating the file dialog and tell it how to behave. Next show the dialog and give the user a chance to select a
BookSet file. Notice that this time you're checking the return value of the
ShowModal method. This is how the dialog says what the result was. By default, dialogs understand the
wxID_OK and
wxID_CANCEL IDs assigned to buttons in the dialog and do the right thing when they are clicked. For dialogs you create, you can also specify other values to return if you wish.
The first thing to do after a successful completion of the file dialog is ask the dialog what the selected pathname was, and then use this to modify the frame's title and to open a
BookSet file.
Take a look at the next line. It reenables the
BookSet menu since there is now a file open. It's really two statements in one and is equivalent to these two lines:
menu = self.GetMenuBar()
menu.EnableTop(1, true)
Since it makes sense to actually let the user see something when they ask to open a file, you should create and show one of the views in the last bits of the
OnMenuOpen handler above. We'll take a look at that next.
The Journal view consists of a
wxListCtrl with a single-line summary for each transaction. It's placed inside a
wxMDIChildFrame and since it's the only thing in the frame, don't worry about setting or maintaining the size, the frame does it automatically. (Unfortunately, since some platforms send the first resize event at different times, sometimes the window shows up without its child sized properly.) Here's a simple workaround:
class JournalView(wxMDIChildFrame):
def _ _init_ _(self, parent, bookset, editID):
wxMDIChildFrame._ _init_ _(self, parent, -1, "")
self.bookset = bookset
self.parent = parent
tID = wxNewId()
self.lc = wxListCtrl(self, tID, wxDefaultPosition,
wxDefaultSize, wxLC_REPORT)
## Forces a resize event to get around a minor bug...
self.lc.InsertColumn(0, "Date")
self.lc.InsertColumn(1, "Comment")
self.lc.InsertColumn(2, "Amount")
self.currentItem = 0
EVT_LIST_ITEM_SELECTED(self, tID, self.OnItemSelected)
EVT_LEFT_DCLICK(self.lc, self.OnDoubleClick)
menu = parent.MakeMenu(true)
EVT_MENU(self, editID, self.OnEdit)
EVT_CLOSE(self, self.OnCloseWindow)
Figure 20-11 shows the application is progressing nicely and starting to look like a serious Windows application.
wxListCtrl has many personalities, but they should all be familiar to you. Underneath its
wxPython wrappers, it's the same control used in Windows Explorer in the right side panel. All the same options are available: large icons, small icons, list mode, and the report mode used here. You define the columns with their headers and then set some events for the list control. You want to be able to edit the transactions when they are double-clicked, so why are both event handlers needed? The list control sends an event when an item is selected, but it doesn't keep track of double-clicks. The base
wxWindow class, on the other hand, reports double-clicks, but it knows nothing about the list control. So by catching both events you can easily implement the functionality you need. Here is the code for the event handlers:
def OnItemSelected(self, event):
self.currentItem = event.m_itemIndex
def OnDoubleClick(self, event):
After creating and setting up the list control, you create a menubar for this frame. Here you call the menu-making method in the parent, asking it to add the Edit Transaction menu item.
The last thing the
_ _init_ _ method does is call a method to fill the list control from the
BookSet. We've split this into a separate method so it can be called independently whenever the
BookSet data changes. Here's the
UpdateView method:
def UpdateView(self):
for x in range(len(self.bookset)):
trans = self.bookset[x]
self.lc.InsertStringItem(x, trans.getDateString())
self.lc.SetStringItem(x, 1, trans.comment)
self.lc.SetStringItem(x, 2, str(trans.magnitude()))
self.lc.SetColumnWidth(0, wxLIST_AUTOSIZE)
self.lc.SetColumnWidth(1, wxLIST_AUTOSIZE)
self.lc.SetColumnWidth(2, wxLIST_AUTOSIZE)
self.SetTitle("Journal view - %d transactions" %
Putting data in a list control is fairly easy; just insert each item. For the report mode, you insert an item for the first column and then set values for the remaining columns. For each column in the example, just fetch some data from the transaction and send it to the list control. If you were using icons or combination of icons and text, there are different methods to handle that.
Now that there's data in the list control, you should resize the columns. You can either specify actual pixel widths or have the list auto-size the columns based on the widths of the data.
The last thing the
JournalView class needs to do is to enable the editing of the transactions. We saw previously that when an item is double-clicked, a method named
OnEdit is invoked. Here it is:
def OnEdit(self, *event):
if self.currentItem:
trans = self.bookset[self.currentItem]
dlg = EditTransDlg(self, trans,
if dlg.ShowModal() == wxID_OK:
trans = dlg.GetTrans()
self.bookset.edit(self.currentItem, trans)
This looks like what we did with the file dialog in the main frame, and indeed you will find yourself using this pattern quite often when using dialogs. The one item to notice here is the call to
UpdateViews() in the parent window. This is how to manage keeping all the views of the
BookSet up to date. Whenever a transaction is updated, this method is called and then loops through all open views, telling the views to update themselves with their
UpdateView() method.
wxPythonincludes a number of powerful techniques for controlling the layout of your windows and controls. There are several alternative mechanisms provided and potentially several ways to accomplish the same thing. This allows the programmer to use whichever mechanism works best in a particular situation or whichever they are most comfortable with.
- Constraints
- There is a class called
wxLayoutConstraintsthat allows the specification of a window's position and size in relationship to its siblings and its parent. Each
wxLayoutContraintsobject is composed of eight
wxIndividualLayoutConstraintobjects, which define different sorts of relationships, such as which window is above this window, what is the relative width of this window, etc. You usually have to specify four of the eight individual constraints in order for the window to be fully constrained. For example, this button will be positioned in the center of its parent and will always be 50% of the parent's width:
b = wxButton(self.panelA, 100, ' Panel A `)
lc = wxLayoutConstraints()
lc.centreX.SameAs (self.panelA, wxCentreX)
lc.centreY.SameAs (self.panelA, wxCentreY)
lc.height.AsIs ()
lc.width.PercentOf (self.panelA, wxWidth, 50)
- Layout algorithm
- The class named
wxLayoutAlgorithmimplements layout of subwindows in MDI or SDI frames. It sends a
wxCalculateLayoutEventto children of the frame, asking them for information about their size. Because the event system is used this technique can be applied to any window, even those that aren't necessarily aware of the layout classes. However, you may wish to use
wxSashLayoutWindowfor your subwindows since this class provides handlers for the required events and accessors to specify the desired size of the window. The sash behavior in the base class can be used, optionally, to make the windows user-resizable.
wxLayoutAlgorithmis typically used in IDE style of applications, where there are several resizable windows in addition to the MDI client window or other primary editing window. Resizable windows might include toolbars, a project window, and a window for displaying error and warning messages.
- Sizers
- In an effort to simplify the programming of simple layouts, a family of
wxSizerclasses has been added to the
wxPythonlibrary. These are classes that are implemented in pure Python instead of wrapping C++ code from
wxWindows. They are somewhat reminiscent of the layout managers from Java in that you select the type of sizer you want and then add windows or other sizers to it, and they all follow the same rules for layout. For example, this code fragment creates five buttons that are laid out horizontally in a box, and the last button is allowed to stretch to fill the remaining space allocated to the box:
box = wxBoxSizer(wxHORIZONTAL)
box.Add(wxButton(win, 1010, "one"), 0)
box.Add(wxButton(win, 1010, "two"), 0)
box.Add(wxButton(win, 1010, "three"), 0)
box.Add(wxButton(win, 1010, "four"), 0)
box.Add(wxButton(win, 1010, "five"), 1)
- Resources
- The
wxWindowslibrary has a simple dialog editor available that can assist with the layout of controls on a dialog and generates a portable cross-platform resource file. This file can be loaded into a program at runtime and transformed on the fly into a window with the specified controls on it. The only downfall with this approach is that you don't have the opportunity to subclass the windows that are generated, but if you can do everything you need with existing control types and event handlers, it should work out great. Eventually, there will be a
wxPython-specific application builder tool that will generate either a resource type of file or actual Python source code for you.
- Brute force
- Finally, there is the brute-force mechanism of specifying the exact position of every component programmatically. Sometimes the layout needs of a window don't fit with any of the sizers or don't warrant the complexity of the constraints or the layout algorithm. For these situations, you can fall back on doing it "by hand," but you probably don't want to attempt it for anything much more complex than the Edit Transaction dialog.
The next step is to build a dialog to edit a transaction. As you've seen, the transaction object is composed of a date, a comment, and a variable number of transaction lines each of which has an account name and an amount. We know that all the lines should add up to zero and that the date should be a valid date. In addition to editing the date and comment, you need to be able to add, edit, and delete lines. Figure 20-12 shows one possible layout for this dialog and the one used for this example.
Since there's quite a bit going on here, let's go through the initialization of this class step by step. Here's the first bit:
class EditTransDlg(wxDialog):
def _ _init_ _(self, parent, trans, accountList):
wxDialog._ _init_ _(self, parent, -1, "")
self.item = -1
if trans:
self.trans = copy.deepcopy(trans)
self.SetTitle("Edit Transaction")
self.trans = Transaction()
self.SetTitle("Add Transaction")
This is fairly simple stuff. Just invoke the parent class's
_ _init_ _ method, do some initialization, and determine if you're editing an existing transaction or creating a new one. If editing an existing transaction, use the Python copy module to make a copy of the object. You do this because you will be editing the transaction in-place and don't want to have any partially edited transactions stuck in the
BookSet. If the dialog is being used to add a new transaction, create one, and then fix its date by truncating the time from it. The default date in the transaction includes the current time, but this dialog is equipped to deal only with the date portion.
If you review the sidebar "wxPython Window Layout," you'll see a number of choices available, but we have chosen to use the brute-force mechanism for the Edit Transaction dialog:
# Create some controls
wxStaticText(self, -1, "Date:", wxDLG_PNT(self, 5,5))
self.date = wxTextCtrl(self, ID_DATE, "",
wxDLG_PNT(self, 35,5), wxDLG_SZE(self, 50,-1))
wxStaticText(self, -1, "Comment:", wxDLG_PNT(self, 5,21))
self.comment = wxTextCtrl(self, ID_COMMENT, "",
wxDLG_PNT(self, 35, 21), wxDLG_SZE(self, 195,-1)
The code shows how to create the labels and the text fields at the top of the dialog. Notice the use of
wxDLG_PNT and
wxDLG_SZE to convert dialog units to a
wxPoint and a
wxSize, respectively. (The -1's used above mean that the default size should be used for the height.) Using dialog units instead of pixels to define the dialog means you are somewhat insulated from changes in the font used for the dialog, so you use dialog units wherever possible. The
wxPoint and
wxSize are always defined in terms of pixels, but these conversion functions allow the actual number of pixels used to vary automatically from machine to machine with different fonts. This makes it easy to move programs between platforms that have completely different window managers. Figure 20-13 shows this same program running on RedHat Linux 6.0, and you can see that for the most part, the controls are still spaced appropriately even though a completely different font is used on the form. It looks like the
wxTextCtrl is a few dialog units taller on this platform, so perhaps there should be a bit more space between the rows. We leave this as an exercise for you.
The next control to be defined is the
wxListCtrl that displays the account and amount lines:
self.lc = wxListCtrl(self, ID_LIST,
wxDLG_PNT(self, 5,34), wxDLG_SZE(self, 225,60),
self.lc.InsertColumn(0, "Account")
self.lc.InsertColumn(1, "Amount")
self.lc.SetColumnWidth(0, wxDLG_SZE(self, 180,-1).width)
self.lc.SetColumnWidth(1, wxDLG_SZE(self, 40,-1).width)
It's important to note that the width of this control is 225 dialog units. Since this control spans the entire width of the dialog, you know the space you have to work with. You can use this value when deciding where to place or how to size the other controls.
Instead of auto-sizing the width of the list columns, let's now use explicit sizes. But you can still use dialog units to do it by extracting the
width attribute from the
wxSize object returned from
wxDLG_SZE. We should mention the following points:
wxStaticLine control for drawing the line across the dialog.
wxComboBox is used for selecting existing account names from a list.
wxID_OK and
wxID_CANCEL for OK and Cancel buttons, respectively, and force the OK button as the default button.
Fit() method to determine the initial size of the dialog window. This function calculates the total required size based on the size information specified in each of the children.
Here's the rest of the code for creating the controls:
wxStaticText(self, -1, "Balance:", wxDLG_PNT(self, 165,100))
self.balance = wxTextCtrl(self, ID_BAL, "",
wxDLG_PNT(self, 190,100),
wxDLG_SZE(self, 40, -1))
wxStaticLine(self, -1, wxDLG_PNT(self, 5,115),
wxDLG_SZE(self, 225,-1))
wxStaticText(self, -1, "Account:", wxDLG_PNT(self, 5,122))
self.account = wxComboBox(self, ID_ACCT, "",
wxDLG_PNT(self, 30,122), wxDLG_SZE(self, 130,-1),
accountList, wxCB_DROPDOWN | wxCB_SORT)
wxStaticText(self, -1, "Amount:", wxDLG_PNT(self, 165,122))
self.amount = wxTextCtrl(self, ID_AMT, "",
wxDLG_PNT(self, 190,122),
wxDLG_SZE(self, 40, -1))
btnSz = wxDLG_SZE(self, 40,12)
wxButton(self, ID_ADD, "&Add Line", wxDLG_PNT(self, 52,140), btnSz)
wxButton(self, ID_UPDT, "&Update Line", wxDLG_PNT(self, 97,140),
wxButton(self, ID_DEL, "&Delete Line", wxDLG_PNT(self, 142,140),
self.ok = wxButton(self, wxID_OK, "OK", wxDLG_PNT(self, 145,5),
wxButton(self, wxID_CANCEL, "Cancel", wxDLG_PNT(self, 190,5), btnSz)
# Resize the window to fit the controls
The last thing to do is set up some event handlers and load the dialog controls with data. The event handling for the controls is almost identical to the menu handling discussed previously, so there shouldn't be any surprises:
# Set some event handlers
EVT_BUTTON(self, ID_ADD, self.OnAddBtn)
EVT_BUTTON(self, ID_UPDT, self.OnUpdtBtn)
EVT_BUTTON(self, ID_DEL, self.OnDelBtn)
EVT_LIST_ITEM_SELECTED(self, ID_LIST, self.OnListSelect)
EVT_LIST_ITEM_DESELECTED(self, ID_LIST, self.OnListDeselect)
EVT_TEXT(self, ID_DATE, self.Validate)
# Initialize the controls with current values
for x in range(len(self.trans.lines)):
account, amount, dict = self.trans.lines[x]
self.lc.InsertStringItem(x, account)
self.lc.SetStringItem(x, 1, str(amount))
The last thing the code snippet does is call a
Validate() method, which as you can probably guess, is responsible for validating the dialog data; in this case, validating the date and that all transaction lines sum to zero. Check the date when the field is updated (via the
EVT_TEXT() call shown in the code) and check the balance any time a line is added or updated. If anything doesn't stack up, disable the OK button. Here is
def Validate(self, *ignore):
bal = self.trans.balance()
date = self.date.GetValue()
dateOK = (date == dates.testasc(date))
dateOK = 0
if bal == 0 and dateOK:
Notice that the balance field is updated. The next thing we demonstrate is the Add Line functionality. To do this, you need to take whatever is in the account and amount fields, add them to the transaction, and also add them to the list control:
def OnAddBtn(self, event):
account = self.account.GetValue()
amount = string.atof(self.amount.GetValue())
self.trans.addLine(account, amount)
# update the list control
idx = len(self.trans.lines)
self.lc.InsertStringItem(idx-1, account)
self.lc.SetStringItem(idx-1, 1, str(amount))
You call
Validate again to check if the transaction's lines are in balance. The event handlers for the Update and Delete buttons are similar and not shown here.
That's about all there is to it!
wxPython takes care of the tab-traversal between fields, auto-completion on the Enter key, auto-cancel on Esc, and all the rest.
This small section has barely touched the surface of what
wxPython is capable of. There are many more window and control types than what have been shown here, and the advanced features lend themselves to highly flexible and dynamic GUI applications across many platforms. Combined with the flexibility of Python, you end up with a powerful tool for quickly creating world-class applications.
For more information on
wxPython, including extensive documentation and sample code, see the
wxPython home page at http://alldunn.com/wxPython/.
For more information on the underlying
wxWindows framework, please visit its home page at http://www.wxwindows.org/.
When getting started, you should probably avoid using PythonWin or IDLE for running
wxPython programs, because the interactions between the various toolkits may have unexpected consequences.
Mark Hammond is an independent Microsoft Windows consultant working out of Melbourne, Australia.
Andy Robinson is a London-based consultant specializing in business analysis, object-oriented design, and Windows development.
Discuss this article in the O'Reilly Network Python Forum.
Return to the Python DevCenter.
Copyright © 2009 O'Reilly Media, Inc.


text:
|Bartending School Nationwide
Bartending School is a practical, affordable and fast-track method of landing a high-paying job as a Bartender. Bartending is a high paying, flexible, and most of all FUN job - if you can even call it a job! Obtaining proper training is absolutely necessary if you want to to successfully break into this lucrative industry without having to work your way up from the bottom (can you say bussing tables...). At the Bartending College Bartending Schools we have the experience, pro instructors and industry connections to get you into the bartending job you've been looking for.
The Bar & Restaurant industry is one of the few job markets that's seeing growth these days. In fact it made the US News list of the "20 Industries Where Jobs Are Coming Back", adding nearly 150,000 new jobs in 2010 alone. Isn't it time to give Bartending School a serious look?
Big Welcome to our newest Grad Night Internship Partner Bars!
All Bartending College Graduates are eligible to participate in this
The Bartending College is quite simply the BEST Bartending School in the country. Our Bartending Course is the most complete & affordable bartender training program available. We have Schools nationwide, including campuses in Sacramento, San Diego , San Francisco Bay Area, Mountain View (San Jose - South Bay), & San Leandro (Oakland - East Bay) California, Detroit Michigan Phoenix Arizona, & Columbus Ohio as well as Affiliate Bartending School campuses that allow us to provide TRUE Job Placement Assistance Nationwide.
DON'T LIVE NEAR A QUALITY BARTENDING SCHOOL? The Bartending College now features an ONLINE BARTENDING & HYBRID COURSE just for you! This course is based on the same course materials used in our brick and mortar bartending schools and feautures real course video, a print and bound course book, BarSim (tm) & More! Learn completely online, or via our Hybrid Course which gets you started online, then trains you in one of our Schools.
Map of our Nationwide Bartending School Campuses