text:
regcomp(3G) regcomp(3G)
regcomp: regexec, regerror, regfree - regular expression matching
#include <sys/types.h>
#include <regex.h>
int regcomp (regex_t *preg<b>, const char *pattern<b>, int cflags<b>);
int regexec (const regex_t *preg<b>, const char *string<b>, size_t nmatch<b>,
regmatch_t pmatch[], int eflags<b>);
size_t regerror (int errcode<b>, const regex_t *preg<b>, char *errbuf<b>, size_t
size_t regfree (regex_t *preg<b>);
The structure type regex_t contains the following members:
int re_magic RE magic number
size_t re_nsub number of parenthesized subexpressions
const char *re_endp end pointer for REG_PEND
struct re_guts *re_g internal RE data structure
The structure type regmatch_t contains the following members:
regoff_t rm_so Byte offset from start of string to start
of substring
regoff_t rm_eo Byte offset from start of string of the
first character after the end of substring
The regcomp() function will compile the regular expression contained in
the string pointed to by the pattern argument and place the results in
the structure pointed to by preg. The cflags argument is the bitwise
inclusive OR of zero or more of the following flags, which are defined in
the header <regex.h>:
REG_EXTENDED Use Extended Regular Expressions.
REG_ICASE Ignore case in match.
REG_NOSUB Report only success/fail in regexec() .
REG_NEWLINE Change the handling of newline characters,
as described in the text.
The default regular expression type for pattern is a Basic Regular
Expression. The application can specify Extended Regular Expressions
Page 1
regcomp(3G) regcomp(3G)
using the REG_EXTENDED cflags flag.
On successful completion, it returns 0; otherwise it returns non-zero,
and the content of preg is undefined.
If the REG_NOSUB flag was not set in cflags, then regcomp() will set
re_nsub to the number of parenthesised subexpressions (delimited by \( \)
in basic regular expressions or ( ) in extended regular expressions)
found in pattern.
The regexec() function compares the null-terminated string specified by
string with the compiled regular expression preg initialised by a
previous call to regcomp(). If it finds a match, regexec() returns 0;
otherwise it returns non-zero indicating either no match or an error.
The eflags argument is the bitwise inclusive OR of zero or more of the
following flags, which are defined in the header <regex.h>:
REG_NOTBOL The first character of the string pointed to
by string is not the beginning of the line.
Therefore, the circumflex character (^), when
taken as a special character, will not match
the beginning of string.
REG_NOTEOL The last character of the string pointed to
by string is not the end of the line.
Therefore, the dollar sign ($), when taken
as a special character, will not match the
end of string.
If nmatch is 0 or REG_NOSUB was set in the cflags argument to regcomp() ,
then regexec() will ignore the pmatch argument. Otherwise, the pmatch
argument must point to an array with at least nmatch elements, and
regexec() will fill in the elements of that array with offsets of the
substrings of string that correspond to the parenthesised subexpressions
of pattern: pmatch[i].rm_so will be the byte offset of the beginning and
pmatch[i].rm_eo will be one greater than the byte offset of the end of
substring i. (Subexpression i begins at the ith matched open parenthesis,
counting from 1.) Offsets in pmatch[0] identify the substring that
corresponds to the entire regular expression. Unused elements of pmatch
up to pmatch[nmatch-1] will be filled with -1. If there are more than
nmatch subexpressions in pattern (pattern itself counts as a
subexpression), then regexec() will still do the match, but will record
only the first nmatch substrings.
When matching a basic or extended regular expression, any given
parenthesised subexpression of pattern might participate in the match of
several different substrings of string, or it might not match any
substring even though the pattern as a whole did match. The following
rules are used to determine which substrings to report in pmatch when
matching regular expressions:
Page 2
regcomp(3G) regcomp(3G)
1. If subexpression i in a regular expression is not
contained within another subexpression, and it participated in
the match several times, then the byte offsets in pmatch[i]
will delimit the last such match.
2. If subexpression i is not contained within another
subexpression, and it did not participate in an otherwise"
successful match, the byte offsets in pmatch[i] will be -1. A
subexpression does not participate in the match when: * or \{
\} appears immediately after the subexpression in a basic
regular expression, or *, ?, or { } appears immediately after
the subexpression in an extended regular expression, and the
subexpression did not match (matched 0 times)
| is used in an extended regular expression to select this
subexpression or another, and the other subexpression matched.
3.If subexpression i is contained within another
subexpression j, and i is not contained within any other
subexpression that is contained within j, and a match of
subexpression j is reported in pmatch[j], then the match or
non-match of subexpression i reported in pmatch[i] will be as
described in 1. and 2. above, but within the substring reported
in pmatch[j] rather than the whole string.
4.If subexpression i is contained in subexpression j, and
the byte offsets in pmatch[j] are -1, then the pointers in
pmatch[i] also will be -1.
5.If subexpression i matched a zero-length string, then
both byte offsets in pmatch[i] will be the byte offset of the
character or null terminator immediately following the zerolength
If, when regexec() is called, the locale is different from when the
regular expression was compiled, the result is undefined.
If REG_NEWLINE is not set in cflags, then a newline character in pattern
or string will be treated as an ordinary character. If REG_NEWLINE is
set, then newline will be treated as an ordinary character except as
1.A newline character in string will not be matched by a
period outside a bracket expression or by any form of a nonmatching
Page 3
regcomp(3G) regcomp(3G)
2.A circumflex (^) in pattern, when used to specify
expression anchoring, will match the zero-length string
immediately after a newline in string, regardless of the
setting of REG_NOTBOL.
3.A dollar-sign ($) in pattern, when used to specify
expression anchoring, will match the zero-length string
immediately before a newline in string, regardless of the
setting of REG_NOTEOL.
The regfree() function frees any memory allocated by regcomp()
associated with preg.
The following constants are defined as error return values:
REG_NOMATCH regexec() failed to match.
REG_BADPAT Invalid regular expression.
REG_ECOLLATE Invalid collating element referenced.
REG_ECTYPE Invalid character class type referenced.
REG_EESCAPE Trailing \ in pattern.
REG_ESUBREG Number in \digit invalid or in error.
REG_EBRACK [ ] imbalance.
REG_ENOSYS The function is not supported.
REG_EPAREN \( \) or ( ) imbalance.
REG_EBRACE \{ \} imbalance.
REG_BADBR Content of \{ \} invalid: not a number, number
too large, more than two numbers, first
larger than second.
REG_ERANGE Invalid endpoint in range expression.
REG_ESPACE Out of memory.
REG_BADRPT ?, * or + not preceded by valid regular
The regerror() function provides a mapping from error codes returned by
regcomp() and regexec() to unspecified printable strings. It generates
a string corresponding to the value of the errcode argument, which must
be the last non-zero value returned by regcomp() or regexec() with the
Page 4
regcomp(3G) regcomp(3G)
given value of preg. If errcode is not such a value, the content of the
generated string is unspecified.
If preg is a null pointer, but errcode is a value returned by a previous
call to regexec() or regcomp(), the regerror() still generates an error
string corresponding to the value of errcode.
If the errbuf_size argument is not 0, regerror() will place the generated
string into the buffer of size errbuf_size bytes pointed to by errbuf. If
the string (including the terminating null) cannot fit in the buffer,
regerror() will truncate the string and null-terminate the result.
If errbuf_size is 0, regerror() ignores the errbuf argument, and returns
the size of the buffer needed to hold the generated string.
If the preg argument to regexec() or regfree() is not a compiled
regular expression returned by regcomp() , the result is undefined. A
preg is no longer treated as a compiled regular expression after it is
given to regfree() .
On successful completion, the regcomp() function returns 0. Otherwise,
it returns an integer value indicating an error as described in
<regex.h>, and the content of preg is undefined.
On successful completion, the regexec() function returns 0. Otherwise
it returns REG_NOMATCH to indicate no match, or REG_ENOSYS to indicate
that the function is not supported.
Upon successful completion, the regerror() function returns the number
of bytes needed to hold the entire generated string. Otherwise, it
returns 0 to indicate that the function is not implemented.
The regfree() function returns no value.
#include <regex.h>
* Match string against the extended regular expression in
* pattern, treating errors as no match.
* return 1 for match, 0 for no match
int match(const char *string, char *pattern) {
int status;
regex_t re;
if (regcomp(&re, pattern, REG_EXTENDED | REG_NOSUB) != 0)
Page 5
regcomp(3G) regcomp(3G)
return(0); /* report error */
status = regexec(&re, string, (size_t) 0, NULL, 0);
if (status != 0) {
return(0); /* report error */
The following demonstrates how the REG_NOTBOL flag could be used with
regexec() to find all substrings in a line that match a pattern supplied
by a user. (For simplicity of the example, very little error checking is
(void) regcomp (&re, pattern, 0);
/* this call to regexec( ) finds the first match
* on the line
error = regexec (&re, &buffer[0], 1, &pm, 0);
while (error == 0) { /* while matches found */
/* substring found between pm.rm_so and pm.rm_eo */
/* This call to regexec( ) finds the next match */
error = regexec (&re, buffer + pm.rm_eo, 1,
&pm, REG_NOTBOL);
An application could use:
regerror(code,preg,(char *)NULL,(size_t)0)
to find out how big a buffer is needed for the generated string, malloc()
a buffer to hold the string, and then call regerror() again to get the
string. Alternately, it could allocate a fixed, static buffer that is big
enough to hold most strings, and then use malloc() to allocate a larger
buffer if it finds that this is too small.
fnmatch(3g), glob(3g), <sys/types.h>, <regex.h>
PPPPaaaaggggeeee 6666


text:
100 Best Midwest Small-Town Getaways
The Midwest's best small towns
The Midwest has about 8,500 towns with populations less than 20,000. Midwest Living® writers and editors have been looking for the best ones since the magazine's first issue in 1987. For this list of the best small-town getaways, we added another layer of research that spanned several months and ranked towns in terms of attractions, vibe, scenery, walkability, shopping, dining, lodging, arts scene, outdoor activities, proximity to major cities, multiday potential and special events.
We excluded suburbs, and we didn't consider livability factors such as education or employment. It took us years to compile this list of the best places to visit, but you'll only need a weekend in any of these to see why we did. (Pictured: Marshall, Michigan.)
Ephraim/Fish Creek, Wisconsin
New England is known for its quaint landscapes, but the Midwest has its own coastal charm around the Great Lakes. Our top towns in Door County are the best examples of it: Ephraim and Fish Creek bookend Peninsula State Park.
Rent bikes and ride down the coastline, check out the two towns' dozen of art galleries, or go shopping at high-end boutiques. The towns' signature meal is a fish boil, an outdoor show with flames billowing around a cauldron of whitefish, potatoes and onions. Top if off with pie made with cherries from the orchards that flourish in the peninsula's interior.
Petoskey/ Charlevoix, Michigan
These neighboring resort towns along the Lower Peninsula's northwest shore began entertaining vacationers who came by steamship more than a century ago. No wonder they're so good at it, offering an ever-growing to-do list for travelers and a relaxed attitude. Petoskey climbs hills along Little Traverse Bay, and Charlevoix (pictured) nestles between Lake Michigan and Lake Charlevoix 17 miles southwest.
The beach and harbor are steps from the 100 shops and galleries of Petoskey's Gaslight District and landmark Stafford's Perry Hotel. Charlevoix's boutiques string along the waterfront. Local restaurants, including Palette Bistro and Jesperson's (good pie!) deliver memorable meals. In the warmer months, visitors golf at the Inn at Bay Harbor, a first-class resort with courses heralded as the Midwest's Pebble Beach.
Galena, Illinois
The preservation movement in this old lead-mining town has effectively defined the trend toward small towns reinventing themselves. Framed by northwest Illinois hills, the business district's century-old buildings now house more than 90 shops filled with antiques, home accessories and art. Some 50 inns and hotels welcome travelers, and restaurants serve seemingly every taste. If Main Street or the many festivals get too crowded, escape with a hot-air balloon ride, spa treatment or pottery class.Related Links
Madison, Indiana
Towering limestone bluffs and the Ohio River frame picturesque Madison, an old riverboat port of 12,400. This town is so tied to the past, 133 downtown blocks are on the National Historic Register of Historic Places, with buildings dating back to 1817. Antiques dealers fill the district, which has served as a model for preservation of other towns. A brick river walk leads visitors close to touring riverboats that regularly dock with loads of vacationers, and a stroll through Madison's hilly streets provides glimpses of lush gardens around grand old homes, some converted to inns.
Drives out of town meander to several award-winning wineries, some of the area's best bike trails and Clifty Falls State Park, where seven waterfalls flow.
Saugatuck/ Douglas, Michigan
These side-by-side Lake Michigan shore villages are so artsy, residents take for granted having their portraits painted. Their likenesses hang in one of the 40 galleries that liberally mingle with an appealing collection of boutiques. Visitors not only fine original art adorning studio windows, but also they get accustomed to encountering sculptures on almost every corner of Saugatuck and Douglas.
Artists set up easels among the swimmers and sunbathers enjoying the crescent of white sand to capture Oval Beach (considered one of the county's best) on canvas. Summer also brings an acclaimed film festival and jazz- and chamber-music series.
Nashville, Indiana
So-called progress never made it to Nashville, the seat of Brown County, a haven of hills and forests 50 miles south of Indianapolis. That's fine with the artists who live and work in studios tucked amid the town's 250 shops and the countryside. Indiana painter T.C. Steele founded the artists' colony here, drawn by the vistas that seem to spread from every hilltop. The woodsy setting around Nashville also suits hikers and others who explore nearby Brown County State Park, Indiana's largest.
Bayfield, Wisconsin
Lake Superior adventure awaits visitors to this town of 600 on the Bayfield Peninsula. Like jewels tossed into the sapphire water, the 22 Apostle Islands lie just offshore. On summer days, Bayfield's harbor is full of kayaks and tour boats going to and from the beaches, lighthouses and campsites in the legendary archipelago.
More relaxed explorers ride ferries to Madeline Island, the only inhabited Apostle, which offers shops, a renowned beach, a museum and places to eat. The shops, inns and restaurants of Bayfield look down from hills along the lake. The surrounding peninsula is marked by pay-on-your-honor berry and apple stands and an absence of chain stores. Most summer nights bring performing arts under the old-fashioned Big Top Chautauqua tent.
Put-in-Bay, Ohio
A storybook family getaway is just a ferry ride away from northwest Ohio's Lake Erie shoreline. Only boats connect South Bass Island and its town of Put-in-Bay to the mainland, so most visitors leave cars behind. That usually reduces the traffic noise among shops and restaurants to no more than the hum of golf carts and the jingling bells on rental bicycles.
Family attractions fill the island, including museums, cave tours, fishing charters and a 1917 carousel. For the best area view, climb the 352-foot Perry's Victory and International Peace Memorial, a white column commemorating a U.S. victory in the War of 1812.
- Photo courtesy of Stillwater CVB,
Stillwater, Minnesota
The timber of the St. Croix River Valley on the Minnesota/Wisconsin border built the fortunes behind Stillwater's Victorian mansions, and the forest and craggy river valley still supply scenery visitors love. The town about 20 miles east of Saint Paul lures travelers with an irresistible mix: a dozen inns and a historic downtown sprinkled with antiques shops and bookstores that bring collectors from all over the world.
Shore drives lead to notable towns, including Marine on St. Croix and Taylors Falls. Train and riverboat tours are staples. Plus, Stillwater offers one of the region's most surprising boat tours: St. Croix cruises in a gondola built in Venice.
Mackinac Island area, Michigan
It's become a cliche to say that arriving by ferry at an island's harborside village is like stepping back in time. But it's so true at Mackinac Island that you'll wonder if the idea originated on this Gilded Age holdover. The queen of Victorian Era resorts, the white-columned Grand Hotel (left), occupies a bluff over the waters between Michigan's peninsulas.
Because cars are banned, the signature sound is the clip-clop of horses' hooves. Visitors take carriage tours, ride bikes, taste famous fudge and tour the 1700s fort. Back on the mainland, explore the island's gateways, St. Ignace and Mackinaw City, linked by the five-mile Mackinac Bridge.
Find history in Illinois
Alto Pass/Jonesboro These two rustic towns provide a base for outings in southern Illinois' Shawnee National Forest (left) and a growing wine scene. Alto Pass/Jonesboro
Bishop Hill Descendants of settlers preserve a Swedish-American Utopian community's legacy. Bishop Hill
Alton/Elsah/Grafton Historic buildings, antiques shops and inns line the Mississippi. Alton/Elsah/Grafton
Nauvoo You'll find restored buildings and reenactors in this onetime Mormon enclave on the Mississippi River, in addition to a winery and historic hotel. Nauvoo
Arcola/Arthur Amish country sits nearby, so visit shops selling Amish everything or lots of places for hearty food. Arcola; Arthur
Indiana's classic villages
Seymour The inspiration for much of John Mellencamp's music offers an arts center (left) and hiking in the nearby Jackson-Washington State Forest. Seymour
Chesterton Home of a Wizard of Oz museum, this town also is near Indiana Dunes. Chesterton
Corydon Indiana's original capital has a vibrant town square, including a 55-year-old soda fountain, and it lies on the Ohio River Scenic Byway. Corydon
New Harmony Historic buildings, an inn and labyrinth recall communal life. New Harmony
Centerville This antiquing hotbed features buildings from the early-1800s heyday of the National Road. Centerville
Greencastle DePauw University anchors this town near Parke County's famed covered bridges. Greencastle
Shipshewana This epicenter of the simple farming life has hearty Amish-style food, furniture, quilts and other crafts. Shipshewana
Heritage and Hollywood in Iowa
Dyersville Check out the Field of Dreams movie site (left). The baseball diamond from the movie is still there, surrounded by fields of corn. The town also has farm toy, doll and woodcarving museums. Dyersville
Pella Go Dutch with a gingerbread-trimmed downtown, pastries, a re-created village and 80,000 tulips blooming for a festival every May. Pella
Amana Colonies Seven villages preserve a communal society's spirit with dining, museums and shops. Amana Colonies
Decorah Bluffs and clear streams surround a college town known for its major Norwegian-American museum and outdoor sports. Decorah
Okoboji/Spirit Lake Outdoor activities abound near these hubs for Iowa's "Great Lakes" region. Visit small amusement parks, play a round of golf, or enjoy some water sports on the lakes. Okoboji/Spirit Lake
McGregor/Marquette Neighboring towns are appealingly situated along the Mississippi with river views in Pikes Peak State Park. McGregor/Marquette
Keokuk Watch for bald eagles, and see a lock and dam on the Mississippi. Keokuk
Kansas: History, prairie -- and shopping
Atchison How did Amelia Earhart ever leave her pretty hometown on the Missouri? One possible answer: She never saw Nell Hill's popular home furnishing shops (left). Atchison
Abilene President Dwight Eisenhower credited his hometown for making him who he was. Visitors can take tours of his museum, home and library, and there's also a re-created cow-town complex. Abilene
Lindsborg This little town might be more Swedish than Sweden itself (in an old-timey way) -- with authentic crafts, foods and festivals. Its strong arts scene includes Bethany College. Lindsborg
Cottonwood Falls At this tiny but cool base for exploring the Flint Hills, visitors find high-end lodging/dining at Grand Central Hotel and live music at Emma Chase Cafe. Cottonwood Falls
Fort Scott Explore a frontier fort with 20-plus restored and re-created buildings. Fort Scott
Council Grove Historic sites dot this Santa Fe Trail town, and it's only a short drive to the Tallgrass Prairie National Preserve. Council Grove
Michigan's landmarks and lakeshores
Manistee The Victorian downtown connects to Lake Michigan by a boardwalk (left). Manistee
Frankenmuth "Little Bavaria" has chicken-dinner restaurants, the world's largest Christmas store (Bronner's) and year-round festivals. Frankenmuth
Marshall It takes a weekend to see all the significant buildings (850) in this designated National Historic Landmark District. The Honolulu House is a highlight. Marshall
Munising This laid-back village rests next to Lake Superior and the Pictured Rocks National Lakeshore. Munising
South Haven On the shores of Lake Michigan, this town has beaches within walking distance of downtown and inns, plus fresh foods at the edge of wine country. South Haven
Leland/Suttons Bay On the Leelanau Peninsula near Traverse City, this area showcases the lake's bounty: fresh fish, views and local wines. Leland; Suttons Bay
Copper Harbor Along one of the region's best drives, you'll find a Lake Superior harbor and lighthouse tours. Copper Harbor
Chesaning July's Showboat Festival brings big-name performers. Chesaning
Explore the Minnesota wilderness
Ely A wear-your-hiking-boots-to-dinner spirit energizes this jumping-off point for Boundary Waters canoe trips. There are also wolf and bear centers, resorts such as Burntside Lodge (left), and authentic North Woods restaurants. Ely
Grand Marais A onetime fishing village between the North Woods and Lake Superior draws both outdoorsy types and a big community of working artists. Grand Marais
Northfield The town is still proud of defeating Jesse James (celebrated at a huge fall festival), with lots more going for it, including shops and two picture-perfect college campuses. Northfield
Lanesboro This is a haven for cyclists and other lovers of the peaceful outdoors with the Root River trail, plus good food, inns and productions at the Commonweal Theatre. Lanesboro
Nisswa Don't miss summer's weekly turtle races at this hub for the vacation area around central Minnesota's lakes. Nisswa
Park Rapids This town is so laid-back, you wouldn't guess it's surrounded by busy lake resorts; it's also near Mississippi headwaters at Itasca State Park. Park Rapids
Wabasha Eagle watching on the Mississippi includes the National Eagle Center; Grumpy Old Men was filmed here. Wabasha
Red Wing This quaint Mississippi port is known for the restored St. James Hotel and tours of famous Red Wing pottery. Red Wing
Detroit Lakes This resort town favors a folksy, relaxed mood. Detroit Lakes
New Ulm Visitors enjoy music, festivals and shops selling imports in what the U.S. Census labeled the country's "most German city."
Mantorville Explore historic buildings, bike the trails and watch drama at local theater. Mantorville
Missouri's river hamlets
Rocheport Shops, inns and cafes cater to cyclists on the Katy Trail (left). Rocheport
Hannibal Fact and fiction blur in Mark Twain's hometown on the Mississippi River, with tours of his home, Tom Sawyer's cave, riverboat rides and Twain shows. Hannibal
Sainte Genevieve See amazing French Colonial architecture in one of the oldest settlements west of the Mississippi River. Sainte Genevieve
Fulton There's an arresting vibe at Westminster College, the site of Winston Churchill's "Iron Curtain" speech and home of a Berlin Wall segment. Fulton
Hermann It seems like you're right on the Rhine in this German village, but you're not. You're in Hermann, a hub for Missouri River wine country and cyclists' beloved Katy Trail. Hermann
Weston This is a time capsule of a town rich in pre-Civil War history with shops, museums and old homes. Weston
Carthage Civil War and Route 66 sites are here, as well as George Washington Carver's home. Carthage
Arrow Rock This town is home to the 1834 Arrow Rock Tavern and the respected Lyceum Theatre. Arrow Rock
Kimmswick Twenty-five shops and 157 people are in this Mississippi hamlet south of St. Louis; riverboat rides from St. Louis are offered in the summer. Kimmswick
North Dakota's wild west
Jamestown The buffalo still roam at this frontier village full of Western history. discoverjamestownnd.com
Medora Enjoy this western-theme-park of a town, gateway to Theodore Roosevelt National Park. Medora Musical celebrates TR's spirit. medora.com
Williston See a restored frontier fort at the historic junction of the Yellowstone and Missouri rivers. visitwilliston.com
Valley City This town of historic bridges, buildings and parks rests along Sheyenne River Valley National Scenic Byway. valleycitynd.org
Pioneer spirit in Nebraska
Nebraska City Newcomers travel here to visit the striking Lied Lodge (left) and the farm of Arbor Day founder J. Sterling Morton. They return for shops downtown and riverboat rides in nearby Brownville. Nebraska City
Crawford Home of Fort Robinson and site of key western events, this town's Pine Ridge landscape entertains visitors with activities like hiking, biking and golf. Crawford
Valentine A cowboy spirit prevails in a town that's the base for canoe trips on the famed Niobrara River. Valentine
Scottsbluff Get a taste of the Oregon Trail life at the namesake bluff, Chimney Rock and pioneer museums. Scottsbluff
Ogallala Real-life cowboys hang out in a base for visitors to Lake McConaughy's white beaches. Ogallala
Ohio's old-fashioned charm
Coshocton Living history abounds at Roscoe Village (left) with rides aboard horse-drawn boats on the Ohio-Erie Canal. Coshocton
Berlin This Midwest Amish hot spot village has tours, crafts shops and home-style restaurants. Berlin
Marietta You'll see lots of historic sites and old-time crafts in the area's first permanent settlement, along with boutiques and river cruises. Marietta
Lebanon This antiquers' mecca is also home of the Golden Lamb Inn, which is more than 200 years old and once welcomed Charles Dickens. Lebanon
Logan From here, you can explore the rolling woodlands of southern Ohio's Hocking Hills. Logan
Cambridge You'll find glass factories, shops and museums, as well as Salt Fork State Park, Ohio's largest. Cambridge
Granville Hilltop Denison University looks down on a New England-style town. Granville
Yellow Springs Funky shops and cafes line the streets of this free-spirited college town near a 75-mile bike path. Yellow Springs
Zoar A Utopian community lives on, with the help of reenactors. Zoar
South Dakota's Black Hills bounty
Pierre Check out the state capitol and memorials, Lewis and Clark history and vast Lake Oahe. Pierre
Custer City Growing like an Old West boom town, Custer City is the gateway to the Black Hills' best: Custer State Park, Mount Rushmore and Crazy Horse Memorial. Custer City
Deadwood Its Old West aura is mostly intact despite a huge gambling scene. You'll also find lots of winter sports and stunning Black Hills scenery. Deadwood
Hill City Another Black Hills boom in progress, this town has a growing group of art galleries as well as 1880s steam train rides. Hill City
Hot Springs At the Black Hills' southern edge, Hot Springs has an important fossil dig and a wild horse sanctuary. Hot Springs
Wisconsin: Lakes, art and more
Cedarburg This town's National Register limestone buildings are as sturdy as the work ethic of their German builders. Now they hold a wealth of shops and galleries. Cedarburg
Lake Geneva Visitors can promenade like the Victorian socialites who founded this pretty resort town on the 21-mile path that winds around the lake, past grand estates. Lake Geneva
Spring Green The inspired arts scene includes Frank Lloyd Wright's Taliesin home and studio and a world-class outdoor theater. The weirdly appealing House on the Rock is nearby. Spring Green
Elkhart Lake A mix that surprisingly works: classic Victorian town with the four-diamond Osthoff resort and a road-race course with 400 annual events. Elkhart Lake
Eagle River Summer is for lakeside resorts; winter is for snowmobiling on the extensive trail system. Eagle River
Mineral Point Artists work among preserved buildings in an 1820s Cornish lead-mining town. Mineral Point
Green Lake This is a quintessential Wisconsin lake town scene: water sports and supper clubs. Green Lake
New Glarus You'll find a little bit of Switzerland, including Alpine architecture and Heidi and Wilhelm Tell weekends. New Glarus
Ashland This town is home to Northern Great Lakes Visitor Center, ferries to the Apostle Islands and a serious ecoconscious ethic. Ashland
Hudson Inns, antiquing and outdoor activities are popular in this pretty town in the St. Croix River Valley. Hudson
Port Washington A lighthouse guards a Lake Michigan harbor that also has lakeside lodgings and dining. Port Washington
Baraboo Location. Location. Location. It's near the Dells, Circus World Museum and 500-foot cliffs in Devil's Lake State Park. Baraboo
Cambridge See Lake Ripley and the "Salt-glazed Pottery Capital of the World." Cambridge
(A version of this story appeared in Midwest Living® May/June 2007. It was updated in April 2011.)

subset: commoncrawl


text:
Tokyo Electric Power Co., operator of the devastated Fukushima Dai-Ichi nuclear power plant, plans to buy liquefied natural gas from the LNG terminal in Cameron Parish, Louisiana, raising expectations Japan will tap into the U.S. shale gas boom.
TOKYO (AP) - Tokyo Electric Power Co., operator of the devastated Fukushima Dai-Ichi nuclear power plant, plans to buy liquefied natural gas from the LNG terminal in Cameron Parish, Louisiana, raising expectations Japan will tap into the U.S. shale gas boom.
TEPCO plans to buy 400,000 tons of LNG a year, for 20 years beginning in 2017, from the Cameron project through trading house Mitsui & Co. It expects a similar deal with Mitsubishi Corp. and other deals that would boost its imports by 1.2 million tons a year.
Both deals link the LNG price to the Henry Hub benchmark, at about $3.30 per million metric British thermal units, way lower than what Japan pays for its current gas imports. TEPCO said it was the first time it had set a long-term contract to the lower benchmark.
Japan is keen to cut costs for fuel imports that have surged after most of its nuclear plants were taken offline following the March 2011 accident at Fukushima Dai-Ichi. The cost of most of its LNG imports is linked to crude oil prices, nearly five times the Henry Hub level as of late last year.
A boom in U.S. gas production thanks to hydraulic fracturing - blasting mixtures of water, sand and chemicals deep underground to stimulate the release of gas - has taken U.S. prices to 10-year lows. Reduced U.S. demand for LNG from the Middle East, thanks to the increased domestic supply, is freeing up more LNG for Asia, including Japan, which accounts for 30 percent of global consumption.
But resource-scarce Japan's access to U.S. shale gas is limited by restrictions on exports of LNG to countries that have free trade agreements with Washington, which does not include its longtime Asian ally. Tokyo is lobbying for changes in that policy which limit it to buying gas from the Cameron Parish terminal. In the meantime, Japanese trading houses and energy companies are seeking access to LNG from Canada and elsewhere.
The Japanese government which took power in late December, led by the Liberal Democratic Party, appears to be backing away from a commitment by the previous administration to phase out nuclear power. But tighter regulations following the Fukushima accident and public opposition are slowing any moves to bring nuclear plants shut down for safety checks back online.
Soaring imports of oil and gas helped push Japan's trade deficit in 2012 to 6.9 trillion yen ($75 billion). As the largest Japanese electricity company, TEPCO is especially keen to reduce costs for its fuel imports.
It said its facilities, designed to handle so-called "hot" or "rich" LNG, need to be adapted to the type of "lean LNG" - LNG with a low heating value - to be shipped from the Cameron project.
A 10-year plan the company announced earlier calls for importing 10 million metric tons per year of lean LNG, expanding its LNG storage capacity, setting up a specialized LNG receiving terminal and upgrading equipment.
Mitsui and Mitsubishi are targeting 4 million metric tons a year in U.S. LNG exports from the Cameron project, the Nihon Keizai Shimbun newspaper reported.


text:
Compare car suppliers to unlock big savings, and package your flight, hotel, and car to save even more.
Enjoy maximum flexibility with penalty-free cancellation on most car rentals.
There are several locations and suppliers offering Luxury car rentals throughout Orlando, Florida. Click around to view the options in the area, compare and find the best deal that's most convenient for you on Expedia.com.
You can compare the top deals from providers in the area on Expedia.com. Prices may vary depending on travel dates, car type, and pick-up location. Head over to the main car rentals in Orlando page to see all available offers and car types.
Cancellation policies differ by deal type. There are lots of deals that are free to cancel within your cancellation deadline. A pre-paid Luxury car rental in Orlando will most likely be non-refundable. We recommend filtering by "free cancellation" to see the most flexible options.
Expedia.com is your one-stop-shop for all your travel needs. You'll see a large selection and some of the best deals to find your Luxury rental in Orlando. Whether you're traveling for business or pleasure, whether you're looking for a short or long term car rental we've got you covered. Book your car with flights or hotels in Orlando. We'll bundle them into a vacation package in Orlando with even more discounts.
|from $100
|Airport Transportation
|Airport Car Rentals


text:
"Obama's top aide says the administration lacks "irrefutable, beyond-a-reasonable-doubt evidence" that skeptical Americans, including lawmakers who will start voting on military action this week, are seeking."
WASHINGTON - The White House asserted Sunday that a "common-sense test" dictates the Syrian government is responsible for a chemical weapons attack that President Barack Obama says demands a U.S. military response. But Obama's top aide says the administration lacks "irrefutable, beyond-a-reasonable-doubt evidence" that skeptical Americans, including lawmakers who will start voting on military action this week, are seeking.
"This is not a court of law. And intelligence does not work that way," White House chief of staff Denis McDonough said, part of his five-network public relations blitz Sunday to build support for limited strikes against Syrian President Bashar Assad.
"The common-sense test says he is responsible for this. He should be held to account," McDonough said of the Syrian leader who for two years has resisted calls from inside and outside his country to step down.
The U.S., citing intelligence reports, says the lethal nerve agent sarin was used in an Aug. 21 attack outside Damascus, and that 1,429 people died, including 426 children.
|Khalid Saleh, media director for the Syrian National Coalition, says they regard the looming attack against the Syrian regime as "a step in the right direction." (Photo: Reuters)
The number is higher than that, said Khalid Saleh, head of the press office at the anti-Assad Syrian Coalition who was in Washington to lobby lawmakers to back Obama. Some of those involved in the attacks later died in their homes and opposition leaders were weighing releasing a full list of names of the dead.
But Britain-based Syrian Observatory for Human Rights, which collects information from a network of anti-government activists, says it has so far only been able to confirm 502 dead.
The actual tally of those killed by chemical weapons is scant compared to the sum of all killed in the upheaval: more than 100,000, according to the United Nations.
In an interview Sunday, Assad told U.S. journalist Charlie Rose there is not conclusive evidence about who is to blame for the chemical weapons attacks and again suggested the rebels were responsible. From Beirut, Rose described his interview that is set to be released Monday, on the CBS morning program that Rose hosts with the full interview set to air on Rose's PBS program.
At the same time, Obama has planned his own public relations effort. He has scheduled six network interviews on Monday and then a primetime speech to the nation from the White House on Tuesday, the eve of the first votes in Congress.
Obama faces a tough audience on Capitol Hill. A survey by The Associated Press shows that House members who are staking out positions are either opposed to or leaning against Obama's plan for a military strike by more than a 6-1 margin.
"Lobbing a few Tomahawk missiles will not restore our credibility overseas," said Rep. Mike McCaul, the Texas Republican who chairs the House Homeland Security Committee.
Added Rep. Loretta Sanchez, D-Calif.: "For the president to say that this is just a very quick thing and we're out of there, that's how long wars start."
Almost half of the 433-member House and a third of the 100-member Senate remain undecided, the AP survey found.
"Just because Assad is a murderous tyrant doesn't mean his opponents are any better," said Sen. Ted Cruz, R-Texas.
But some of Assad's opponents are pleading for aid.
"The world is watching, and Syrians are wondering: When is the international community going to act and intervene to protect them?" said Saleh, the spokesman for the Western-backed opposition seeking U.S. strikes.
On Saturday, a U.S. official released a DVD compilation of videos showing attack victims that the official said were shown to senators during a classified briefing on Thursday. The images have become a rallying point for the administration. Sen. Dianne Feinstein, D-Calif., chairwoman of the Intelligence Committee, also posted videos on the committee's website.
"Those videos make it clear to people that these are real human beings, real children, parents being affected in ways that are unacceptable to anybody, anywhere by any standards," Secretary of State John Kerry said in Paris. "And the United States of America that has always stood with others to say we will not allow this - this is not our values, it's not who we are."
But McDonough conceded the United States doesn't have concrete evidence Assad was behind the chemical attacks.
Recent opinion surveys show intense American skepticism about military intervention in Syria, even among those who believe Syria's government used chemical weapons on its people.
Congress, perhaps, is even more dubious.
"It's an uphill slog," said Rep. Mike Rogers, the Republican chairman of the House Intelligence Committee who supports strikes on Assad.
"I think it's very clear he's lost support in the last week," Rogers added, speaking of the president.
Complicating the effort in the Senate is the possibility that 60 votes may be required to authorize a strike.
Republican Sen. Rand Paul of Kentucky said he would consider a filibuster, but noted the delay tactic was unlikely to permanently nix a vote. Paul would, however, insist his colleagues consider an amendment to the resolution that would bar Obama from launching strikes if Congress votes against the measure.
Still, Sen. Harry Reid, the Democratic leader, has predicted authorization and McDonough, too, on Sunday telegraphed optimism.
"They do not dispute the intelligence when we speak with them," McDonough said.
But while the publicly discussed information lacks a direct link between Assad and weapons, the private briefs are no better, two lawmakers said.
"The evidence is not as strong as the public statements that the president and the administration have been making," said Rep. Justin Amash, R-Mich. "There are some things that are being embellished in the public statements. ... The briefings have actually made me more skeptical about the situation."
Rep. Buck McKeon, R-Calif., said "they have evidence showing the regime has probably the responsibility for the attacks."
But that's not enough to start military strikes. "They haven't linked it directly to Assad, in my estimation," said McKeon, chairman of the House Armed Services Committee.
McDonough, an Obama foreign policy adviser dating back to his 2008 presidential campaign, said the dots connect themselves.
The material "was delivered by rockets - rockets which we know the Assad regime has and we have no indication that the opposition has."
Congress resumes work Monday after its summer break, but already a heated debate is under way about Syria.
Vice President Joe Biden planned to host a dinner Sunday night for a group of Senate Republicans.
Obama's national security adviser, Susan Rice, plans to discuss Syria in a speech Monday at the New America Foundation and later meet with members of the Congressional Black Caucus. A bipartisan, classified briefing for Congress is set for Monday and another is slated for Wednesday.
McDonough plans to meet Tuesday with the House Democratic Caucus.
Obama planned to address the nation on Tuesday ahead of Wednesday's first showdown vote in the Senate over a resolution that would authorize the "limited and specified use" of U.S. armed forces against Syria for no more than 90 days and barring American ground troops from combat. A final vote is expected at week's end.
A House vote appears likely during the week of Sept. 16.
McDonough spoke with ABC's "This Week," CBS' "Face the Nation," NBC's "Meet the Press," CNN's "State of the Union" and "Fox News Sunday." McCaul and Sanchez were on NBC. Cruz appeared on ABC. Rogers and Amash spoke to CBS. Paul was interviewed on Fox. McKeon was on CNN.


text:
Estimate your tax and duties when shipping from United Kingdom to North Macedonia based on your shipment weight, value and product type.
Want to save time? Ship it with us today?
When shipping a package internationally from United Kingdom, your shipment may be subject to a custom duty and import tax. Every country is different, and to ship to North Macedonia, you need to be aware of the following.
We have some great shipping options available
Sign up to see more couriers with more details shipping to North Macedonia
Simplify and save with our all in one shipping software
Copyright Easyship Inc. © 2023
Terms of Service| Privacy Policy| Vulnerability Disclosure Policy


text:
Click Click here to go back ot the home page.
...currently features 2426 hankies from 40 countries.
...a lot of nice hankies come from Switzerland?
I have 197 hankies from United States. Click here to see a list of them.
You can place your vote for your preferred hanky by entering the detail page for any hanky.


text:
Listed above are the best places to live in Why, AZ for 2023. The list of best places is compiled using the AreaVibes Livability Score which is calculated from a score out of 100 and based on various categories. These categories include: amenities, cost of living, crime rates, education, employment, housing and weather. Displayed first is the matching location - Why, AZ, followed by the best places to live near Why, AZ, sorted by Livability Score.
To customize the list of best places to live in and around Why, AZ, you are able to first select the search radius, which is the maximum distance you'd like to search for nearby cities or neighborhoods. Next, you can choose to display cities only, neighborhoods only or both cities and neighborhoods. The population dropdown will allow you to customize the size of the cities that you would like to appear in the list. You can then set the importance of each category based on what's most important to you. Finally, you can set your home/rent budget based on what you're comfortable spending on housing or rent. Once your search preferences have been set, you will have your personalized list of the best places to live in Why, AZ.


text:
Orange cones and flashing police lights confronted Ricardo Nieves as he rounded a bend on the way to his mother's house. Before he knew what was going on, Nieves said, a man working for a government contractor stepped in front of his car and forced him to turn into a parking lot. There, a woman repeatedly tried to question him about his driving habits and asked for a mouth swab that would detect the presence of illegal or prescription drugs in his system.
Nieves refused. Then he sued, contending his rights were violated.
His Dec. 13 experience has been repeated thousands of times in cities around the country as the federal government tries to figure out how many of the nation's motorists are driving while drunk or high.
U.S. transportation officials call the National Roadside Survey of Alcohol and Drugged Driving, which has been conducted five times since 1973, a vital tool for monitoring the safety of America's roadways. But some motorists and civil liberties advocates contend the government's methods are intrusive and even unconstitutional. Some police departments have refused to partner on the survey or regretted their decision to do so in the wake of public outcry, while in Tennessee, legislation that would ban law enforcement from helping out on the survey unanimously cleared the state Senate last month.
In the southeastern Pennsylvania city of Reading, Nieves is angered over what he views as an abuse of power.
"I didn't even have a choice to make a decision" to stop for the survey or keep going, he said. "That choice was taken away the moment he stepped into my right of way."
Conducted in 60 cities around the nation, the survey yields the government's best estimate of the prevalence of impaired driving. It works like this: Motorists are randomly selected – either by a uniformed police officer or a private contractor working for the National Highway Traffic Safety Administration – and waved into a parking lot, where they are questioned about their drinking and driving habits, asked to take a breath test, and offered money if they provide saliva and blood samples or agree to answer a more extensive written survey.
Federal officials stress the survey is both voluntary – a large sign at each survey site says so – and anonymous, with local police enlisted to provide security and divert selected motorists from the flow of traffic. Any driver found to be impaired is offered a ride home or put up in a hotel.
The survey's supporters include Mothers Against Drunk Driving and the Insurance Institute for Highway Safety, a group funded by auto insurers whose president, Adrian Lund, said it lets researchers and policymakers monitor how national alcohol policies are working. Though the rate of drunken driving has plummeted over the past 40 years, impaired motorists kill thousands a year. Highway deaths involving drunken drivers rose 4.6 percent in 2012 to 10,322, according to federal statistics.
"This is a very minimal intrusion on privacy," Lund said. "If you know that by participating in this survey, (it) means that we may develop policies that make it less likely you're killed by an alcohol-impaired driver, I think that's well worth the price."
But the government's own documents acknowledge concerns about the National Roadside Survey at least as far back as 2007. The tactics used by the Maryland-based contractor, the Pacific Institute for Research and Evaluation, are "not routine by any means," according to a survey methodology that describes how some police departments had balked at participating in the 2007 version of the survey because they believed they were barred by law.
And while federal officials contend the survey is voluntary, that's not entirely the case. Survey-takers use a device, called a passive alcohol sensor, to collect a breath sample before the motorist's "consent or refusal of the survey," according to the methodology. That lets researchers maximize the amount of data they collect while helping them get impaired drivers off the road, the document said. Later on, motorists are asked to blow into another device that measures blood-alcohol content more precisely.
Kim Cope said there was nothing voluntary about her experience with the survey last November.
Cope was heading out on her lunch break when she was funneled into a single lane of traffic, then directed into a parking lot by a uniformed Fort Worth, Texas, police officer. Cope agreed to take a breath test because she thought it would get her out more quickly, but she wasn't happy about it.
"It was very frustrating," she said. "If it's voluntary, then you'd think you would have a choice to pull into that parking lot or pull into that parking spot, and I was given no choice in either of those."
Fort Worth Police Chief Jeffrey Halstead apologized for his officers' role in the survey and said it wouldn't happen again. In a statement posted on the department's Facebook page, he said the survey "caused many of our citizens frustration" and jeopardized the public's trust.
In general, police can't stop a motorist without first suspecting that a law was broken. The Supreme Court has carved out an important exception for sobriety checkpoints, saying the government's interest in getting drunken drivers off the road outweighs the minor intrusion of a brief stop.
But critics of the National Roadside Survey say a study doesn't carry the same weight as a checkpoint.
"It certainly isn't an immediate public safety measure," Mary Catherine Roper, an attorney with the American Civil Liberties Union of Pennsylvania, said via email. "So, even though a sobriety checkpoint may be more intrusive in that you can't say no and drive away, this is illegal, we think, because there's no sufficient reason for making people pull over and talk to government officials in the first place.
"And I am just talking about the stop itself," she said. "This doesn't even take into consideration some of the coercive strategies people have alleged are part of this program."
The 2007 methodology shows how the Pacific Institute for Research and Evaluation relied on its survey-takers to persuade reluctant motorists to take part. The company offered bonuses to interviewers who were most successful at getting motorists' compliance and replaced those who didn't get enough motorists to say yes.
A company spokeswoman referred questions to the National Highway Traffic Safety Administration. NHTSA said the 2013-14 survey is being conducted in the same manner as the 2007 version.
The $7.9 million survey is now nearing completion. But Nieves, 48, an Army veteran and chaplain for an American Legion post, said an important principle is at stake.
"The Fourth Amendment clearly states that I'm allowed to go about my business without government intrusion, that I'm allowed to go about freely where I need to go," he said. "And on that day, no one here, in my city government or that police department, was protecting me."
Last week, PIRE asked a judge to throw out Nieves' lawsuit, pointing out the civilian survey-taker immediately told Nieves he was not in trouble and that his participation was voluntary.
Nieves "was in no way compelled to stop, and, indeed, hundreds of other vehicles completely ignored the civilian data collector and continued on their merry way," the company's lawyer wrote.
The city of Reading likewise said that Nieves "suffered no injury or damages." City officials declined comment to The Associated Press, citing the pending lawsuit, but promised they won't participate in future surveys, according to a legal memo filed by PIRE's attorney.
While some motorists view the survey as problematic, others have no problem.
"I hate to say it, but it was an easy $65," said Mary Marchione, 44, of Virginia Beach, Va., who provided saliva and blood samples and completed the written survey. "I felt like it was voluntary right from the get-go. .They just really want to know who's driving with what in their system."
In the Boston suburb of Hingham, Mass., police Sgt. Steven Dearth said the survey went smoothly, with no complaints and a line of motorists waiting to provide blood samples.
"If offered the opportunity, we would do it again," he said. "The data will obviously be beneficial to the cause."
Was this article valuable?
Here are more articles you may enjoy.


text:
Southwestern College Superintendent/President Earns Prestigious Award
PRSA-San Diego/Imperial Counties awards Nish the Diogenes Award
Southwestern College Superintendent/President Dr. Melinda Nish has been given a regional award for her candor and transparency in dealing with the controversies surrounding the college's construction bond.
The San Diego/Imperial Counties chapter of Public Relations Society of America presented Nish with the Diogenes Award last week for demonstrating a commendable understanding of the need for candor regardless of any potential negative outcomes in the media.
Nish was recognized for tackling contract procurement processes surrounding the Proposition R construction bond measure. Former Governing Board members and former Southwestern College employees are currently under indictment as part of a far-reaching District Attorney investigation.
"Within a week after assuming the presidency, Nish contracted with my agency—Reliance Public Relations—to serve as interim public relations counsel for several months," said Bill Gay in his nomination application. "It was immediately clear to me and my associate, Susan Giller, that Melinda Nish was a CEO who understands the value and role of a public relations professional."
With the full support of the Southwestern College Governing Board, Nish put a halt to a controversial construction project pending an external review of the college's business practices. When the external review was completed, Nish and the Governing Board held a news conference outlining the measures Southwestern College was taking to get back on track.
This summer the governing body overseeing accreditation for the college commended Southwestern College for the extent it had taken to rectify and improve institutional practices.
In accepting the award, Nish said the improvements were possible because of an open and honest governing board willing to tackle the big issues surrounding the construction projects.
"I want to thank the Governing Board for their support during that difficult time," Nish said. "Southwestern College has implemented many processes that make us a much more accountable institution.
"I accept this award on behalf of all Southwestern College employees and their hard work," Nish said.
The award is named for Diogenes, the Greek philosopher who carried a lamp in search of an honest man.
|Diogenes Award: Southwestern College Superintendent/President Dr. Melinda Nish carries the lamp of honesty and openness presented to her by the Public Relations Society of American, San Diego/Imperial Counties chapter.
|Dr. Nish accepting the award at the PRSA, San Diego/Imperial Counties celebration.
|Southwestern College Governing Board and leadership share in celebrating Dr. Nish's award.


text:
19" HAND FORGED DAMASCUS STEEL SWORD WITH WOOD & BRASS GUARD HANDLE - AJ 1661f
19" HAND FORGED DAMASCUS STEEL SWORD WITH WOOD & BRASS GUARD HANDLE - AJ 1661f
Wood & Brass Guard Handle
This superb design Sword is hand forged.
Blade of this Sword has a nice file work and is made of 512 layers of 4340 stainless steel and 1075 high carbon steel and hardness 55-58 HRC . This robust Sword is lab tested under intense conditions, the balance and shape of this Sword ensures perfect grip.
Overall Length: 19" Inches
Blade Length: 13.5" Inches
Handle Length: 5.5" Inches
Damascus Design: Twist Pattern
Layers: 512
Sheath: Leather
Hand Forged
Hardness: 55-58 HRC
Package Includes:
with Sheath
Care Instructions:
Keep the knife dry after each cleaning.
Take care when removing product from packaging.
Keep fingers clear of blades.
Store away from children.
We accept only PayPal . All major credit and debit cards are accepted through Paypal.
We ship only to your registered PayPal address.
Your order ships out from United state America
With in 3 to 4 business Days
All returns are accepted with Reason
Buyers who wish to return a product must do so within 3 days after receiving delivery (please contact us for return address and information)
The product must be in original condition when returned
No refund for return shipping handling fee
Our eBay customer satisfaction and eBay reputation is extremely important to us. We truly appreciate your positive feedback!
When you rate the shipping time please take international transit into consideration. Your recognition will make us more confident to develop business and serve you better.
If you have any problems with your order or are dissatisfied with the product, please contact us first. Please do not leave neutral or negative feedback. We will do our best to sort out any problems to your satisfaction.
We promise to answer all e-mails within 1 business day. Since we sell worldwide, we communicate using the English language.
DISCLAIMER We are not responsible for any injuries associated with the use of our tools. Our products are intended for legal use only by responsible buyers. Therefore, we will not sell our products to anyone under the age of 18. Before bidding please check your country laws as some countries Custom don't allow this. If your purchase is held by Custom Authorities in your Country/State we will not be responsible and no refund will be issued .


text: Seller: xlr8-imports ✉ (36,927) 100%, Location: Grand Saline, Texas, US, Ships to: US & many other countries, Item: 232448719468 2 Cast Iron NAUTICAL MERMAID Brackets Garden Braces Shelf Bracket PIRATES Ship. Here's a great wholesale lot of 2 cast iron shelf brackets. Made just like the brackets of the past. These have the same look of the antiques, but at a much lower price! Measure approx. 6 3/4" tall top to bottom, 9" from the wall to the front. Each brace has 8 holes for easy hanging. These do not include screws! Great item for re-sale or for those restoration projects. This item was manufactured to look antique, expect some built in imperfections. Satisfaction Guaranteed Color: Brown, Material: Cast Iron


text:
Business Card Description:
Classic Business Card was designed for exclusively corporate and small scale companies. Also it can be used for variety purposes like printing, designing ID. Click on preview image to see further details. I hope you like it guys.
Business Card Featured:
For any help regarding this file, please feel free to contact me through my profile page and I'll be glad to offer support. If you have a moment, please rate this item, I'll appreciate it very much!
Please Don't underestimate the power of the stars. Thank you
Omar Waleed


text:
Although I think Hot Buttered Soul is a better record, Black Moses unfolds into awesome album art.
Rotating CorpseIs a blog we created to share all of the old magazines, book covers, family photos, film stills, clothes and much, much more that have, without an outlet, been accruing and congesting our living spaces and hard drives for years. Much like the surrealist exercise the name derives from, each contributor adds an image to the blog whenever the urge strikes, creating an ongoing visual dialogue that we hope you enjoy.
Copyright DisclaimerWith the exception of the site design, all images on this web site are the property of their respective copyright holders. We make every effort to credit the owner (or at least the source) of each image however, if you are the owner of any image on the site that we have failed to properly identify and you would like credit (or you would like the image removed), please do not hesitate to contact us directly (email firstname.lastname@example.com) and we'll rectify the situation immediately.
RotatingCorpse.com does not generate any revenue, our only interest is in the review, criticism and promotion of things we like; you can be sure that any copyright infringement is committed unintentionally and without any financial gain on our part.
Contact UsVia email at firstname.lastname@example.com


text:
Beautiful concurrency
NOTE: this paper is now finished. It's available at here, and there's a new talk page for any post-publication comments.
I am writing a chapter for a book called "Beautiful code", edited by Greg Wilson. The chapter is a tutorial about Software Transactional Memory in Haskell.
After a lot of useful feedback, I have now completed Version 2 of the paper. The Haskell code is also available.
I would welcome any comments or questions you have on the paper, or constructive suggestions for improving it; the more concrete the better. You can see what people said about version 1 on the version 1 talk page: Talk:SantaClausProblem .
The book is aimed at a general audience of programmers, not Haskell geeks, so I have tried to explain everything necessary as I go along. So if you are not a Haskell expert, your input would be particularly valuable to me.
You can email me directly (firstname.lastname@example.com), or add Wiki talk notes below.
If you give your real name somewhere in your text (or email it to me), I'll add you to the acknowledgements at the end of the chapter. Notably, I'd like to acknowledge Steven807, Mvanier, Fernando, Gknauth, EngineerScotty, BoAdler, Schmitz, Genneth, Pitarou, Asilovy.
Simonpj 14:26, 22 December 2006 (UTC) To add a note, begin with four tilde signs ~~~~; the Wiki will fill in your user name and date.
Brecknell 13:38, 11 January 2007 (UTC) In Figure 1, retry should be STM a, not STM (). (SLPJ: done)
Sylvain 13:45, 11 January 2007 (UTC) small points: since you go through explaining that the do-notation is overloaded and works for STM as well as IO (page 8), you might want to tell the same for return on page 11 (return being given with a type a -> IO a on page 5). (SLPJ: done) There is also a double "Here is the code" at the bottom of page 17. (SLPJ: done)
Brecknell 13:59, 11 January 2007 (UTC) The rewrite of the paragraph at top of page 17 has left behind a fragment that I think just needs to be deleted: "just runs each of the actions in sequence".(SLPJ: done)
Brecknell 14:15, 11 January 2007 (UTC) Last sentence of page 18: "Here is another way approach that..." Delete either "way" or "approach". (SLPJ: done)
ArthurVanLeeuwen 14:27, 11 January 2007 (UTC) (SLPJ: done) minor stuff, really:
- page 2, middle of page: syncrhonized -> synchronized
- page 5, top of page: For example, here are two Haskell functions -> For example, here are the type signatures for two Haskell functions (the functions themselves may be primitives, after all)
- page 5, second paragraph: do the parentheses around hPutStr serve more than to confuse? Especially given their absence for hEchoLine...
- page 5, footnote 3: comma after effects
- page 6: make discarding the return value of forkIO in the second example main more explicit, e.g. with a footnote
- page 7, after Atomicity: This ensured -> This ensures
Brecknell 14:32, 11 January 2007 (UTC) I like the way you build up to the definition of "choose" in this new revision. I think this helps to convey how STM and actions as first-class values can improve modularity and composability in concurrent applications. So, if you like, you can consider my lsat comment on the previous revision "done", as well.
Maeder 14:38, 11 January 2007 (UTC) (SLPJ: done)
- page 11, use subtract (+ -> -) in limitedWithDraw
- page 22 (2nd line), the the -> the
Genneth 15:07, 11 January 2007 (UTC) p4: make analogy between () and void to help non-haskellers (SLPJ: done)
ArthurVanLeeuwen 15:10, 11 January 2007 (UTC) The bottom of page 17 has 'Here is his code:' in duplicate. (SLPJ: done)
ArthurVanLeeuwen 15:19, 11 January 2007 (UTC) The note 'The code for choose is brief, but a little mind-bending:' on page 19 is very short, for such a leap in required understanding. In just one single block of 7 lines you introduce both the concept of IO actions encapsulated inside STM actions as well as the concept of list comprehension. For a non-haskeller this is quite a lot. (SLPJ: True; but I'm not sure whether to say more, or less! Or just leave it)
Maeder 15:25, 11 January 2007 (UTC) maybe generalize nTimes on page 7 to type: Int -> (Int -> IO ()) -> IO () and use nTimes on page 16 instead of sequence_ and list comprehensions. (The function choose on page 19 is also higher order.) (SLPJ: I decide to leave it)
Malcolm 15:27, 11 January 2007 (UTC) (SLPJ: done)
- Intro, para 2, "Sadly, parallel program[s] are" - missing plural
- sec 2.1, para 3, "if two thread[s] call" - missing plural
- sec 3.2, Atomicity, "This ensured that" -> "This ensures that"
Maeder 15:35, 11 January 2007 (UTC) maybe use putStrLn (hPutStrLn) instead of \n in the strings (SLPJ: actually this does not work well. When concurrent threads do putStrLns, the newlines can be separated form the lines they follow. This doesn't happen with putStr. In principle it could happen with putStr too; GHC makes no guarantees about interleaving. The Right Thing would be to use more locking etc, but I thought that was too big a distraction.)
Malcolm 16:07, 11 January 2007 (UTC) (SLPJ: done)
- page 11, limitedWithdraw2 in type signature, is called simply withdraw2 in definition
- sec 4.2 "remaining capactity" -> "remaining capacity" (x3)
- sec 4.3 "newGate makes [a] new Gate" - missing article
- top of page 17, orphan (non-)sentence ". just runs each of the actions in sequence."
- sec 4.4, "futher" -> "further"
- sec 4.4 "another way approach" -> "another approach"
- sec 6 "exectued" -> "executed"
- sec 6 "the the treatment" -> "the treatment"
Jmuk 04:14, 12 January 2007 (UTC) page 13, semicolons in helper1 are out of alignment (SLPJ: done)
Fanf 19:34, 12 January 2007 (UTC) (SLPJ: done) Minor nits:
- p.2: need semicolon at end of last java statement in each function.
- p.2: should you comment that the class has a withdraw method similar to the deposit method?
- p.4 paragraph about locks: you introduce the word "compositional" here - perhaps better to stick with "modular"?
- bottom of p. 4: should "can" be omitted, or should it read "we must explain"?
- bottom of p. 7: inconsistent tense: began -> begins.
- Should the layout of the do notation be more like normal C layout, to avoid freaking out the mundanes?
- would openGate be a clearer name for operateGate?
- footnote p. 14: mkGate -> MkGate
- santa's code: perhaps a comment between two gates to note that the elves or reindeers do their things at that point.
- limitedWithdraw: is the test (amount > 0) redundant?
Fanf 19:45, 12 January 2007 (UTC) (SLPJ: hmm... I'm re-using the description in earlier papers) Section 4 introduction: The description of the problem reads like a description of an implementation, and I think it should be more story-like. e.g.
Santa spends most of his time asleep. On Christmas Eve, his nine reindeer return from their holidays and wake up Santa. He harnesses each of them to his sleigh, delivers toys with them and finally unharnesses them, allowing them to return to their holidays. All year his ten elves are busy working to make toys, but every so often they will need to consult Santa about toy R&D in his study. Santa will only wake up and talk to three of them at a time, and of course their consultations are a lower priority than delivering toys.
- p.13 perhaps "sleep" should be "delay" for consistency with the terminology in the code, and to avoid confusion with what santa does - the elves are making toys during the delay, not sleeping. (SLPJ: done)
- Also, is it worth noting that the reindeer gates model the harnessing and unharnessing? (SLPJ: not sure. Anyone else?)
Justin Bailey 20:35, 12 January 2007 (UTC) Really interesting paper. I've only been exposed to Haskell (through a graduate Programming Languages course) for 4 or 5 months, but I found it very readable. My comments:
- The introduction showing problems with locks and how atomically can be used in the bank account example is very well done.
- Development of the gate operations is pretty clear. It would have helped if a short gloss on the connection between the whimsical problem statement and the opening/closing of gates was made. Re-reading, you do cover it in one paragraph on p.13. Sadly, I'd forgotten a lot of that by the time I got to reading about the implementation of Gates and Groups. Maybe make connections throughout that section?
- I agree with ArthurVanLeeuwen above about the choose function. It's extremely mind-bending. I didn't event notice actions was a list until I saw the post - I just skimmed past that syntax trying to figure out the do portion. I also think the introduction of foldr1 would throw people not familiar with Haskell or functional programming. I still have trouble with it :)
- p.14: "capacity" is misspelled "capactity" several times. (SLPJ: done)
- p.17: "1000,000 microseconds" instead of "1,000,000 microseconds".(SLPJ: done)
LuciusGregoryMeredith 02:00, 13 January 2007 (UTC) Simon, lovely paper. Your first paragraph is very compelling. Let me quote it here.
- "The free lunch is over [8]. We have grown used to the idea that our programs will go faster when we buy a next-generation processor, but that time has passed. While that next-generation chip will have more CPUs, each individual CPU will be no faster than the previous yearâÂÂs model. If we want our program to run faster, we must learn to write parallel programs [9]."
- What evidence does this paper offer that using STM will actually get my program to run faster? (SLPJ: none whatsoever. The only claims I'm trying to make are (a) we need to learn to write concurrent programs; and (b) if we want to write parallel programs, then STM is promising. In fact we need to write concurrent programs for all sorts of reasons, and performance is only one of them; I'm just using it as a convenient "way in". A bit sloppy perhaps.) For all i can see in this example, it may be a beautiful abstraction that when used at scale on interesting programs cannot actually take advantage of the multicore architecture. To be convinced, starting from this particularly motivating opening, i would like to see an example that begins with an algorithm that is not parallel. Then be shown a beautiful, STM-based parallel version that is demonstrably faster.
- It would be particularly compelling to see just how a good implementation of STM for Haskell takes advantage of Intel and/or AMD multicore hardware.
- It would be even more compelling to see the corresponding lock-based program and how it fairs relative to the STM version in terms of performance, usage of the hardware platform as well as program understandability and analysis.
- Clearly, one of the real rubs is getting from current expressions of algorithms to parallel ones, especially parallel ones that map onto modern architectures. Perhaps your point is that STM helps one start to think and conceptualize computation as a concurrent activity -- which then offers some hope to the ordinary programmer to develop programs that will actually take advantage of today and tomorrow's architectures. If so, then the paper is an excellent start, but i would very much like to see this point made more explicit and central, especially if you only give some lipservice to the argument that STM can actually be made to take advantage of the multicore architectures. In particular, evidence for this sort of point might come in the form of a study of how long it takes an ordinary programmer -- not a Simon P-J -- to develop a beautiful solution like a solution to the Santa Clause problem.
- Evidence against this sort of point would come in the form of people finding the basic constructs of the solution "mind-bending".
Pitarou 00:51, 15 January 2007 (UTC) In the definition of the function
forever, there is the comment
-- Repeatedly perform the action, taking a rest each time. I'm not sure what you mean by "taking a rest". (SLPJ: done)
Asilovy 16:43, 15 January 2007 (UTC) Page 1 first paragraph, last sentence : I'm not native english but I wonder if you would'nt write "If we want our programs..." with 's' since you use plurals elswhere. (SLPJ: done)
Asilovy 16:43, 15 January 2007 (UTC) Page 3 last sentence before 2.2 : Is'nt it "... on there being INsufficient..." rather than "sufficient" ?(SLPJ: done)
Asilovy 18:33, 15 January 2007 (UTC) Page 6, last sentence : Should'nt you write "...being explicit aboute SIDE effects..." and the same for the last sentence of the next paragraph (begin page 7) "This ability to make SIDE effects..." (SLPJ: done)
Asilovy 18:33, 15 January 2007 (UTC) Page 8 second paragraph : I can understand that, in some sense, atomocity and isolation are related (in fact 2 faces seen by different threads of the same problem) but you start by saying the model does not ensure atomicity and explain why finishing by "...thereby destroying the isolation guarantee". Sounds confusing. (SLPJ: indeed. I've changed it to say "does not ensure isolation...".)
Asilovy 18:33, 15 January 2007 (UTC) Page 10 code of limitedWithdraw : isn't it "writeTVar acc (bal - amount)" with a minus ? (SLPJ: done)
Asilovy 18:33, 15 January 2007 (UTC) Page 11 : name confusion in the code to limitedWithdraw2 (in the type signature), and withdraw2 in the definition and the comment (SLPJ: done)
Asilovy 18:33, 15 January 2007 (UTC) Page 15 firt line : maybe "The function newGate makes A new Gate..." ? (SLPJ: done)
Jeremygibbons 12:47, 22 January 2007 (UTC) "in reality" (p14) - I hate to break it to you, Simon, but I think "in the specification" would be more appropriate here. (SLPJ: ha ha; I think I'll leave it!) Also, on p19, "a atomic" should be "an atomic" and on p21, "sophisiticated" is misspelt. (SLPJ: done)
Norbertk 20:12, 12 February 2007 (UTC) (p4) I am a Haskell Newbie, so I don't understand at first read the different meaning of the '->' in the type signature. It separates the types of the input paramters and it separates the type of the result. Writing this I presume that the last token is always the result, isn't it ? Maybe a remark would be in order, saying that Haskell functions always return exactly one value.
Below here are comments on version 1
ArthurVanLeeuwen 16:25, 22 December 2006 (UTC) (SLPJ: done) There's a couple of typos in the paper as it is now. More importantly, the footnote on page 2 has (hGetLine h "hello") where it should state (hPutStr h "hello").
Neil Mitchell 16:28, 22 December 2006 (UTC) (SLPJ: done) Sect 1, Para 2. If we want to write parallel program[s] - missing s.
Steven807 17:14, 22 December 2006 (UTC) (SLPJ: done) There is no definition or description of check
Tibbe 18:33, 22 December 2006 (UTC); (SLPJ: done)The footnote on page 2 now has a incorrectly capitalized T in hPutSTr.
Fanf 18:51, 22 December 2006 (UTC) (SLPJ: done)page 1 para 2 "as well shall see" should be "as we shall see"
Fanf 18:51, 22 December 2006 (UTC) (SLPJ: done)page 3 "a bit like *t in C" should be "a bit like t* in C" since t is a type
Garious 18:56, 22 December 2006 (UTC) (SLPJ: done) page 10 "at which point An elf" should be "at which point an elf"
Garious 18:58, 22 December 2006 (UTC) (SLPJ: done) page 10 "Here, then is a possible" should be "Here then, is a possible"
Garious 19:16, 22 December 2006 (UTC) (SLPJ: done) page 11 "Again, we define Group is declared" whaaa? maybe: "Group is declared as a data type with constructor MkGroup. MkGroup is passed the Group's capacity, and a TVar containing the number of current members and the Group's two Gates."
Garious 19:16, 22 December 2006 (UTC) (SLPJ: done) page 11 "Creating a new Group is simply..." Is a process of three somewhat-abstract steps simple enough to say 'simply'? Instead, maybe show the code and let the reader think, "Hey, that's simple!"
Rycee 20:46, 22 December 2006 (UTC) (SLPJ: done) Page 4. You probably want to change "... the action a does ..." to "... the action act does ..."
Rycee 20:46, 22 December 2006 (UTC) (SLPJ: done) Page 8. Typographic nitpick: The space after "i.e." looks wide, perhaps you forgot to write "i.e.\ " to force a regular (non sentence ending) space in LaTeX?
MichalPalka 22:32, 22 December 2006 (UTC) You could add a reference to SQL and triggers. They are similar in that it is programming with transations and seeing familiar names will make applied programmers feel more comfortable. (SLPJ: hard to know what is "familiar" to a random reader. For a reader unfamiliar with SQL and triggers, referring to that might just make it more confusing. What do others think?)
DavidHouse 22:55, 22 December 2006 (UTC) (SLPJ: done) Page 3, "That is, return v is a function that, when performed, does no side effects and returns v." Your use of 'that is' implies that you could deduce the fact that it does no side effects from the type signature just given, which isn't true. It's an auxiliary property of 'return'. Maybe just miss out the 'that is'.
DavidHouse 23:04, 22 December 2006 (UTC)(SLPJ: done) Bottom of Page 4, "Then 'atomically act' grabs the lock, performs the action 'at',". Missing 'c' out of 'at'.
DavidHouse 23:23, 22 December 2006 (UTC) (SLPJ: done) Page 5, "Then 'withdraw' is an STM action that adds amount to the balance in the account." 1) For consistency with the rest of the paper, it should be "Then 'withdraw account ammount'..." 2) withdraw subtracts, not adds, to the amount in the account.
DavidHouse 23:40, 22 December 2006 (UTC) (SLPJ: done at defn of hEchoLine) Page 9, you probably want to mention that ++ is string concatenation.
DavidHouse 23:45, 22 December 2006 (UTC) (SLPJ: done)Page 10, I would expect to see the type signatures for the Gate interface rewritten alongside their definitions.
DavidHouse 23:47, 22 December 2006 (UTC) (SLPJ: difficut to do this crisply, but I take the point) Page 9/10, algebraic datatypes are a little weird for the non-initiated, especially with constructors that don't appear to do anything ("Where do you define MkGate?" etc.). You might want to liken them to C's structs, and explain the constructors as tags?
DavidHouse 23:57, 22 December 2006 (UTC) (SLPJ: done) Page 13, I don't think you sufficiently explain 'sequence'. You may wish to add a sentence along the lines of "'sequence' is a function that takes a list of IO actions and returns the action that, when executed, runs each of the actions you passed it in turn."
Dalejordan 02:15, 23 December 2006 (UTC) (SLPJ: done) For the sake of us newbs you might mention in Section 2.1 how all these actions ever get performed. Also, in your description of nTimes I think it would be clearer to say it creates a composite action that performs its argument action n times, rather than say it performs it (directly) n times, even though the value of n is not yet known. Another example of the "beauty" of first class actions (and recursion).
Brecknell 03:29, 23 December 2006 (UTC) (SLPJ: done) Page 7: withdraw should subtract, not add amount to the balance (sadly). Also, since this withdraw has different semantics to the version on p5, you may want to consider giving it a different name.
Brecknell 03:29, 23 December 2006 (UTC) (SLPJ: done) Page 8, towards the end of section 2.4: Two instances of "withdraw" should be "withdraw2", one in the function definition and one in the comment.
Brecknell 05:04, 23 December 2006 (UTC) (SLPJ: done) In the problem definition, "Santa repeatedly sleeps until wakened...", but with the definition of "forever" given in the text, and without some sort of asynchronous signalling, it looks to me like Santa will sleep for at least as long as his random number generator tells him to. Perhaps move the sleep out of forever and into elf and reindeer, then Santa will just sleep in awaitGroup.
Mvanier 19:21, 23 December 2006 (UTC) (SLPJ: done) In section 3.3, "sequence" might as well just be "sequence_". It's confusing to return a list of unit values and not do anything with them. In section 5, I think that the problem with composing lock-based concurrent functions could be explained better; the statement "instead we must expose the locking protocol" could be expanded to show why this is the case.
ChrisKuklewicz 22:17, 24 December 2006 (UTC) In learning Haskell STM back in October of 1995 I had written a solution to the same Santa problem. The main suggestion I have is that the elf and reindeer are given two actions (use Gate inGate) and (useGate outGate) and are required to properly bracket their actual action between these two. If the (joinGroup group) call returned a single scoping combinator (bracket_ (useGate inGate) (useGate outGate)) then the concurrency model for the elf and reindeer would be even to get correct (and beautiful?). Furthermore they could be passed (joinGroup group) instead of (group). This prevents the elf and reindeer from calling any other group functions.
Conal 16:39, 25 December 2006 (UTC) (SLPJ: done) Page 11, first full paragraph, "then waits to the TVar to be decremented to zero." Replace "waits to" with "waits for".
Brecknell 03:41, 27 December 2006 (UTC) This was my first exposure to STM, and I found it clear and easy enough to follow. However, I think it is mainly the discussion of bank accounts that conveys the "beauty" of STM, since that's where the important concepts are demonstrated: composability of transactions, implicit locking and deadlock avoidance, etc. In the Santa Claus problem, those concepts are somewhat obscured. I think the Santa Claus problem is still useful for demonstrating how STM can handle a tricky concurrency scenario with relative ease, but it didn't give me the sense of clarity that the discussion of bank accounts did. Maybe the Santa Claus solution needs more focus on the abstractions possible in STM, how they can help modularise concurrent programs, and why STM is better for solving concurrency problems than the concurrency primitives available elsewhere.
Gaal 08:20, 27 December 2006 (UTC) (SLPJ: done) The binding and usage of the reindeer group on page 12 are inconsistent:
; rein_gp <- newGroup 9 ; sequence [ reindeer gp n | n <- [1 .. 9]] -- ^^ ; forever (santa elf_group rein_group)
Fernando 14:11, 29 December 2006 (UTC) SLPJ: done In page 3, in the definition of incRef, the last line should probably read, writeIORef var (val+1), instead of writeIORef (val+1). The latter version won't compile.
PaulRBrown 07:11, 2 January 2007 (UTC) It would be convenient if the download link for the source code were active. (Otherwise, reviewers have to cut and paste the fragments in by hand.) SLPJ: try [1]
PaulRBrown 07:11, 2 January 2007 (UTC) I had trouble with the motivation for the Santa Claus example, and I ended up resorting to scratch paper to sketch out the problem and the model. That section would benefit from some additional introduction, perhaps a diagram. (Something schematic with "(n of m) || (p of q)" would be nice.) You could also explain it in terms of concurrency APIs that people are familiar with, e.g., count-down semaphores in Java's concurrency package. In fact, the additional development of the counting barrier prior to the Santa Claus problem would help overall clarity. SLPJ: Hmm
- DavidHouse 10:30, 2 January 2007 (UTC) I actually had trouble with this one too. I think even the addition of a sentence like the following would help a great deal: "We want to model this setup in Haskell, where 'sleeping' is blocking and 'waking up' is doing something." SLPJ: where exactly? I'm not convinced this is going to help, but concrete suggestions are always useful.
EricWilligers 12:43, 4 January 2007 (UTC) Page 4: As page 14 currently contains a leap in difficulty with the definition of choose, perhaps foldr1 could be introduced before the last paragraph of 2.1, with an example call. This would also be an opportunity to introduce [ ] in a type signature - it does appear with regards to "sequence" but is easy to miss as the return value isn't discussed. A simple example would avoid (op) notation and would make no sense for empty lists. e.g. max_n values = foldr1 max_2 values. SLPJ: I've re-done that bit; see what you think when I publish version 2.
EricWilligers 12:43, 4 January 2007 (UTC) SLPJ: done Page 10: Missing closing ) at the end of useGate
EricWilligers 12:43, 4 January 2007 (UTC) SLPJ: done Page 12: elf_group => elf_gp, rein_group => rein_gp
EricWilligers 12:43, 4 January 2007 (UTC) SLPJ: done Page 13: elf-gp 1 => elf_gp 1
EricWilligers 12:43, 4 January 2007 (UTC) SLPJ: done Page 14 and page 8 claim all the code is presented. To meet this claim:- Perhaps the following can appear on p9, just before "Since IO actions are first-class, ..."
deliverToys :: String -> IO ()
deliverToys s = putStr (s ++ " delivering toys\n")
Perhaps the following can appear on p13, just before "Working inside-out, ..."
reindeer :: Group -> Int -> IO ()
reindeer gp id = forkIO (forever (reindeer1 gp id))
Alternately, perhaps deliverToys and reindeer could appear in section 3.5 so they don't affect the flow in 3.1 and 3.3.
Brian Hulley 22:06, 4 January 2007 (UTC) Page 5: Trivial typo "be execute simultaneously" should be "execute simultaneously" or "be executed simultaneously" SLPJ:done. I spent ages trying to understand why the 'brutal lock' method wouldn't ensure isolation then I realised it was that I'd just assumed all other threads would be stopped dead in their tracks while the atomic block was running whereas if I'd read the text more carefully I'd have seen that the lock indeed only applies to actions wrapped in
atomically. I think if you said something like "if a thread is accessing an IORef while holding the
atomically lock there is nothing to stop a *different* thread from accessing the same IORef directly at the same time" it would help emphasise the fact that other threads can still be running even though only one thread can be in an atomic block at any given time. SLPJ: I have re-worded. See if you prefer version 2
Brian Hulley 09:49, 5 January 2007 (UTC)
- Page 6: re-execution: this looks like you could end up in an infinite loop since if thread A needs to do something complicated in an atomic block while thread B just sits in a tight loop continuously incrementing the same TVar (used by A) then A would probably always have an invalid view of memory by the time it was ready to validate. Does the implementation address this problem? SLPJ: starvation is indeed possible. I deliberately left out for brevity, but perhaps I should devote a couple of paras to it. What do others think?
- Page 10: No definition for
check. Section 2.4 only defines
retryso perhaps section 3.2 should include:
check c = if not c then retry() else return ()
(to avoid introducing yet another Haskell function
unless) SLPJ: done
- Page 12: Use of
sequenceand list comprehensions seems more complicated than something like:
mapM_ (elf elf_gp) [1..10]
SLPJ: Hmm
- Page 16: Section 5 on locks. It seems to me that STM solves these problems by just conceptually using a single lock (the 'brute force' lock on
atomically) but a clever thing about STM is that it gets the simplicity of just having a single global lock without the performance penalty due to the use of logging (ie the global lock is only held for the duration of the validate and commit instead of for the whole duration of the atomic block). SLPJ: and perhaps not even then; you can do the commit use CAS only with no locks at all!
These are just minor points though - I thought it was a really good intro to STM - I've never used/looked at STM before now and yet after reading just this one chapter I feel I've got enough understanding to start using it - Thanks.
EricWilligers 01:02, 7 January 2007 (UTC) SLPJ: done I needed to change elf and reindeer due to a compilation error - Expected type: IO (), Inferred type: IO ThreadId. Each of the following worked:-
elf :: Group -> Int -> IO ()
elf gp id = do { _ <- forkIO (forever (elf1 gp id)) ; return () }
elf :: Group -> Int -> IO ThreadId
elf gp id = forkIO (forever (elf1 gp id))
elf gp id = forkIO (forever (elf1 gp id))
The last option avoids the need to mention ThreadId.
Danwang74 04:06, 7 January 2007 (UTC) I think the paper conflates the use of the STM programming model (atomics an various combinators) with the implementation details by focusing only on optimistic methods of implementing the STM programming model. There are fundemental problems with optimistic methods of STM such as situations which require IO as well as implementation challenges which have not been solved.
Pessimistic methods (i.e. lock based methods) can implement the STM programming model efficently. There have been several papers that make progress in this area that I'm sure you are aware of yet they get no mention in the discussion.
Also the comparison of the programming model using bare locks and the STM programming model implemented with optimistics methods is a completely unfair comparison. It is like comparing raw x86 assembly to Haskell compiled to a RISC processor. Programming in raw unstructured x86 assembly is surely a bad idea because the programming model is too low-level. But there is nothing "broken" with x86 assembly when compared to a RISC processor, ignoring aesthetics. In fact one could compile Haskell to x86 assembly with the programmer unaware. The modularity claims are also unfair. Is Haskell compiled to RISC assembly more modular than Haskell compiled to x86?
Locks can be used modularly, just as you can programing in raw x86 assembly modularly with some effort. Unfortunately use of locks in a modular way is not well supported. One way to do this is to use the strawman acquire one global lock implementation of atomics. The whole discussion confuses the programming model and the runtime implementation of it. Actually I don't agree that locks can be used modularly. I think they fundamentally can't be, and that's why I don't think the comparison is misleading. Our "composable memory transactions" paper goes into a bit more detail.
In fact the STM name is confusing itself. There's an "atomic" programming model possibly implemented via STM. It would be more insightful to talk more about alternative methods of implementing the atomic programming model, independent of STM. It is ironic and confusing to use STM to refer to the programming model which he authors emphasize could be implemented with locks. There needs to be a clearer seperation between the programming model the implementation details.
Gknauth 19:32, 7 January 2007 (UTC) (I'm definitely a Haskell newb.) page 2, Sec. 2.1, 1st paragraph
and returns a value of type IO (). ... returns a value of type ().
I read this, and wondered, "Is it type IO (), or type () ?" (SLPJ: this is hard to explain first time. I'll try to clarify
Gknauth 19:32, 7 January 2007 (UTC) (SLPJ: done) page 3, line 4, "Then it will performs" s.b. "Then it will perform"
Gknauth 19:32, 7 January 2007 (UTC) (SLPJ: I have clarified)page 3, 2nd paragraph. I'm not sure what "IO a" means. From the previous page, I thought that IO implied there would be a side effect. Now you're saying the "return v" action "does no side effects."
Gknauth 19:32, 7 January 2007 (UTC) page 3, paragraph 6, "Gentle..." After 5 dense paragraphs, suddenly this one seems clear. Maybe you intended this. I'm still scratching my head, wondering if IO and IORef are reserved words, or whether they're things you've defined somewhere but not yet revealed. SLPJ: great! IO and IORef are primitive, built-in types; but they not reserved words in the sense of keywords (e.g. you could not import them and then redefine them). I'm not sure this is worth amplifying though.
Gknauth 19:32, 7 January 2007 (UTC) page 4, end of Section 2.1
I'm still left wondering if IO is a marker that signals "side effect(s) can happen," or if it's a type. Put another way, I don't know if IO is an adjective, noun or verb, and I don't know if it's a part of the language or something Joe Haskell wrote for demonstration. SLPJ: it's a type. A value of that type is an action that, when performed, may have side effects. If you can help me adjust earlier text to say that more clearly it'd be great, but I'm not sure it'd help simply to repeat it! You may like to try "Tackling the awkward squad" and then come back to suggest improved wording for this section.
Gknauth 19:32, 7 January 2007 (UTC) page 5, footnote 2. Why do you say "But it's too late now!" Are so many people in the world using Haskell that it's impossible to tweak nomenclature? I thought Haskell was a young up and coming language, not an old language set in its ways. Also, programmers are used to being able to set things right themselves if the language somehow has gotten something wrong. The exclamation implies that once a design mistake is made, however small, programmers just have to lump it. SLPJ: reasonable point, send email to firstname.lastname@example.com!
Gknauth 19:32, 7 January 2007 (UTC) page 5, code example 3. cts -- shorthand for cents? Why not cents? SLPJ: short for "contents"! I've replaced it with bal, short for balance
Gknauth 19:32, 7 January 2007 (UTC) page 6, paragraph 3, "When..." This is very clear. I could substitute that paragraph for ten times as many words I've seen in database texts.
Gknauth 19:32, 7 January 2007 (UTC) page 6, "This process is called re-execution." I read that and thought, "What is to keep a failed transaction from re-executing forever and never being satisfied?" But it looks like you get to that in Section 2.4. SLPJ: indeed
Gknauth 19:32, 7 January 2007 (UTC) page 10, code examples at bottom. Where did check(...) come from? How does it work? Does it block? Does it abort? Is it part of the language? Is it defined later in the chapter? Based on the last sentence of the first full paragraph on page 11, I'm guessing it blocks. SLPJ: try now. I forgot to define check
Gknauth 19:32, 7 January 2007 (UTC) SLPJ: done page 11, paragraph 3, "Again...", rewrite: "we define Group is declared as a fresh data type..."
Gknauth 19:32, 7 January 2007 (UTC) page 14, last paragraph in section 3.4. That is very cool. The only extra thing I wanted was a picture of how all the pieces you built combined. I was curious which ones you thought of first. I wondered about the order in which you conceived of pieces, as it compares with the order in which you described them.SLPJ: glad you liked it; but I've simplified it. I don't have much idea about how to give the "how did I get here" stuff without making it a lot longer
Gknauth 19:32, 7 January 2007 (UTC) page 17, conclusion, 1st paragraph, last sentence. I can definitely see the need for transactional memory techniques in the years ahead, but I don't know much about how other languages are addressing the issue. Maybe you could provide some pointers. If Haskell is ahead of the others, then so much the better for Haskell, but at the moment I have nothing to compare. SLPJ: now citing Larus's new book
EngineerScotty 17:23, 8 January 2007 (UTC) SLPJ: done Page 2. The problem is stated such that no thread may "observe a state in which money has left one account but not arrived in the other". This may be stating the obvious; but should the make-before-break condition also be proscribed--no thread should be able to observe a state in which money has arrived in one account without having left the other, as well? A minor quibble, but one if which not addressed will cause me to an open an account with your bank. :)
BoAdler 20:10, 10 January 2007 (UTC) SLPJ: done page 3. You describe "IORef t" as being "a bit like *t in C", but that notation in C is used to dereference pointers. I know this is pedantic, but it should be "(t *)". I got thrown for a second, and had to remind myself that 't' was a type, not a variable.
Robin 13:52, 18 January 2007 (UTC) page 2, section 2.1. "syncrhonized" has a typo.


text:
Follow Us:
This is not an offer for credit and should be used for estimation purposes only based on the information you provided. You should not base your decision on this estimate alone. Title, registration, tax and other fees, and personal circumstances such as employment status and personal credit history, were not considered in the calculations.
For decades now, Honda's line of Rancher all-terrain vehicles has pretty much been where the search for the perfect mid-size ATV starts and ends. And it's easy to see why so many thousands of Rancher owners know they've made the right choice. With a variety of models and options, it's easy to get the features you want. Plus, the Rancher just hits that sweet spot in terms of size and performance.
Every Rancher starts with the same proven Honda engine, the heart of any ATV. A 420cc liquid-cooled single-cylinder design with fuel injection, it's engineered for the kind of wide, low-revving power an ATV rider wants. And it offers something no other ATV can: Honda's legendary reliability and efficiency.
After that, the mix-and-match of features is up to you. We have models with independent rear suspension (IRS) for excellent handling and a superior ride. We also have swingarm/solid-axle models suited to riders who tow a lot, or who want a solid axle's simplicity of design. Standard manual ATV transmission, our exclusive Electric Shift Program, or Honda's revolutionary Automatic Dual Clutch Transmission (DCT) are all available, as is Electric Power Steering and your choice between two- and four-wheel drive.
A Honda Rancher is all about what Honda does best—combining innovation with proven performance. Now, which Rancher is right for you?
Front - 190 mm dual hydraulic disc
Rear - 160 mm sealed mechanical drum
Front - 24 x 8-12
Rear - 24 x 10-11
Front - Independent double-wishbone; 6.69 in. travel
Rear - Swingarm with single shock; 6.69 in. travel