text:
Greenwich boys lacrosse team records key win over rival Darien
Recommended Video:
Greenwich's William Waesche and Graham Savio were a combination the Darien High School boys lacrosse team had trouble solving Friday evening.
With Waesche producing one of his best performances in goal and Savio winning the majority of his faceoffs, the Cardinals duo cooled off a hot Blue Wave squad.
Waesche made 19 saves, while Savio won 14 of 18 faceoffs in host Greenwich's 8-6 victory over rival Darien in a crucial late-season FCIAC matchup.
"Savio was key and Waesche had a great game," said Darien coach Jeff Brameier, whose squad had won five straight conference games. "Those two were the difference makers."
Junior midfielder Kyle Foote recorded two goals and two assists and junior attack Luke Finneran had a hat trick for the Cardinals, who beat the Blue Wave for the first time since eliminating them in the 2010 FCIAC Tournament semifinals.
"We have been with the good teams all year, but we haven't put one away," Foote said. "We hung around with teams like Chaminade and Fairfield Prep. But tonight, we strung together four quarters and we're so excited to pull this game out."
Trailing 5-1 at halftime, Darien (8-6) closed to within 5-3 on consecutive goals from junior midfielder Harry Gillespie midway through the third quarter. The Cardinals regained the momentum, however, thanks to Savio at the faceoff X. Savio won the ensuing draw and Finneran wound up tallying off a pin-point pass from sophomore Decker Curran, giving GHS a 6-3 advantage with 1:50 left in the third quarter. A mere 10 seconds later, the Cards scored in transition after Savio moved the ball up the field off the faceoff.
"Savio controlling the faceoffs was huge because it's hard for teams to get runs going when they are not winning the faceoffs," said GHS coach Scott Bulkley, who was an All-American lacrosse player during his high school days at Darien. "It stops their momentum right there."
Waesche, a senior tri-captain, made 19 saves, 12 of which came in the second half.
"It's a great win for us," Waesche said. "Not only because we beat one of our rivals, but because we are veering toward the playoffs and we want to keep this momentum going and put overselves in a good position for the playoffs."
Greenwich (11-4), which may earn the No. 3 seed in next week's FCIAC Tournament with the win, jumped out to a 3-0 edge the first 6:38 of the first quarter. Finneran tallied in transition 2:30 into the opening quarter, junior attack Jamie Paradise put a shot from close in past Darien goalie Phill Huffard less than a minute later, and senior Will Gibian scored off a feed from Finneran at the 5:22 mark.
"Greenwich came out of the gates with passion and fire and they outplayed us in the first half," said Darien senior attack and captain Kevin Seiler, who had two goals and one assist. "We came out a little stale. After being down all those goals at halftime, we came out with a fire in our belly in the third quarter. We had a good run, but we couldn't put it together at the end."
Junior midfielder Sean Foley scored off a pass from junior attack Peter Lindley with just over four minutes remaining in the first quarter, making it a 3-1 game. The Cards responded with a pair of goals from Foote in the second quarter, one of which came off a laser from 15 yards out, giving the home team a 5-1 halftime lead.
Darien, meanwhile, had trouble capitalizing on its scoring chances despite having several man-up opportunities. Waesche and the play of defenders Jack Harrington, Griffin Tiedy, Jack Nail and Nick Schepis help keep the Blue Wave off the scoreboard.
"Give Waesche a lot of credit, he made some nice saves in extra man situations," Brameier said. "As an offensive group when you get behind sometimes you press and take some bad shots or you don't take advantage of your chances."
Said Bulkley: "We did a lot of good things today and Waesche played out of his mind. He has been making huge saves for us all year."
Goals from Lindley and Seiler brought the visitors to within 7-5 with 8:58 still left to play. Senior middie Mike Ellsworth gave the Cards some breathing room, tallying off a perfect pass inside from Foote. Savio won all five of the faceoffs he took in the fourth quarter.
"Before the faceoff I'm just thinking, don't go early and don't make any violations," Savio said. "I just take a deep breath, have a clear mind and try to be quick off the whistle. Everything came together for us tonight."
email@example.com; 203-625-4423
Greenwich 8, Darien 6
Scoring: D -- Peter Lindley 1 g, 1 a; Kevin Seiler 2 g, 1 a; Harry Gillespie 2 g; Sean Foley 1 g; Ian Burgotne 1 a; Kyle Cornell 1 a; G -- Kyle Foote 2 g, 2 a; Luke Finnernan 3 g, 1 a; Will Gibian 1 g; Jamie Paradise 1 g; Michael Ellsworth 1 g; Decker Curran 2 a. Goalies: G -- William Waesche (19 saves); D -- Phil Huffard (8 saves). Records: Greenwich 11-4; Darien 8-6.


text:
Last post we discussed cart abandonment email timing and strategies, and as promised, today we're going to examine the content of recovery emails, using examples from the Internet Retailer 500.
Image credit: Marketing Sherpa
Dell blends a bit of urgency with a helpful, customer service oriented message. The headline "Your saved cart is about to expire" coupled with the screenshot of the checkout gives the gist of the message without the need to read any text. The copy expresses a "quick and easy" message, promising it won't take too much time to take care of, and the customer can get "right back to work."
Dell also links directly to the saved cart, and offers a click to call option which can track the conversion back to the email. My only concern is the click to call button and checkout graphic are more prominent than the white "Retrieve Your Saved Cart" button. Ideally the graphic would also be linked in case the recipient assumes it's clickable.
Additional links to Subscription Center, Dell Financing, Resource Center and Services & Warranties do not compete with the main calls to action, but are still clearly visible. Links to manage email preferences, unsubscribe option and privacy policy are all easy to spot.
Dell could take it to the next level by personalizing its cart recovery emails with a first name when possible, and testing short and long copy/instructions.
Image credit: e-tailing group
HSN also creates urgency with the line "our inventory sells out quickly" – but the email has a more company-centric tone than customer-centric. The emphasis is more on "order today" than concern for the customer – something Dell did well.
Points for personalizing the message, making the call to action clear and including a phone number and email link for customer service.
Image credit: Get Elastic
Drugstore.com creates urgency that the cart is at risk of being wiped clean, and wins points for signing off the customer service oriented copy with a personal salutation. Showing value propositions for shopping with Drugstore.com is also strong. However, the image choice should be carefully considered. The "d'oh" girl suggests the customer is doing something stupid to forget items in her cart.
This email does not link directly to the cart, there is no call-to-action that relates to the email subject line or body. Rather, there is a banner link to "start shopping." Also, there's no indication of how long the items left in the cart will be held. There's a bit too much going on in this message.
Image credit: Practical Ecommerce
S&S screams "Courtesy Reminder" in the headline, and stays consistent throughout the body. "We thought this might be important to you" sets the tone. "We have reserved these items for you" makes it sound like a special service. This approach may create a feeling of obligation for the customer – if an item is reserved, it's not available for anyone else. One might feel guilty if they didn't respond.
The message is personalized, includes images and prices of items left in cart and is streamlined, without any distracting offers or links. Including the offer code helps S&S track conversions from this program, even for telephone completions. The free shipping offer also addresses the FUD (fear, uncertainty and doubt) about shipping charges – one of the top reasons for cart abandonment.
Great job by S&S, I actually have nothing to critique. This program has been very successful for S&S, with a 25% conversion rate and 33% of email revenue coming from cart recovery efforts.
Neiman Marcus
Image credit: DoublePlus Ecommerce Blog
Similar to S&S, Neiman Marcus does a great job with a bold headline that creates urgency, with a customer service focus. It includes images of what's in the cart. However, the call to action "Place your order soon" does not appear clickable (pink text) and the white rectangular button is hard to spot at the bottom.
There's also a disconnect between the image of the girl staring straight ahead and the rest of the message. You may recall from previous posts that a model's eye gaze affects where the customer looks.
Pottery Barn
Image credit: Big Fat Marketing Blog
Pottery Barn smartly includes the address and phone number of the closest retail store, should the customer be researching online to purchase offline.
might know this from email signup information, account info, city/state entered in checkout form or geotargeting from the cart.
Image credit: Get Elastic
Cafe Press makes use of pre-header text "We've saved the items in your shopping cart" to give the recipient the gist of the email in a preview pane. It also has a customer service tone, personalized with the item in the cart, but it's missing price information and messaging that creates a sense of urgency.
Image credit: ProImpact7 Blog
Cooking.com also makes use of pre-header text "Your shopping cart is waiting for you at Cooking.com." Merits for linking directly to the cart, showing a thumbnail image, and addressing the common reasons why one abandons a cart in the text area: interruptions, checkout trouble or confusion, and using the cart as a "wishlist."
Cooking.com also does a good job in the post script, describing why the customer is receiving the message with an unsubscribe link. This would be an especially good idea for customers who have not opted in to email, but are receiving the trigger because they provided their email in the checkout process. (Though anyone who's initiated checkout and provided an email address likely isn't using the cart just as a wishlist).
I'm not crazy about "Why wait?" – it sounds like marketing fluff. Rather, something that would create a sense of urgency like "your cart is about to expire" or "items in your cart are at risk of selling out" would be more persuasive.
Image credit: Minggie.com
Walgreens gets gold stars for personalization (first and last name), repeated calls to action (both a big shiny red button and a text link) and evoking curiosity with the text "some of the items in your Shopping Cart or Saved Items list are eligible for additional discounts." Notifying a customer when an item in the cart has decreased in price, is about to sell out or is about to increase in price is a great idea.
My only critique is this email is busy – there are so many links competing for attention. Only about 15% of the page is dedicated to the real purpose of the email – the rest is navigation and secondary calls to action. Walgreens could test a more streamlined version vs this control, or work on pulling the actual cart contents into the email like Neiman Marcus and others do.
Bass Pro Shops
Image credit: Listrak
Offering incentives to complete checkout is territory you should tread carefully. Bass Pro offers a whopping $20 reward for cart abandonment (on orders over $100) – this may condition customers to simply abandon carts to get a discount every time. However, this strategy warrants testing because it may be a more profitable strategy (more incentive, higher average order value) than a reminder without an incentive. The subject line "Come back and save $20" should also be tested, as it's not explicit that this is a message regarding an abandoned cart.
Image credit: SeeWhy Blog
Proflowers also plays the discount card, offering 10% off an order. Including "Maybe you didn't notice weekday shipping costs less" adds additional incentive to click through (ideally such an email would be sent early in the work week). I imagine emails for flowers should be sent as quickly after the abandonment as possible as they are usually ordered very close to the event.
I like how Proflowers merchandises its recovery email. The item that was abandoned includes a large image, full description and price after discount, along with alternative product suggestions.
14 Tips for Cart Recovery Emails
- Craft a subject line that makes it clear the email is about items remaining in the cart.
- Make use of pre-header text. Again, make it clear the email is about items remaining in the cart. (Don't put shipping offers, generic copy or unsubscribe links up there).
- Don't be salesy. Keep your copy friendly, customer-centric and customer service oriented. Bonus points for creating a sense of urgency (cart will expire, product is about to sell out, price has dropped, etc).
- Include contact information for phone and email (click to call if you offer it).
- Personalize with name and if possible, show which items are in the cart along with current price information.
- Link directly to the cart.
- Make your call to action as prominent as you would on your website. (Big, shiny buttons!)
- Tell your customer when his / her cart will expire (if relevant).
- Include store value propositions, but don't let them overshadow your main calls to action.
- Test product recommendations. They may be effective, they may also be too distracting, create "choice paralysis" or make your email too salesy.
- Avoid superfluous navigation, links and calls to action (don't clutter your page).
- Consider the emotional impact of images (like the woman smacking her forehead). A quick and cheap way to gauge customer sentiment is to submit your images to 5 Second Test, which will expose them to users who will provide feedback on the impression they give.
- Explain why the customer is receiving the email (post-script is fine), and include an opt-out link if you plan on running a series of triggered emails.
- Use caution with discounts and other offers – they may teach the customer to abandon every time. Some experts suggest sending incentives in a 3rd or 4th email (if you're sending a series) to win non-responders.

subset: commoncrawl


text:
With Michael Vick struggling and getting hit far too often, Eagles coach Andy Reid was asked if he would consider making a change at quarterback.
"Right now, we're with Michael and that's what we're doing," Reid said Monday after the Eagles' 27-6 loss at Arizona. "We'll evaluate it as we go."
It was the faintest endorsement Reid has given his starting quarterback as questions about Vick's job security mount with each subpar outing. The Eagles are 2-1, but Vick has handed in two dreadful performances and another that was not without its mistakes.
Reid was later asked Monday if he needed to give rookie backup Nick Foles more snaps in practice because Vick is seemingly only more blow away from another serious injury.
"No, not right now," he said.
Foles, who performed well in the preseason mostly against reserves, has yet to take an NFL snap.
In three games, Vick has thrown six interceptions and been charged with three fumbles. He's thrown just three touchdowns, ran for another, and has been sacked nine times. Vick's passer rating is 66.2 and ranks 29th in the NFL.
Vick took 13 hits in the pocket against the Cardinals, according to the official stat sheet, but there were many others that he endured Sunday.
The Eagles host the 2-1 New York Giants on Sunday night.


text:
Storage Bag Hard Carrying Case Shoulder Bag Case Pouch for MAVIC 2 Pro Zoom Grey
Colorado, Wyoming dig out of worst blizzard in nearly a centuryMSNBC.com, March 20, 2003
Metal Front Rear Bumper Parts for 1 10 RC Toys Crawler Car Traxxas TRX-4 SCX10IIHSP-580008 metric sleeve (4.5-8.0) 4 infinite original toolsFlysky FS-GT2E AFHDS 2A 2.4G 2CH Radio System Transmitter for Rc Car Boat With F
About 3,700 passengers waited for Denver International Airport to reopen as
the snow tapered off in most spots along the Front Range. Airport officials said
they expected to open one runway by 10 a.m. local time. Many schools, however,
stayed closed Thursday.
FG 1 5 4WD Fun Cross WB535 Leopard 67525 Wishbone Rear Lower FT9®Faller 191733 Wertstoffhof, 201 x 108 x 86 mm ++ NEU in OVPGRP 1 5 Revo Reifen Extra Soft, 2016er Neuheit - GWH02-P1 - tires wheelsNOCH 66010 HO 1 87 Quai de gare universel, set de 3 piècesPlaymobil 5205 Summer Fun Luxury Yacht
''We all got to know each other today, and shoveled each other out,'' said Joanna Sinnwell of Greeley, Colo., who was on her way to the Copper Mountain ski resort with her family but had to stop when interstate 70 was closed.
With 1,500 plows working, Interstate 70 was reopened Thursday from Denver to the Kansas border, and I-25 was back in service from Wellington north to the Wyoming border. Fifty-six miles of I-70 remained closed in the mountains west of Denver, however, along with parts of I-25 and I-80 in Wyoming, isolating some communities.
National Guard troops had to rescue stranded motorists, and even letter carriers stayed home. About 1,500 highway travelers took refuge in Red Cross shelters, and others bundled up in motels.
TechBrands Mini Flipping Quadcopter 2.4GHz BRAND NEWRC Screwz Stainless Steel Screw Kit for Associated SC8 Nitro C.O.R.R. ass034RC Screwz Stainless Steel Screw Kit for Axial Racing Yeti 1 10 4wd axi014RC Screwz Stainless Steel Screw Kit for Mugen Seiki MBX-7T Eco mug028
CARBURETTOR BODY 40A 46VX-M OS25581100 O.S. Engines Genuine PartsNEW Train Station Schone Triangular Puzzles 2000 Piece Multi Colour This PREMIUMHPI 1979 Ford F-150 BodyAP654-1x Märklin H0 00 AC M-Gleise gebogen großer Radius (5200 3600 800)Doll House- Carry 'n Play Doll HouseHigh Speed Racing 2.4G 4CH RC Boat Water Cooling Lightning RTR + 2 Batteries AU
On the bus, Boomer said, ''We slept and did nothing.''
An avalanche closed the road to the Eldora ski area northwest of Denver,
stranding about 250 skiers and employees, who spent their second night Wednesday
sleeping on floors.
Avalanche danger kept them from enjoying the new snow. ''It was torture looking at the slopes all day, but they were worried about safety,'' 17-year-old switchboard operator Kim Varela said.
Snow caused more than 110 roofs to collapse in Denver and Boulder. A man's
leg was broken when part of his apartment collapsed after the roof of the
nightclub next door collapsed.
Snow was also blamed for a rip in the tent-like roof of the airport's main terminal. The building was evacuated until officials determined it was safe.
At least 200 workers were clearing snow from the airport. Even chief airport
spokesman Chuck Cannon was driving a snowplow, assistant airport manager Amy
Bourgeron said.
Colorado Springs Municipal Airport, about 60 miles to the southeast, received only about 2 inches of snow and remained open. The men's basketball teams from the University of Vermont and University of Colorado flew from there to reach their NCAA tournament appearances in other states.
10 Pieza Opel Millennium Contenedor Roco 1 87 H0 ÅMelissa Doug Smoothie Make Blender Set, Helps Develop Motor and Social Skills,BUSCH 1579 Spur H0 orangerie NEU in OVP 1000T piece jigsaw puzzle supremacy seal God Righteousness Hgoldscope Seikin Seik
Wyoming state workers in Cheyenne were also told to return to work, though
not until 10 a.m. to give plows more time to work.
The plows were expected to get help from the weather: Temperatures in
southeastern Wyoming were forecast to reach the upper 30s Thursday and the upper
50s this weekend.
In Denver, officials braced for flooding when the nearly 30-inch mantle of heavy, wet snow began to melt. The temperature there was expected to reach 40 on Thursday and 50 by Saturday.
Colorado and Wyoming needed the moisture after months of drought. ''We've had such a terrible drought, and this will help with our water situation,'' said Rep. Mark Udall, D-Colo., who was stranded near the Denver airport.
The West pounded by snow
Weather.com, March 18, 2003
Melissa & Doug Jumbo Knob Wooden Puzzles - Shapes and Farm AnimalsLas Vegas Puzzle (2000 pièces)Remote Control Aircraft - ESC Camera Fixed Aerial Drone Fixed Height Quadcopter4x Kingkong Brushless Motor GT1105 7000KV for Mini 4-axis FLYEGG 130 PNP RCLIMA L204913 MAROON RAILCAR W34 EXPRESS PARCELS TESTED & BOXEDNew Calico Critters Sky Ride Sealed NIB
CNN reported that Denver has received a record 53 inches of snow in 5 days.
Drivers of more than 90 snowplows were placed on 12-hour storm shifts to clear Interstate 70, Colorado's main east-west highway, which reaches 11,000 feet above sea level. Blowing snow closed the westbound lanes near Morrison, about 20 miles west of Denver.
The northbound lanes of Interstate 25 were closed at Wellington, about 20 miles south of the Wyoming border. Forecasters said heavier snow was likely to come Tuesday night or Wednesday -- welcome news to the drought-parched state.
"They'll be working through the night and probably tomorrow night," Steve Fitzgerald, a spokesman for the Colorado Department of Transportation, said late Monday.
At Denver International Airport, snow-removal crews were told to be prepared to work 12-hour shifts.
Weather-related power failures in Denver Monday night forced the cancellation of a Cher concert at the 20,000-seat Pepsi Center when the electricity went out for 33 minutes. Xcel Energy said about 10,000 customers scattered across the Denver area were without electricity.
By Monday night, 11 inches of snow had fallen in the San Juan Mountains of southwestern Colorado. Estes Park, at the eastern edge of Rocky Mountain National Park, had eight inches. The foothills west of Denver also had eight inches.
Colorado endured its driest year on record in 2002, and the mountain snows that account for about 80% of the water in the state's lakes and rivers stood at about 85% of average last week.
"We could get a month's worth of precipitation in a couple of days or even see an historic storm. And this is not the only storm we are going to get in the next week or two," atmospheric scientist Klaus Wolter said.
Winter storm warnings were in effect across most of Wyoming -- except the northwest mountains -- while winter weather advisories were issued in the Rock Springs, Rawlins and Laramie areas.
1000 piece jigsaw puzzle Oshino Fuji micro piece 26x38 Japan Import Toy HobbyFUTABA S9550 SERVO GEAR SET AS4092 EBS3250KO PROPO BSx2 3 One10 Grasper Aluminum Upper Case RC Car Drift Touring KO-35033
Meteorologist Chris Jones said the weather -- though dangerous -- was typical of early spring in Wyoming.
"It's not rare for us to get something like this in March, especially with the high water content," he said. "We tend to get more Pacific weather at this time of year."
Six inches of snow had fallen in Sinks Canyon by late afternoon with 4 inches in Lander, 2 inches in Thermopolis and less than an inch in Kaycee.
High wind was also reported, with speeds between 30 and 40 mph possible in many areas. A gust of 58 mph was reported on Interstate 25 between Buffalo and Kaycee Monday evening, Jones said.
RC Racing Car Drift 1 10 4WD 70km h High Speed Racing Simulation VehicleH826HPW Selfie Drone WIFI FPV 2.4G HD Camera 3D Roll RC Quadcopter Optical FlowJan Van Haasteren Frénésie De Nourriture 2 x 1000 Piece Jigsaw Puzzle (2 Pièces)PUDA C240 240mm 3.5mm Arm 3K Carbon Fiber Stretch-X Racing Frame
According to the National Weather Service, nearly one-third of people killed in winter storms died in vehicles from exposure.
Meteorologists warned motorists to stay in their vehicles if they become stranded and remain visible to rescuers by keeping their overhead lights on and attaching a brightly colored cloth to their antennas. Make sure ice and snow do not block your exhaust and do not run your engine more than 10 minutes every hour, officials said.
Wyoming, Colorado hit by late-winter blizzard, leaving travelers stranded
Used: An item that has been used previously. See the seller's listing for full details and description of ... Read moreabout the condition
|C-8 Like New
Does Not Apply
|original boxes
|covered hopper
|State of Assembly:
|Ready to Go/Pre-built
Does not apply
CHEYENNE, Wyo., March 19 -- A blizzard buried parts of Colorado and Wyoming in 5-foot snowdrifts, shutting down state governments, stranding thousands of people and tearing the Denver Airport's roof.
The storm battered a long swath of the Rocky Mountain region, from New Mexico to the Canadian border, weather officials said, and a blizzard warning remained in effect Wednesday from New Mexico to the Colorado-Wyoming line.
Gov. Bill Owens' spokesman, Dan Hopkins, said the storm may be the worst to hit metropolitan Denver in 20 years.
New Tamiya 53671 (OP671) TT-01 Front One-way UnitCNC Aluminum propeller 6514 3 bladed 1 4 shaft prop RC Boat
Officials in both states warned residents to stay home unless absolutely necessary, and there was limited sympathy for stranded motorists.
''We're not Triple A, and we're not equipped to help people who are stuck,'' Officer Dave Padilla said in Cheyenne, Wyo.
Southeastern Denver had gotten 29 inches of snow by early Wednesday, and Boulder, 38 inches. Cheyenne was up to 18 inches by morning, and its 16 inches on Tuesday set a record for the date. More snow -- perhaps 6 inches -- was on the way.
''A good storm lasts a day,'' said National Weather Service meteorologist Kyle Fredin. ''This will be a three-day storm.''
Denver's streets were empty at morning rush hour, save the occasional bus or commuter with 4-wheel-drive. Offices, stores and even the coffee shops were closed. Snowplows fought to stay ahead of the heavy, wet snow -- more troublesome than Colorado's signature skier's powder.
NOVAK SMART STOP AUTO DETECT 2-4S LIPO - NK54764x KINGKONG 2205GT KV2350 2 to 4s CW CCW Brushless Motor For QAV250 RC Drone4X Racerstar Racing Edition 1103 BR1103B 10000KV 1-3S Brushless Motor Purple ForSPOON PETS spoon pet milk240 Piece Sphere Puzzle Star Light Puzzle STAR WARS Death Star
May said he thinks this storm was worse than the ''Christmas blizzard'' of 1982, which paralyzed the Mile High City for two days. ''It was fluffier stuff,'' he said.
Stacey Mittelstadt, a Casper, Wyo., teacher, was stuck in Billings Logan International Airport in Montana on her way home from a conference in Phoenix. She said she considered renting a car or taking a flight to Salt Lake City for a possible connecting flight to Casper but thought better of it.
''I just don't want to risk it,'' she said. ''I'm closer to home now.''
Left Right 4.76mm 3 16'' Flex Cable Stinger Drive Dog Prop Nut Tube Pipe RC BoatAMERICAN FLYER HOOD'S MILK CONTAINERS ON HOOD'S FLAT CAR ....MINT IN BOX ATHEARN Lighted Burlington Northern Locomotive & Mini Train SetGreat Planes GPMQ4141 Silicone Fuel Tubing Standard 50'
On Tuesday, two Frontier Airlines jets full of passengers turned around mid-flight to return to San Francisco and Los Angeles.
''At some point, Mother Nature calls the shots, and she's giving us a pretty good punch right now,'' Snyder said.
bluee RC Wall Car Multi Terrain Climbing Remote Control Racing Boy Toy GiftsRare Cascade 22" Manatee Plush Hand Puppet Stuffed Sea Creature Great ConditionYeah Racing Brass 118g Portal Cover Front or Rear For Traxxas TRX-4 RC TRX4-054
Strong wind whipped the snow horizontally, sweeping many areas bare and piling up 10-foot drifts across roads, at the end of driveways and behind cars.
Residents were advised not to travel in Cheyenne, where the wind-driven snow forced all state offices, schools and the Postal Service to close. F.E. Warren Air Force Base was closed to all but essential personnel.
RC AXIAL SCX10-16 Green Aluminum Solid Axle For 4WD 1 10 SCX10 Upgrade PartsRC 4CH 2.4GHz Bondir Saute Pneus Flexible Roue Télécommande Robot Véhicule RD
Yhe heavy, wet caused the roof of a 25,000-square-foot warehouse in Denver to collapse, the fire department said. No injuries were reported.
The snow was good news for the Colorado water supply. Last year was the state's driest on record, and the mountain snowpack -- which accounts for four-fifths of the water in the state's lakes and rivers --stood at about 85 percent of average last week.
''We are very grateful. We're very glad to see it. The snow that we've received has brought us to just about normal,'' said Trina McGuire-Collier, spokeswoman for Denver Water.


text:
Online ordering from Astrolabe has been restored, although because Michael is still in isolation (not sick, but had returned to Tasmania from the mainland) until Easter there may be a delay in getting orders in the post. But local customers please note that due to the new restrictions on social distancing, Scotty's on Argyle is currently (from 31 March) closed. Email and phone enquiries are welcome.
ASTROLABE BOOKSELLERS is located in Hobart, Tasmania, and carries a good range of antiquarian and second-hand books on a wide variety of subjects, specialising in works on TASMANIA (click here for our full list of Tasmanian titles). And see below for some recently listed and featured items. Proprietor Michael Sprod is a long-standing member of the Australian and New Zealand Association of Antiquarian Booksellers, an affiliate of the International League of Antiquarian Booksellers.
For more details see About Us - but note that since March 2017 Astrolabe no longer has its own shopfront. However, much of our stock is on display - and for sale - in Hobart at Scotty's on Argyle (formerly the Antiques Warehouse - yes, we preferred that too) in their new premises at 276a ARGYLE STREET, NORTH HOBART (just up from the Burnett Street corner). This shop is NOW OPEN - Monday to Saturday 10am to 5pm & Sunday 12 to 4pm. As before, all enquiries should be directed to Michael Sprod on 0408 132 970.
From this website you can search or browse our inventory of hard-to-find, out-of-print, secondhand and rare books. The Quick Search box to the left of this page can be used to search by author's name or partial title. You can also use a 'keyword' here to find books on a particular subject - for example 'convicts'. Note that you can use more than one word, joined with a plus (+) sign, e.g. tasmania+convicts+women.
The Advanced Search option allows you to make a more specific search, including the publisher, but note that keywords can not be used with that option.
Our subject categories are useful also, but as each book could be listed under more than one category, a keyword search is likely to discover more titles.
Recently Listed Items
Featured Items


text:
NISE Network product
A short film comedically exploring the idea of invisibility cloaks and how this possible new technology may influence society.
Nano Content Map
Nanoscience, nanotechnology, and nanoengineering lead to new knowledge and innovations that weren't possible before.
Nanotechnologies—and their costs, utility, risks, and benefits—are closely interconnected with society and with our values.
Developed for the NISE Network with funding from the National Science Foundation under Award Numbers 0532536 and 0940143. Any opinions, findings, and conclusions or recommendations expressed in this product are those of the authors and do not necessarily reflect the views of the Foundation.
Development Process
NISE Network products are developed through an iterative collaborative process that includes scientific review, peer review, and visitor evaluation in accordance with an inclusive audiences approach. Products are designed to be easily edited and adapted for different audiences under a Creative Commons Attribution Non-Commercial Share Alike license. To learn more, visit our Development Process page.


text:
Paul.davis necesitaba un nuevo diseño de logotipo y lanzó un concurso de diseño en 99designs.
Un ganador ha sido elegido entre 59 diseños de 16 diseñadores freelance.
Familier (My Familier and Our Familier)
We are launching 2 location aware mobile applications designed to help individuals (My Familier), and families or small groups of friends (Our Familier) track and complete tasks. These tasks are the daily activities that occur in normal life. They can range from picking up the dry cleaning to remembering that people are supposed to take something to a location, like take a bottle of wine to friends for a cook out. We need a logo for these 2 products.
Busy people with lots of errands to run. Individual users, families and small groups.
The word familier is the latin origin of the word "familiar". A familiar is an animal spirit, guide or companion that helps a chosen individual with tasks or challenges that they face. Our initial research has noted that that the owl is generally considered to be a good helper and provides wisdom, advice and knowledge.
The logo needs to have a singular form to represent My Familier and a plural form to represent Our Familier. The logo needs to be an icon and include the name of the product 'My Familier' and 'Our Familier' for the single and plural forms of the logo rerspectively. We'd like the logo to work in it's entirety with the product name, and for the icon to also work on its own. The logo needs to be original, distinctive and represent friendly, trustworthy, helpful, dependable, knowledgeable.
We are looking for the logos to be used to represent the application on a mobile device as well as part of a web design.
Using the owl as a theme is one idea but we are looking for alternative ideas.
The files we will require are:
Print file format - .ai (CMYK)
Please do not use any stock images or clip art in the logo.
Descubre cómo funciona un concurso de diseño u obtén más información sobre nuestros servicios de diseño de logo.


text:
Restless Legs Syndrome (RLS) Discussion Board - Terms of use
Welcome! Register here to join our Discussion Board, which is separate from the Member section of the RLS Foundation website. Please note that:
- Foundation and Discussion Board logins are different
- Registration will be approved by a volunteer moderator within 1 day
- Look for email notification that you account is activated
- You can read and browse the Board without logging in
- Before you register, please read our Usage Policy and Guidelines, which can be found here.


text:
The first Management Society women's organization was Silicon Valley Women - created in 2005 as a forum where women could meet and discuss topics of particular interest to female professionals (whether currently working or not). Since then, they have met regularly for mentoring, education, and networking.
Other chapters have also recognized the need to provide specific resources for their women professionals. Groups such as the Las Vegas Women's Network and Salt Lake Women have been organized by visionary chapters leaders who believe that connecting with other professional women is a great way to build your personal network. And, a solid network makes life better - not just for friends, but also for professional help, job searches, and being of service.


text:
Forum/debate for County Commissioner Dist. 3 candidates
Constitution First will sponsor a forum/debate for candidates for Montezuma County Commissioner, District 3 at the Cortez Elks Lodge, 2100 N. Dolores Rd., on Tuesday, Oct. 9 from 7 to 9 p.m. For more information contact Georgia Bignell at 560-1879.
Open forum for high schools upcoming ballot issue 3B
The Cortez 21st Century High School Committee will hold an open forum about 3B, the upcoming ballot question concerning the new high school on Thursday, Oct. 11 at 6 p.m. at The Farm Bistro, 34 W. Main St., Cortez. The committee will have a brief presentation along with written information, and will then take questions and thoughts. Please attend to find out more about this great opportunity for the RE-1 school district. For more information, contact Becky Brunk at 799-1567 or Orly Lucero at 565-1128.


text:
Stretch your dollars
Saving money requires creativity, not only in terms of accommodations and transportation but also scheduling. The budget travel set is well-known for staying in affordable, family-owned guesthouses, taking local transportation and even forgoing taxis in favor of bicycles or walking — choices that are also a bonus for the environment and local economies. But you can also save money by checking out destinations in the off-season. Vietnam (shown here) in the summer isn't as rainy as you might fear, and even Cape Town, South Africa, is cheaper during the Northern Hemisphere's summer. Here are eight places where you can stretch your travel dollar in the off-season. (Text: Josh Lew)


text:
This title is somewhat creepy... I promise I'm not adopting weird alter-egos or something for the sake of fashion blogging, they just go with the outfits. The Amélie reference is pretty self explanatory, the colours of the film are red and green corresponding to the photo hehe. *parisienne chic* I'm studying the film in school, no idea how many times I've said the sentence "Jeunet manipule les couleurs pour créer une ambiance nostalgique" - way too many. Anyway... I've probably been the worst blogger in the world - not updating for 3 weeks :'(. I won't bore you with my sensible explanation of trying to revise / not fail my exams / get the 3 A's I need to get to the university I want - kind of indirectly did it just then, my sincerest apologies. Anyway these two outfits are perfect for spring (selon moi), and all made possible thanks to my sponsors (unshamefully!) I'll put the links below, anyway sorry for my absence- my life has been totally uneventful so nothing to update you on! Much love, please forgive my absence and my terrible attempt at French in this strange monologue Xxxx
Sunday, 11 May 2014
8 comments:
I like the top photo, beautiful!ReplyDelete
xx Alexa
super pretty, both outfits! <3ReplyDelete
all the best and good luck with your university ~
Oh wow, that first photograph is breath-taking Imogen! Both of these outfits are so so gorgeous xReplyDelete
Absolutely impressed by its perfection. I was really impressed by the fine creativity and artistry. I am really looking forward to the coming occasion when I am going to wear it.ReplyDelete
sell wedding dress online
- Anonymous12 May 2014 at 01:49
This outfit is so pretty, looks really good on youReplyDelete
So cute, the dress is adorable <3ReplyDelete
The Quirky Queer
perfect look! :)ReplyDelete
Love this blog the outfits are simply amazing xxxReplyDelete
You are welcome to check out my blog -- http://www.mlleepaulettegirl.com/
Subscribe to: Post Comments (Atom)


text:
- Now in Dubai
- Blog
- Become A Professional
- Login / Sign Up
Amish Photography
4.7(24 reviews)
Twinkling face of the bride
This album signifies the love that Kritika and Avaneesh share. Their wedding is everything you could wish for, from beautiful decorations to family fun times. Dive in to see these amazing wedding photographs that will leave you awestruck!Wedding Photography
Photo added to your Ideabook
Beauty & Wellness
Home Maintenance
Homecare & Design


text:
« PreviousContinue »
would make a personage by geometrical proportions, the other, by taking the best parts out of divers1 faces, to make one excellent. Such personages, I think, would please nobody but the painter that made them—not but I think a painter may make a better face than ever was, but he must do it by a kind of felicity (as a musician that maketh an excellent air in music), and not by rule. A man shall see faces, that if you examine them part by part you shall fiud never a good, and yet altogether do well. If it be true that the principal part of beauty is in decent motion, certainly it is no marvel2 though persons in years seem many times more amiable: * Pulchrorum autumuus pulcher'3—for no youth can be comely but by pardon, and considering the youth as to make up the comeliness. Beauty is as summer-fruits, which are easy to corrupt, and cannot last, and, for the most part, it makes a dissolute youth, and an age a little out of countenance; but yet certainly again, if it light well, it maketh virtue shine, and vices blush.
1 Divers. Many. 'For that divers of the English do maintain and succour sundry thieves, robbers, and rebels, because that the same do put them into their safeguard and counsel . . . '—Statutes and Ordinances made in the 4th year of Henry VI., befcre tho Most Reverend Kiehard, Archbishop of Dublin, and Lord Justice of Ireland, A.d. 1440.
2 Marvel. A wonder. 'No marvel; for Sutan himself is transformed into an angel of light.'—7 Cor. xi. 14.
3 'Tho autumn of the beautiful is beautiful.'
DEFORMED persons are commonly even with nature; for as nature hath done ill by them, so do they by nature, being for the most part (as the Scripture saith) ' void of natural affection:'1 and so they have their revenge of nature.* Certainly there is a consents between the body and the mind, and * where nature erreth in the one she ventureth in the other' (' Ubi peccat in uno, periclitatur in altero'): but because there is in man an election touching the frame of his mind, and a necessity in the frame of his body, the stars of natural inclination are sometimes obscured by the sun of discipline and virtue; therefore, it is good to consider of deformity, not as a sign which is more deceivable, but as a cause which seldom faileth of the effect. Whosoever hath anything fixed in his person that doth induce contempt, hath also a perpetual spur in himself to rescue and deliver himself from scorn; therefore, all deformed persons are extreme* bold—first, as in their own defence, as being exposed to scorn, but in process of time by a general habit. Also, it stirreth in them industry, and especially of this kind, to watch and observe the weakness of others, that they may have somewhat to repay. Again, in their superiors, it quencheth jealousy towards them, as persons that they think they may at pleasure despise; and it layeth their competitors and emulators asleep, as never believing they should be in possibility of advancement, till they see them in possession; so that upon the matter,5 in a great wit, deformity is an advantage to rising. Kings, in ancient times (and at this present, in some countries), were wont1 to put great trust in eunuchs, because they that are envious towards all are obnoxious * and officious towards one: but yet their trust towards them hath rather been as to good spials3 and good whisperers than good magistrates and officers; and much like is the reason of deformed persons. Still the ground is, they will, if they be of spirit, seek to free themselves from scorn, which must be either by virtue or malice ; * and therefore, let it not be marvelled,' if sometimes they prove excellent persons; as was Agesilaas, Zanger the son of Solyman, iEsop, Gasca, president of Pern; and Socrates may go likewise amongst them, with others.
1 Rom. i. 31.
5 'Then since the Heavens have shaped my bndy so,
Shakespere's Richard III. * Consent. Agreement.
'With one consent, let all the earth
4 Extreme. Extremely.
4 Matter. Whole. (' Upon the matter'—On the whole.) 'He grants the delugo to have come so very near the mailer, that but very few eocaped.'—Tillutson.
Bacon is speaking principally of original deformities; not such as result from accident or disease. And it is very remarkable how much less tendency these latter have, than the other, to produce such effects as he is speaking of.
1 Wont. To be accustomed. 'Now at the feast the governor was wont to release unto them a prisoner.'—Matt, xxvii. 15.
'I this night, have dream'd. If dream'd, not as I oft am wont, of thee.'—Milton. * Obnoxious. Subject; submissive. 'The writings of lawyers, which are tied and obnoxious to their particular laws.'—Bacon.
3 Spials. Spies.
'The Prince's spials have informed me.'—ShoJcespere.
4 Malice. Vice . (Not, as now, restricted to malevolence.) 'In malice be ye children.'—1 Cor. xiv. 20. 'Not using your liberty for a cloak of maliciousness.'— 1 Pet. ii. 16.
6 Marvel. To wonder at. 'Marvel not that I said unto thee, ye must be born again.'—John iii.
HOUSES are built to live in, and not to look on; therefore, let use be preferred before' uniformity, except where both may be had. Leave the goodly fabrics of houses, for beauty, only to the enchanted palaces of the poets, who build them with small cost. He that builds a fair house upon an ill seat,* committeth himself to prison—neither do I reckon it an ill seat only where the air is unwholesome, but likewise where the air is unequal; as you shall see many fine seats set upon a knap3 of ground, environed with higher hills round about it, whereby the heat of the sun is pent in, and the wind gathereth as in troughs : so as * you shall have, and that suddenly, as great diversity of heat and cold as if you dwelt in several places. Neither is it ills air only that maketh an ill seat, but ill ways, ill markets; and if you consult with Momus, ill neighbours. I speak not of many more; want of water, want of wood, shade, and shelter, want of fruitfulness, and mixture of grounds of several natures; want of prospect, want of level grounds, want of places at some near distance for sports of hunting, hawking, and races; too near the sea, too remote; having the commodity6 of navigable rivers, or the discommodity of their overflowing; too far off from great cities, which may hinder business; or too near them, which lurcheth' all provisions, and maketh everything dear; where a man hath a great living laid together, and where he is scanted;! all which, as it is impossible perhaps to find together, so it is good to know them, and think of them, that a man may take as many as he can; and, if he have several dwellings, that he sort3 them so, that what he wanteth in the one he may find in the other. Lucullus answered Pompey well, who, when he saw his stately galleries and rooms so large and lightsome, in one of his houses, said, 'Surely, an excellent place for summer, but how do you in winter ¥ Lucullus answered, 'Why do you not think me as wise as some fowls are, that ever change their abode towards the winter ¥ 4
1 Preferred before. Preferred to.
'O Spirit that dost prefer
2 Scat. Site. 'It remaincth now that we find out the seat of Eden.'—Raleigh.
3 Knap. A prominence; a knoll.
• Hark, on knap of yonder hill, Some sweet shepherd tunes his quill.'—Brown. * As. That. See page ib. i Dl. Bad.
'There some sH planet reigns.'—Shalcespere. 1 Commodity. Advantage; convenience. Sec pago 442.
To pass from the seat to the house itself, we will do as Cicero doth in the orator's art, who writes books De Oratore, and a book he entitles Orator; whereof the former delivers the precepts of the art, and the latter the perfection. We will therefore describe a princely palace, making a brief model thereof; for it is strange to see, now in Europe, such huge buildings as the Vatican and Escurial, and some others be, and yet scarce a very fair5 room in them.
First, therefore, I say, you cannot have a perfect palace, except you have two several6 sides; a side for the banquet, as is spoken of in the book of Esther, and a side for the household; the one for feasts and triumphs,7 and the other for dwelling. I understand both these sides to be not only returns, but parts of the front; and to be uniform without, though severally partitioned within; and to be on both sides of a great and stately tower in the midst of the front, that, as it were, joineth them together on either hand. I would have, on the
1 Lurch. To absorb. (From I'ourche—a game in which iho sfcikes arc put into a box, whore the loser is obliged to leave them. Henco perhaps the expression 'to be left in the lureh.')
2 Scanted. Limited; restricted. 'I am scanted in the pleasure of dwelling on your actions.'—Dryden.
1 Sort. To choose.
'To sort some gentlemen well skilled in music.'—Shakespere. * Plui Vit. Lucull. 30. 4 Fair. Handsome.
'Carry him to my fairest chamber.'—Shakespere. "Several. Separate. 'He dwelt in a several house.'—2 Kings xv. 5. 7 Triumpha Shows on festive occasions. See page 414.


text:
Gathering of old friendhips. Friends I havent seen for ages meet together for BBQ and canoeing. We eat, we play shadowcock, we play cards. Did you know that at every Vietnamese gathering someone always bring a deck of card? I'm serious, it runs in our blood.
The best part is when we align all the boats together in the middle of the lake and just sings. Those who cant sing, like me, we have to claps along. Just like a singing musical class.. only that it floatings on water.. and in the middle of nowhere.
I love rivers and lakes. Afterall, where I came from our lives revolved around the Mekong Delta river.
It was all good until the rain came and spoilt the fun.


text:
Auburn Animal Center has grown rapidly over our first five years and is ready to add an associate veterinarian to our practice. Consistently rated 5 stars by our clients and community, Auburn Animal Center strives to provide quality care to a diverse clientele. We stand out as a caring facility that works closely with the local humane society and various rescue groups. Our association with the Maine Wildlife Park affords an opportunity to work with a variety of wild animals like moose and lynx.
Our facility is well equipped and staffed by caring, helpful team players. This position is open to new graduates who wish to expand their skills or experienced veterinarians who want to work where patient needs come first.
Located in south central Maine, Auburn is situated in the middle of one of Maine's most beautiful lakes region. The pristine bodies of water offer unlimited recreational opportunities including ten nearby golf courses. Auburn is an equally short distance from the mountains and the ocean - allowing the outdoor enthusiast quick access to Maine's numerous outdoor activities.
We are part of a family of practices with a long history and reputation that separates us from others – see what all the buzz is about! We support our veterinarians with superior salary, benefits (including health and dental, 401(k), CE allowance, vacation, dues, and liability coverage), outstanding practice teams, and a family friendly atmosphere.


text:
by Joel Lamy
Lincolnshire Fire and Rescue Service has dropped its Fireman Sam mascot, based on the popular TV character, to stop people from feeling "excluded".
Lincolnshire's chief fire officer Les Britzman said, "Firefighters nationally and residents locally have raised some concerns that 'Fireman Sam' doesn't reflect the fire service today, in terms of both the job itself and our workforce.
"It's important to us that our open days and community events don't make anyone feel excluded and therefore we took this decision.
"We always make sure that we include plenty of activities and other ways to engage children and adults, to help them learn more about fire safety and a firefighter's role."
More inclusive mascots
An email seen by the Lincolnite from a senior fire service figure has also revealed that the service will use fire extinguisher-shaped characters named Freddy and Filbert as mascots instead.
The email states, "A decision has been made not to include images of Fireman Sam on posters or advertising going forward, as it does not reflect the inclusive nature of Lincolnshire Fire and Rescue.
"Please can you ensure when you are designing posters that Fireman Sam is not used and more inclusive images are utilised.
"This also includes no longer using the Fireman Sam costumes on stations and using the Freddy and Filbert costumes instead."
This article originally appeared on our sister site, Peterborough Telegraph


text:
Activation Timer -- a Simple Task Scheduler
Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame
One of the most common problems in Win32 programming is dealing with a number of functions that must be executed each time the specified period expires. For example, you have three routines that must run:
|....every 14 seconds
|....every 11 seconds
|....every 90 seconds
A common solution involves several objects known as timers, which may seem fairly easy but cumbersome to use. This article introduces a simple yet powerful set of classes that greatly reduce the effort (and headache) required to handle multiple periodic jobs.
- For each appended task, create a new thread.
- Create a separate timer within every thread.
- Use these timers in a common way.
This may seem great, but only if your system has enough resources to handle as many threads and tasks you wish to run. It is better to use a single timer and open a new thread only when your background task is really about to start. The modified algorithm is:
- Create a timer.
- After any task is appended:
- Kill the timer.
- Calculate a minimal timeout value = Greatest Common Measure of all timeout values.
- Restart the timer.
- Each time the timer activates, check whether any tasks are up to run.
- If so, create a new thread(s) and run the task(s) in this thread(s).
This is nearly perfect, but one problem remains. If the task's execution period is less than the task's working time, a single task can start multiple threads; therefore, we must keep an eye on all of the threads to avoid resource leaks. In other words, we must implement some kind of garbage collection algorithm, which will track all thread objects and will close all unused handles.
The final algorithm is:
- Create a timer.
- After any task is appended:
- Kill the timer.
- Calculate a minimal timeout value = Greatest Common Measure of all timeout values.
- Restart the timer.
- Each time the timer activates, check whether any tasks are up to run.
- For each ready-to-run task:
- If a task is run for the first time, create a list of active threads, create and add a single thread object to this list.
- If the thread list is not empty, append a new thread object to the end of the list.
- Check all thread objects on the list, except of one recently appended, for completition of execution.
- If any thread is not active, release its thread handle.
Advantages of this approach:
- Minimal resource overhead.
- Elimination of all memory and resource leaks.
- Relatively high computational efficiency.
- Ease of use (and debug)—only one timer to track.
Class Hierarchy
The given set consists of five classes; the higher class is always a manager-class (and an aggregate) for a subordinate class.
The actual hierarchy is:
ActivationTimer --- manages ---> TaskList --- contains ---> Tasks --- (each task) controls (its own) ---> ThreadList --- handles ---> Threads struct Thread // Structure that incapsulates the // thread handle. { // Only Thread list is allowed to create/close threads: friend class ThreadList; protected: // Active thread handle: HANDLE ThreadHandle; Thread* Next; // Next thread in a list. Thread* Prev; // Previous thread in a list. // Construction / destruction: Thread(HANDLE hNewThreadHandle); virtual ~Thread(); }; class ThreadList // Double-linked list of thread objects. { // Only task is allowed to handle ThreadList: friend class Task; protected: Thread* Begin; // Head of list Thread* End; // Tail of list int NumOfThreads; // Number of threads in a list. // Construction / destruction: ThreadList(HANDLE hNewThreadHandle = NULL); virtual ~ThreadList(); // Add a new thread to the list: int AppendThread(HANDLE hNewThreadHandle); // Get the pointer to a 'num'th thread object: Thread* operator[] (const int num) const; // Determine whether 'num'th thread is active or not: bool IsThreadActive(const int num) const; // Close the 'num'th thread object: int CloseThreadObject(const int num); // Get the number of threads in a list: int GetNumOfThreads() const; }; class Task // Class that incapsulates task data. { // No one is allowed to create and handle Task except for // TaskList: friend class TaskList; protected: // Time (in milliseconds), at which task is periodically // performed: unsigned long timeout; void* pFunc; // Pointer to the task // (i.e.: function). void* pParameter; // Pointer to a *structure* // parameter of task. ThreadList* listOfThreads; // List of active threads // opened by a task. Task* Next; // Pointer to the next task Task* Prev; // Pointer to the previous task // Construction / destruction: Task(const unsigned long msTimeout, void* pNewFunc, void* pParam); virtual ~Task(); void Execute(); // Call a task AND clean the // threadlist. }; class TaskList // Double-linked list of // task data { // No one is allowed to create and handle TaskList except // for ActivationTimer: friend class ActivationTimer; protected: Task* Begin; // The very first Task. Task* End; // The last Task. int NumOfTasks; // Number of Tasks in the list. // Construction / destruction: TaskList(const unsigned long msTimeout = 0, void* pNewFunc = NULL, void* pParam = NULL); virtual ~TaskList(); // Retrieve a pointer to the 'num'th task: Task* operator[] (const int num) const; // Get the number of tasks: int GetNumOfTasks () const; // Get the timeout value for the 'num'-th task: unsigned long GetTaskTimeout(const int num) const; // Add a task: int AppendTask(const unsigned long msTimeout, void* pNewFunc, void* pParam); // Remove a task from the list: int DeleteTask(const int num); // Call a task and create an individual thread for it: void CallTask (const int num); }; class ActivationTimer // A simple task scheduler - // designed as a singleton. { protected: static TaskList* listOfTasks; // Pointer to the list // of tasks. // Minimal timeout - timer checks tasks for execution every // 'minTimeout' milliseconds: static unsigned long minTimeout; static unsigned long maxTimeout; // Maximum timeout in // the list. static unsigned long curTimeout; // Current time. static unsigned int TimerId; // ID of the internal // timer. // Check if it is a time to call a task: static void ExecAppropriateFunc(); // Calculate 'minTimeout' value. void RecalcTimerInterval(); static void CALLBACK TimerProc(HWND, UINT, UINT, DWORD); public: // Construction / destruction: ActivationTimer(const unsigned long msTimeout = 0, void* pNewFunc = NULL, void* pParam = NULL); virtual ~ActivationTimer(); // Add a single task: int AddTask(const unsigned long msTimeout, void* pNewFunc, void* pParam = NULL); // Remove a task: int RemoveTask(const int cpPos); // Get the number of active tasks: int GetNumOfTasks() const; // Stop the timer: void Halt(); // Restart the timer: void Restart(); // Deallocate a singleton object and // reallocate it once again. void Reset(); };
Note 1: As you can see, two double-linked lists (the list of tasks and the list of threads for every task) form the foundation of this set of classes. The question may arise: Why not use STL's <list> container template class? The answer is: STL's <list> brings not only the <list>, but also a HUGE amount of unnecessary code, which slows and enlarges the application. So I've decided to use the most simple (and the most efficient, in our case!) "hand-made" implementation of a double-linked list.
Note 2: Another point of interest—the core class, ActivationTimer, which is implemented as a Singleton. A singleton is a class that assures existence of a maximum of one object of its type at a given time, and provides a global access point to this object. This article gives a comprehensive overview of a singleton design pattern.
Note 3: The real cause of ActivationTimer being a singleton is a stupid limitation of Win32 API: the timer callback procedure, TimerProc, is the only callback function in Win32 that does not take any user-defined argument. This behavior can be overridden in two ways:
- By using not an ordinary timer (SetTimer / KillTimer), but a special synchronization object—waitable timer
(CreateWaitableTimer / SetWaitableTimer / CancelWaitableTimer).
Unfortunately, this approach produces significant performance overhead.
- By using a special synchronization object, which is new to VC++ 7 - timer-queue timer
(CreateTimerQueue / CreateTimerQueueTimer / DeleteTimerQueueEx / DeleteTimerQueueTimer).
Timer-queue timers are lightweight objects that enable you to specify a callback function to be called at a specified time or a period of time. These objects are new to VC++ 7, and I still don't have the ability to implement them, so ... their time is yet to come.
Note 4: For better understanding, only member-functions that have a direct influence on the algorithm will be explained here. The source code contains detailed comments on every function.
Step by step:
- Create a timer:
// Create a timer with one task in the task list: ActivationTimer::ActivationTimer(const unsigned long msTimeout, void* pNewFunc, void* pParam) { if((msTimeout <= 0UL) || !pNewFunc) { listOfTasks = new TaskList(); TimerId = 0; minTimeout = 0; maxTimeout = 0; curTimeout = 0; return; } listOfTasks = new TaskList(msTimeout, pNewFunc, pParam); minTimeout = msTimeout; maxTimeout = msTimeout; curTimeout = msTimeout; Restart(); } // Restart the timer: void ActivationTimer::Restart() { TimerId = SetTimer(NULL, NULL, minTimeout, TimerProc); }
// Add a new task to the task list. // Return value: zero-based position of task in a task list. int ActivationTimer::AddTask(const unsigned long msTimeout, void* pNewFunc, void* pParam) { // A little bit of parameter validation: if((msTimeout <= 0UL) || !pNewFunc) return -1; // Kill the timer: Halt(); // Append a new task: int pos = listOfTasks->AppendTask(msTimeout, pNewFunc, pParam); // Recalculate 'maxTimeout' value: maxTimeout = maxTimeout < msTimeout ? msTimeout : maxTimeout; // Recalculate 'minTimeout' value: RecalcTimerInterval(); // Recreate the timer: Restart(); return pos; }
// Calculate the value of minTimeout.
// This is a time when 'ExecAppropriateFunc()' routine is
// periodically called.
void ActivationTimer::RecalcTimerInterval()
minTimeout = listOfTasks->GetTaskTimeout(0);
for(int i = 0; i < listOfTasks->NumOfTasks; i++)
unsigned long tempTimeout = GCM(minTimeout,
minTimeout = minTimeout >
tempTimeout ?
tempTimeout : minTimeout;
curTimeout = minTimeout;
// Check whether it is a time to call one of the tasks from // the task list. void ActivationTimer::ExecAppropriateFunc() { bool reset = true; for(int i = 0; i < listOfTasks->NumOfTasks; i++) { // If time has come, call the 'i'th task: if((curTimeout % listOfTasks->GetTaskTimeout(i)) == 0) { listOfTasks->CallTask(i); reset &= true; } else { reset &= false; } } // If all tasks are called simultaneously, // reset curTimeout value: if(reset) curTimeout = minTimeout; else curTimeout += minTimeout; }
// Call a task and create an individual thread for it: void TaskList::CallTask(const int num) { Task* task = operator[](num); task->Execute(); } // Create an individual thread for a task: void Task::Execute() { listOfThreads->AppendThread(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pParameter, 0, 0)); // ...and wipe out all unused thread handles: int numThreads = listOfThreads->GetNumOfThreads(); for(int i = 0; i < numThreads - 1; i++) { if(!(listOfThreads->IsThreadActive(i))) listOfThreads->CloseThreadObject(i); } }
Task::~Task() { delete listOfThreads; } ThreadList::~ThreadList() { Thread* target = Begin; Thread* temp; if(target) // If ThreadList is not empty... while(target) { temp = target->Next; delete target; target = temp; } } Thread::~Thread() { // Check if thread has exited. // If it did not - terminate it. DWORD exitCode; GetExitCodeThread(ThreadHandle, &exitCode); // !!! UNSAFE CODE !!! // Try not to use lengthy operations OR // use some kind of internal completition // flag to explicitly instruct thread to exit. // Refer MSDN on hazards of TerminateThread. if(exitCode == STILL_ACTIVE) TerminateThread(ThreadHandle, 0); CloseHandle(ThreadHandle); }
Note 5: The Thread::~Thread destructor needs some explanation. Calling TerminateThread can be quite dangerous if the target thread is still running, because:
- If the target thread is allocating memory from the heap, the heap lock will not be released.
- If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
- If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.
A possible solution may be one of the following:
- Do not use lengthy operations as a thread function.
- Use a special bool variable (something like: m_bStopExecution), and periodically check the state of this variable.
If this variable is true, the thread can gracefully quit.
- Use a synchronization object—for example, semaphore or waitable timer—to instruct a thread to stop execution (just the same as above).
Please refer to MSDN for more information on TerminateThread and synchronization objects.
To use ActivationTimer, do the following:
- Include "ActivationTimer.cpp" and "ActivationTimer.h" in your project.
- Write the following line at the beginning of the "StdAfx.h" file:
#include "ActivationTimer.h"
#include "StdAfx.h"
ActivationTimer actTimer;
void MyFunction() { .... } .... actTimer.AddTask(10000, MyFunction);This will periodically execute MyFunction every 10 seconds.
void MyFunction2(void* pParam) { int* value = (int*)pParam; .... } .... int someValue = ... ; actTimer.AddTask(15000, MyFunction2, &someValue);
typedef struct { int valueA; float valueB; bool valueC; ... } MyStruct;and write:
void MyFunction3(void* pParam)
MyStruct* structVal = (MyStruct*)pParam;
MyStruct* somestruct = new MyStruct;
... // initialize struct here
actTimer.AddTask(5100, MyFunction3, somestruct);
The demo project (see link below) is an ordinary "Hello, World!" application, built with AppWizard, with these examples included. Enjoy!
Thank you all the CodeGuru visitors who posted comments, and double-Thank-you to everyone who wrote me, reporting bugs, ideas, and suggestions!
Why not a Task Scheduler instead of the Activation Timer? That's because Windows already has its Task Scheduler application, so I've decided not to mess up. At least, Activation Timer application is not included in a standard Windows package, yet........
DownloadsDownload demo project - 12 Kb
Download source - 5 Kb


text:
I have installed Cubian (It's Debian for the Cubieboard). After the system has started, the wired network works fine. I've read this and configured the network interface(I added only the wlan0 settings):
# the loopback interface
auto lo
iface lo inet loopback
#auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wireless-essid My_network_name
but when I try
sudo ifup wlan0 I get:
No DHCPOFFERS received. No working leases in persistent database - sleeping.
I have a MAC filter on my router, but I added the MAC address to the white list.
Also I can't understand why Cubian is connecting eth0, when there is
#auto eth0
In the wiki I saw:
If you absolutely don't need the wired network, please disable this feature by comment or delete auto eth0.
It is commented out by default, why does eth0 start working after the system has started?
I have understood my bad. I have router and repeater with one ssid to cover a larger area, and Cubian doesn't know what to use. How can I fix it problem (maybe specify MAC address to connect) for feture?
Now it remembers where is dhcp and connect there fine.


text:
The Supreme Court will take its first serious look at same-sex marriages. NBC's Pete Williams reports.
WASHINGTON -- The marriage cases the U.S. Supreme Court has agreed to hear will test an axiom about the court, one that says it prefers to move in small increments rather than big leaps.
By next June, the justices could rule narrowly on the constitutionality of allowing same-sex couples to get married. Or they could announce a sweeping ruling that would apply nationwide and remain the law of the land for years to come.
"We have no idea if they will ultimately reach the broader issues about gay people and the fundamental right to marry," says Mary Bonauto of Gay and Lesbian Advocates and Defenders, a veteran of the legal battles over gay rights.
It's possible the court will find a way to avoid the central issue both cases raise: Does the Constitution's guarantee of equal protection allow the state and federal governments to make legal distinctions between same-sex couples and those of the opposite sex?
The court agreed Friday to consider challenges to a law that bars the federal government from recognizing same-sex marriages in the states where they are legal and to California's Proposition 8, the voter-approved initiative that put a stop to marriage in that state for gay couples.
Both cases invite the potential for far-reaching decisions, says Tom Goldstein, a Washington, D.C., lawyer who argues before the court and publishes the SCOTUSblog website.
"This is a monumental action by the Supreme Court, because we know they're going to say something about gay marriage for the first time ever. They may not decide there's a constitutional right to it, but this will be the building block, in one direction or the other, for recognizing or rejecting that right," Goldstein says.
The greatest potential for a ruling with nationwide implications comes in the California case. Proposition 8, approved by 52 percent of California voters in 2008, amended the state constitution to ban same-sex marriages. It went into effect after 18,000 couples had been legally married there.
A federal judge in San Francisco declared the ban unconstitutional, and the Court of Appeals for the Ninth Circuit upheld the ruling. But it based its decision on narrower grounds that apply only to California.
Once a state grants a fundamental right like marriage, the appeals court said, it cannot later take it away.
"The people of California may not, consistent with the federal Constitution, add to their state constitution a provision that has no more practical effect than to strip gays and lesbians of their right to use the official designation that the state and society give to committed relationships, thereby adversely affecting the status and dignity of the members of a disfavored class," wrote Judge Stephen Reinhardt.
If the Supreme Court affirms that decision, the ruling would affect only California, permitting marriage for same-sex couples to resume. No other state has granted and then withdrawn the marriage right for gay couples.
But the justices could go further and decide whether any state can refuse to permit same-sex couples to get married.
"The question whether the states may discriminate against gay men and lesbians in the provision of marriage licenses is the defining civil rights issue of our time," argues Ted Olson, the Washington, D.C., lawyer representing two gay couples who challenged the California measure.
The Supreme Court could also reverse the lower courts and uphold Proposition 8 as a legitimate exercise of the people's right to amend their state constitution, an outcome urged by the ballot measure's backers.
The appeals court decision, they argue, "threatens to short-circuit further democratic deliberations regarding official recognition of same-sex relationships."
The Supreme Court also gave itself a way out of reaching the merits of the California case. It directed lawyers for both sides to address an unusual aspect of the controversy.
After voters approved the initiative, which became part of the state constitution, California officials declined to defend it and the legal battle was picked up by Prop 8's backers. The Supreme Court wants to know if they had the legal authority to stand in for the state and carry on that battle.
The second case the Supreme Court agreed on Friday to hear is a challenge to a federal law passed in 1996 and signed by President Clinton. The Defense of Marriage Act, known as DOMA, bars federal agencies from recognizing same-sex marriages in the states where they are legal under state law.
The court took up a lawsuit filed by a New York woman, Edie Windsor, who lived for more than 40 years with her partner, Thea Spyer, marrying her in Canada in 2007.
But when Spyer died two years later, leaving Windsor the estate, the IRS sent a tax bill for $363,000, because the federal government did not recognize their marriage. The surviving spouse of a traditional marriage is generally not required to pay federal estate taxes.
"It was the injustice, I think, ultimately," Windsor says. "I couldn't believe that they were making a stranger of this person I lived with and loved for 43-something years."
A decision striking down DOMA would not, by itself, require states to allow same-sex marriages. But the federal government would be required to recognize those marriages in the states where they are legal.
In that case, too, the court provided itself an off-ramp. After first defending the law, the Obama administration concluded last year that DOMA was unconstitutional. House Republicans picked up the legal defense. The Supreme Court asked lawyers for both sides to address whether the House Republicans have the legal right to carry on the appeal.
Both cases will be argued in March, and a decision probably will not come before late in June.
More content from NBCNews.com:
- US Supreme Court to take up same-sex marriage issue
- Obama seeking $60.4 billion for post-Sandy recovery
- Advocates on both sides hope for Supreme Court clarity on same-sex marriage
- Woman survives six days in snow eating tomatoes
- 'My puppy saved my life': SUV rams into man's jewelry store, which he had just left
- Shark bait? Rotting whale on Malibu beach raises fear
- Mormon church website: 'Sexuality is not a choice'


text:
Difference between revisions of "Cinnamon"
m (→Themes and icons: - Add a shell command for changing desktop theme)
m (→Themes and icons: - Add a missing semicolon)
|Line 125:
|Line 125:
Official Linux Mint Cinnamon themes can be installed using the {{AUR|mint-cinnamon-themes}} package.
Official Linux Mint Cinnamon themes can be installed using the {{AUR|mint-cinnamon-themes}} package.
Setting the desktop theme via shell can be done like this
Setting the desktop theme via shell can be done like this
$ gsettings set org.cinnamon.theme name "''Theme-Name''"
$ gsettings set org.cinnamon.theme name "''Theme-Name''"
Revision as of 07:58, 3 November 2017
Cinnamon is a desktop environment which combines a traditional desktop layout with modern graphical effects. The underlying technology was forked from the GNOME desktop. As of version 2.0, Cinnamon is a complete desktop environment and not merely a frontend for GNOME like GNOME Shell and Unity.
- 1 Installation
- 2 Starting Cinnamon
- 3 Configuration
- 4 Tips and tricks
- 4.1 Creating custom applets
- 4.2 Default desktop background wallpaper path
- 4.3 Show home, filesystem desktop icons
- 4.4 Menu editor
- 4.5 Workspaces
- 4.6 Hide desktop icons
- 4.7 Themes and icons
- 4.8 Sound events
- 4.9 Resize windows by mouse
- 4.10 Portable keybindings
- 4.11 Screenshot
- 4.12 Prevent Cinnamon from overriding xrandr/xinput configuration
- 5 Troubleshooting
Cinnamon can be installed with the package cinnamon.
Starting Cinnamon
Graphical log-in
Choose Cinnamon or Cinnamon (Software Rendering) from the menu in a display manager of choice. Cinnamon is the 3D accelerated version, which should normally be used. If you experience problems with your video driver (e.g. artifacts or crashing), try the Cinnamon (Software Rendering) session, which disables 3D acceleration.
Starting Cinnamon manually
If you prefer to start Cinnamon manually from the console, add the following line to Xinitrc:
exec cinnamon-session
If the Cinnamon (Software Rendering) session is required, use
cinnamon-session-cinnamon2d instead of
Restarting Cinnamon
From a command line, execute the following line:
$ nohup cinnamon --replace > /dev/null 2>&1 &
Cinnamon is quite easy to configure — most common settings can be configured graphically. Its usability can be expanded with applets and extensions, and also it supports theming.
Cinnamon settings
cinnamon-settings launches a settings module specified on the command line. Without (correct) arguments, it launches System Settings. For example, to start the panel settings:
$ cinnamon-settings panel
To list all available modules:
$ pacman -Ql cinnamon | awk -F'[_.]' '/cs_.+\.py/ {print $2}'
- Printers
- For configure printers, install system-config-printer and the gtk3-print-backends package.
- Networking
- To add support for the networking module, enable Network Manager. In order for NetworkManager to store Wi-Fi passwords, you will need to also install GNOME Keyring.
- Bluetooth
- For Bluetooth device support, install the blueberry package.
Applets and extensions
While an applet is an addition to the Cinnamon panel, an extension can fully change the Cinnamon experience. They can be installed from the AUR, (package search), or from inside Cinnamon (Get more online):
$ cinnamon-settings applets $ cinnamon-settings extensions
Alternatively, install manually from Cinnamon spices.
r in the
Alt+F2 dialog box.
This is the default behaviour. To change the setting open the
cinnamon-settings panel and click on the "Power Management" option. Change the "When the power button is pressed" option to your desired behaviour.
Manage languages used in Cinnamon
- To add/remove languages: see Locale.
- To change between enabled languages: install the mintlocaleAUR package.
- To change the keyboard layout: navigate to System Settings > Hardware > Keyboard > Layouts.
Tips and tricks
Creating custom applets
The official tutorial on creating a Cinnamon applet can be found here.
Default desktop background wallpaper path
When you add a wallpaper from a custom path in Cinnamon Settings, Cinnamon copies it to
~/.cinnamon/backgrounds. Thus, with every change of your wallpaper you would have to add your updated wallpaper again from the settings menu or copy / symlink it manually to
Show home, filesystem desktop icons
By default Cinnamon starts with desktop icons enabled but with no desktop icons on screen. To show desktop icons for the home folder, the filesystem, the trash, mounted volumes and network servers open Cinnamon settings and click on desktop. Enable the checkboxes of the icons you want to see on screen.
Menu editor
The Menu applet supports launching custom commands. Right click on the applet, click on Configure... and then Open the menu editor. Select a sub-menu (or create a new one) and select New Item. Set Name, Command and Comment. Check the launch in terminal checkbox if needed. Leave unchecked for graphical applications. Click OK and close the menu editor afterwards. The launcher is added to the menu.
A workspace pager can be added to the panel. Right click the panel and choose the option Add applets to the panel. Add the Workspace switch applet to the panel. To change its position right click on the panel and change the Panel edit mode on/off switch to on. Click and drag the switcher to the desired position and turn the panel edit mode off when finished.
By default there are 2 workspaces. To add more, hit
Control+Alt+Up to show all workspaces. Then click on the plus sign button on the right of the screen to add more workspaces.
Alternatively, you can choose the number by command-line:
$ gsettings set org.cinnamon.desktop.wm.preferences num-workspaces 4
Replacing 4 with the number of workspaces you want.
Hide desktop icons
The desktop icons rendering feature is enabled in nemo by default. To disable this feature, change the setting with the following command:
$ gsettings set org.nemo.desktop show-desktop-icons false
Themes and icons
Linux Mint styled themes and icons can be installed with the mint-x-themeAUR and mint-x-iconsAUR packages. The themes can be edited in
Settings → Themes → Other settings.
Official Linux Mint Cinnamon themes can be installed using the mint-cinnamon-themesAUR package.
Setting the desktop theme via shell can be done like this:
$ gsettings set org.cinnamon.theme name "Theme-Name"
Sound events
Cinnamon does not come with sounds used for events like the startup of the desktop that are also used in Linux Mint by default. These sound effects can be installed with the cinnamon-sound-effectsAUR and mint-soundsAUR packages. The sound events can be edited in
Settings → Sound → Sound Effects.
Resize windows by mouse
To resize windows with
Alt+Right click, use
gsettings set org.cinnamon.desktop.wm.preferences resize-with-right-button true
Portable keybindings
To export your keyboard shortcut keys, you should do:
dconf dump /org/cinnamon/desktop/keybindings/ >keybindings-backup.dconf
To later import it (for example) on another computer, do:
dconf load /org/cinnamon/desktop/keybindings/ <keybindings-backup.dconf
As explained in Taking a screenshot, installing gnome-screenshot will add this functionality. The default shortcut key is
Prt Sc key. This binding ca be changed in the applet Menu > Preferences > Keyboard under Shortcuts > System > Screenshots and Recording. The default save directory is
$HOME/Pictures, but can be customized with eg.
$ gsettings set org.gnome.gnome-screenshot auto-save-directory file:///home/USER/some_path
Prevent Cinnamon from overriding xrandr/xinput configuration
The cinnamon-settings-daemon provides a number of plugins which can manage the display, keyboard and mouse. These plugins will override user set configuration (such as xrandr commands in the xinitrc file). To stop user set configuration from being overridden, it is necessary to prevent the settings daemon plugins from being started.
This can be done by copying the .desktop entry for the relevant settings daemon plugin (these will be located in
/etc/xdg/autostart/) to
$HOME/.config/autostart. Then append the line
Hidden=true to each copied entry.
cinnamon-session --debug to see which plugins are reported to have been started.
To preserve display, keyboard and mouse settings, consider disabling the following:
cinnamon-settings-daemon-a11y-keyboard.desktop cinnamon-settings-daemon-a11y-settings.desktop cinnamon-settings-daemon-keyboard.desktop cinnamon-settings-daemon-mouse.desktop cinnamon-settings-daemon-xrandr.desktop
cinnamon-settings: No module named Image
If cinnamon-settings does not start with the message that it cannot find a certain module, e.g. the Image module, it is likely that it uses outdated compiled files which refer to no longer existing file locations. In this case remove all
*.pyc files in
/usr/lib/cinnamon-settings and its sub-folders. See the upstream bug report.
Video tearing
Because muffin is based upon mutter, video tearing fixes for GNOME should also work in Cinnamon. See GNOME/Troubleshooting#Tear-free video with Intel HD Graphics for more information.
Disable the NetworkManager applet
Even if you do not use NetworkManager and remove the Network Manager applet from the default panel, Cinnamon will still load nm-applet and display it in the system tray.
You cannot uninstall the package, because it is required by cinnamon and cinnamon-control-center, but you can still easily disable it. To do so copy the autostart file from
/etc/xdg/autostart/nm-applet.desktop to
~/.config/autostart/nm-applet.desktop. Open it with your favorite text editor and add at the end
Alternatively you can disable it by creating the following symlink:
$ ln -s /bin/true /usr/local/bin/nm-applet
The ability to blacklist particular icons from the system tray (such as the nm-applet icon) has been requested upstream.


text:
It happened again. A lesser-known company in the genealogy business sent a press release to me this morning, obviously hoping I would publish it in my newsletter. After reading the announcement, I wasn't very impressed with this new product. However, what really turned me off was the frequent use of the word "amazing."
"This amazing new product…"
"These amazing stories…"
"You will be amazed…"
It sounded like an infomercial on late-night television from Ronco-Popeil. "This amazing product slices and dices…"
I wasn't too impressed with the rest of the announcement, either. Once I mentally removed the word "amazing" from the announcement, all that was left was a rather unamazing announcement of a new addition to an existing web site that apparently duplicates what many other web sites already offer. I am not publishing the announcement here.
I will offer two pieces of advice:
1. To any company or other organization that sends out press releases: Write announcements, not advertisements that sound like stupid television commercials. Tone down the hyperbole.
2. To everyone else: Whenever you read or hear the word "amazing" or any other, similar words in commercials or announcements, hang on to your wallet really tight. The thing that is described as "amazing" probably isn't. Also, I suggest you count the number of exclamation marks. It strikes me the more exclamation marks used in the announcement or advertisement, the less the product is probably worth.


text:
Once upon a time there was no decent open-source search engine. Then, at the very beginning of this millennium Doug Cutting gave us Lucene. Several years later Yonik Seeley wrote Solr. In 2010 Shay Banon released ElasticSearch. And just a few days ago John Wang and his team at LinkedIn announed Sensei 1.0.0 (also known as SenseiDB). Here at Sematext we've been aware of Sensei for a while now (2 years?) and are happy to have one more great piece of search software available for our own needs and those of our customers. As a matter of fact, we are so excited about Sensei that we've already started hacking on adding support for Sensei to SPM, our Scalable Performance Monitoring tool and service! Since Sensei is brand new, we asked John to tell us a little more about it.
Please tell us a bit about yourself.
My name is John Wang, and I am the search architect at LinkedIn.com. I am the creator and the current lead for the Sensei project.
Could you describe Sensei for us?
Sensei is an open-source, elastic, realtime, distributed database with native support for searching and navigating both unstructured text and structured data. Sensei is designed to handle complex semi-structured queries on very large, and rapidly changing datasets.
It was written by the content search team at LinkedIn to support LinkedIn Homepage and Signal.
The core engine is also used for LinkedIn search properties, e.g. people search, recruiter system, job and company search pages.
Why did you write Sensei instead of using Lucene or Solr?
Sensei leverages Lucene.
We weren't able to leverage Solr because of the following requirements:
- High update requirement, 10's of thousands updates per second in to the system
- Real distributed solution, current Solr's distributed story has a SPOF at the master, and Solr Cloud is not yet completed.
- Complex faceting support. Not just your standard terms based faceting. We needed to facet on social graph, dynamic time ranges and many other interesting faceting scenarios. Faceting behavior also needs to be highly customizable, which is not available via Solr.
What does Sensei do that existing open-source search solutions don't provide?
Consider Sensei if your application has the following characteristics:
- High update rates
- Non-trivial semi-structured query support
Who should stick with Solr or ElasticSearch instead of using Sensei?
The feature set, as well as limitations of all these system don't overlap fully. Depending on your application, if you are building on certain features in one system and it is working out, then I would suggest you stick with it. But for Sensei, our philosophy is to consider performance ahead of features.
Are there currently any Sensei users other than LinkedIn that you are aware of?
We have seen some activities on the mailing list indicating deployments outside of LinkedIn, but I don't know the specifics. This is a new project and we are keeping track of its usage on http://senseidb.github.com/sensei/usage.html, so let us know if you are using Sensei and want to be listed there.
What are Sensei's biggest weaknesses and how and when do you plan on addressing them?
Let me address this question by providing a few limitations of Sensei:
- Each document inserted into Sensei must have a unique identifier (UID) of type long. Though this can be inconvenient, this is a decision made for performance reasons. We have no immediate plans for addressing this, but we are thinking about it.
- For columns defined in numeric format, e.g. int, float, long…, we don't yet support negative numbers. We will have support for negative numbers very soon.
- Static schema. Dynamic schema is something we find useful, and we will support it in the near future.
What's next for Sensei as a project?
We will continue iterating on Sensei on both the performance and feature front. See below for a list of things we are looking at.
What are some of the key features you plan on adding to Sensei in the coming months?
This may not be a comprehensive list, but gives you an idea areas we are working on:
- Relevance toolkit
- Built-in time and geo type columns
- Parent-node type documents
- Attribute type faceting (name-value pairs)
- Online rebalancing
- Online reindexing
- Parameter secondary store (e.g. activities on a document, social gestures, etc.)
- Dynamic schemata
- Support for aggregation functions, e.g. AVG, MIN, MAX, etc.
The Relevance toolkit sounds interesting. Could you tell us a bit about what this will do and if, by any chance, this might in any way be close to the idea behind Apache Open Relevance?
This is a big feature for 1.1.0. I am not familiar with Open Relevance to comment. The idea behind relevance toolkit is to allow you to specify a model with the query. One important usage for us is to be able to perform relevance tuning against fast-flowing production data. Waiting for things to be redeployed to production after relevance model changes does not work if the production data is changing in real-time, like tweets.
Maybe some specific tech questions – feel free to skip the ones that you think are not important or you just don't feel like answering.
What is the role of Norbert in Sensei?
Sensei currently uses Norbert , whose maintainer is one of our main developers ,as a cluster manager and RPC between a Broker and Sensei nodes. A Broker is servlet embedded in each Sensei node. Norbert is used as a message transport to Sensei nodes.. Norbert is an elegant wrapper around Zookeeper for cluster management. We do have plans to create abstraction around this component to allow pluggability for other cluster managers.
When I first saw SQL-like query on Sensei's home page I thought it was purely for illustration purposes, but now I realize it is actually very real!
BQL – Browse Query Language, is a SQL-variant to query Senesi. It is very real, we plan for BQL to be a standard way to query Sensei.
Can you share with us any Sensei performance numbers?
We have published some performance numbers at http://senseidb.com/performance.html
We have created a separate Github repository containing all our performance evaluation code at:
Does Sensei have a SPOF (Single Point Of Failure)?
No – assuming a Sensei cluster contains more than 1 replica of each document. This is one important design goal of Sensei: every Sensei node in the cluster acts independently in both consuming data as well as handling queries. See the following answers for details.
What has to happen for data loss to occur?
Data loss occurs only if you have data store corruption on all replicas. If only 1 replica is corrupted, you can always recover from other replicas.
Sensei by design assumes a data source that is ordered and versioned, e.g., a persistent queue. Each Sensei node persists the version for each commit. Thus, to recover data events can be replayed from that version.
In production at Linkedin, this is very handy to ensure data consistency when bouncing nodes.
You mention recovery from other replicas and recovery by replaying data events from a specific version. Does that mean once a copy of a document makes it into Sensei in order to recover lost replicas for that document Sensei does not need to reach out to the originator of the data and is self-sufficient, so to speak? Or does replaying mean getting the lost data from an external data store?
The data stream is external. So to catch-up from an older version, Sensei would just re-play the data events from the stream using this version. But if an entire data replica is lost, a manual copy from other replicas is required (for now).
What happens if a node in a cluster fails?
When a node fails, Zookeeper notifies other cluster event listeners in the cluster, which means the Broker. Broker keeps a state of the current cluster node topology, and subsequent queries will be routed to the live replicas, thus avoiding sending requests to the failed node. If all nodes for one replica are down, then partial results are returned.
What happens when the cluster reaches its capacity? Can one simply add more nodes to the cluster and Sensei auto-magically takes care of the rest or does one have to manually rebalance shards, or…?
Depending on how data is sharded:
If over-sharding technique is used, then adding nodes to the cluster is trivial. New nodes would just specify which shards they want to handle – every node in sensei.properties indicates partitions it should handle, e.g., sensei.node.partitions=1,3,8
If using sharding strategy where data migration is not needed as new data is flowing into the system, e.g., sharding by time or consecutive UID, then expanding the cluster is also trivial.
If such sharding strategy requires data migration, e.g. mod based sharding. Then cluster rebalancing is required. This is coming in a future release, where we already have designs for online data rebalancing. For now, one has to reindex all data in order to reshard and rebalance.
Since Sensei is an eventually consistent system, how does one insure the search client gets consistent results (e.g. when paging through results or filtering results with facets)?
On the Sensei request object, there is a routing parameter. Typically this routing parameter is set to the value of the search session. By default, Sensei applies consistent hashing on the routing parameter to make sure the same replica is used for queries with the same routing parameter or search session.
How does one upgrade Sensei? Can one perform an online upgrade of a Sensei cluster without shutting down the whole cluster? Are new versions of Sensei backwards compatible?
Yes, subsets of the cluster can be shut down, and dynamic routing via Zookeeper would take place. This is very useful when we are pushing out new builds in canary mode to ensure stability and compatibility.
Does Sensei require a schema or is it schemaless?
Sensei requires a schema. But we do have plans to make Sensei schema dynamic like ElasticSearch.
Does Sensei have support for things like Spatial Search, Function Queries, Parent-Child data, or JOIN?
We have in the works a relevance toolkit which should cover features of Solr's Function Queries.
We also have plans to support Spatial Search and Parent-Child data.
We don't have immediate plans to support Joins.
How does one talk to Sensei? Are there existing client libraries?
The Sensei cluster exposes 2 rest end-points: REST/JSON and BQL.
The packaging also include Java and Python clients, (also Ruby if resourcing works out), along with JavaScript helpers for using the REST/JSON API in a web application.
Does Sensei have an administrative/management UI?
Sensei comes with a web application for helping with building queries against the cluster. We use it to tweak relevance models as well as instrumenting an online cluster.
JMX is also exposed to administer the cluster.
In the configuration users can turn on other types of data reporting to other clusters, e.g. RRD, log etc.
Big thank you to John and his team for releasing and open-sourcing Sensei and for taking the time to answer all our questions.