text:
Our site allow absolutely FREE and FAST message exchange with ALL persons who registered on our site lifetime. We are not controlling or moderating this process, like other international Dating sites. We are not selling and/or providing contact information. We just help you to find each other.
Only free registration required communicate with other site users.
Already registered with us? To sign in enter your email address and password below.
If you have more questions, don't hesitate to contact us.
Terms, Conditions and Privacy Policy


text:
American Airlines pilots on Friday voted to ratify a new union contract, ending a years-long labor dispute and stabilizing American's parent, AMR Corp , as it tries to emerge from bankruptcy.
Continue Reading Below
The contract, which union members accepted about 74 percent to 26 percent, gives the Allied Pilots' Association a 13.5 percent equity stake in AMR and offers what the union sees as "industry-standard" pay, a union spokesman told Reuters.
"We are pleased our pilots supported and ratified this agreement, which is an important step forward in our restructuring," Denise Lynn, a senior vice president at AMR, said in a statement.
(Reporting By Nick Brown; Editing by Gerald E. McCormick)

subset: commoncrawl


text:
The euro hit a one-month high, commodities rose and Asian shares climbed for a seventh consecutive day on Tuesday as global lenders reached a deal on new debt targets for Greece and a political agreement on disbursing the next installment of aid.
European shares will likely track Asian peers higher, with financial spreadbetters predicting London's FTSE 100 , Paris's CAC-40 and Frankfurt's DAX to open as much as 0.7 percent higher.
Continue Reading Below
U.S. stock futures were up 0.3 percent, hinting at a firm Wall Street open.
After 12 hours of talks at their third meeting in as many weeks, Greece's international lenders agreed on a package of measures to cut Greek debt to 124 percent of gross domestic product by 2020, and pledged to take further steps to lower the debt below 110 percent of GDP in 2022.
Eurogroup Chairman Jean-Claude Juncker said ministers would formally approve the release of crucial aid for debt-stricken Greece, removing uncertainty over whether Athens could avoid a near-term bankruptcy.
MSCI's broadest index of Asia-Pacific shares outside Japan <.MIAPJ0000PUS> gained 0.7 percent to a near three-week high, led by a 1 percent advance in Korean shares <.KS11> and a 0.7 percent rise in Australian shares . Indian shares also jumped 1.2 percent.
Shanghai shares bucked the trend to fell 1 percent to their lowest since 2009, dragged by weakness in growth-sensitive companies.
"Overhanging the market for a little while has been these macro concerns, so progress towards sorting the situation out gives room for the market to move higher," said Phillip Weinberg, director at BestEx.
Investors' focus is likely to shift now to another major concern hanging over markets, a looming U.S. fiscal crisis.
Republicans in the U.S. Congress on Monday called on President Barack Obama to detail long-term spending cuts to help solve the country's fiscal crisis, while holding firm against the income tax rate increases for the wealthy that Democrats seek.
"Now people will start focusing on the U.S. fiscal cliff and there could be some nervousness there, particularly if it drags on," said Burrell & Co dealer Jamie Elgar of Australian shares.
The euro gained as much as about 0.3 percent to $1.3010, its highest level since October 31, in reaction to the Greek news, before paring gains to be up 0.1 percent at $1.2982.
"The euro gained but the rise is small, and it's unlikely that it will climb further, with big funds winding down their positions ahead of the year-end. Any rise will be countered by selling to cap the euro's upside," said Hiroshi Maeba, head of FX trading Japan for UBS in Tokyo.
He cautioned that the euro still faced downside risks as the latest agreement does not offer a fundamental resolution to the euro zone's debt crisis.
"While the Eurogroup has set December 13 for formal approval of the disbursement, and Germany's planned parliamentary vote later this week will be watched with interest, for markets the deal should put Greece largely on the backburner for a couple of months before it starts missing its fiscal targets again," Sean Callow, senior currency strategist at Westpac bank in Sydney, said in a note.
He doubted if the euro's short-covering will produce sustained trade beyond $1.3050/$1.3100.
Japan's Nikkei stock average <.N225> rose 0.5 percent, just below Monday's seven-month closing high. The benchmark has climbed more than 8 percent in two weeks as the yen has weakened on expectations of easier monetary policy with the likely election of a new government.
The dollar inched up 0.2 percent against the yen to 82.22 yen. The euro rose 0.3 percent against the yen to 106.72.
Traders said some investors unwound long positions in the dollar built up in recent weeks on expectations the Bank of Japan would come under pressure for more aggressive easing.
The dollar eased 0.1 percent against a basket of key currencies , helping to underpin dollar-based commodities.
U.S. crude futures rose 0.3 percent to $88.03 a barrel and Brent was up 0.2 percent to $111.09.
Spot gold was up 0.1 percent to $1,749.65 an ounce, just below a six-week high of $1,754.10 hit on Friday.
London copper hit a near one-month high of $7,821.50 a metric ton (1.1023 tons) as the Greek debt deal added to confidence over copper demand after recent positive data from its top consumer China.
Sentiment may be further underpinned by a report saying China has approved construction of two city subway projects worth 49 billion yuan ($7.87 billion), adding to the list of recent railway project approvals aimed at boosting growth in the world's second-biggest economy.
In another possible sign that the economy is regaining traction, China's industrial profits in October were up 20.5 percent from a year earlier, accelerating from 7.8 percent growth in September.
Asian credit markets firmed slightly, narrowing the spreads on the iTraxx Asia ex-Japan investment-grade index by 1 basis point.
(Additional reporting by Victoria Thieberger in Melbourne; Editing by Edwina Gibbs & Kim Coghill)


text: The overwound versions of our classic Golden Age Humbuckers! The same Alnico 5 magnets, but overwound to 12K ohms for high output, powerful midrange and driving tone. The AWG43 coils are wound on fabric-taped bobbins, mounted on a brass baseplate, and wax-potted for microphonic suppression.The output wire is 4-conductor plus ground, enabling versatile custom coil-tapping, series/parallel, and phase switching options. 12K ohms. Bridge model polepieces have 2.015" spread; neck models have 1.97" spread. Mounting screws, springs and wiring diagrams included.Inspired by great guitar pickups of the 50s! Alnico 5 magnets (aluminum/nickel/cobalt) as used in the originals, for classic tone. Vintage dimensions for easy installation in standard pickguards and bodies. Wax-potted for microphonic suppression. Wiring diagrams included with each pickup. Length: 2.75" (69.85mm)Width: 1.5" (38.10mm)Height including mounting tabs, bridge pickup: .840" (21.34mm) Color-matching Cream Parts and BindingsThere have always been slight variations in the color of the cream plastic parts used on Gibson and other guitars. It's not uncommon to see brand new and vintage guitars with bindings, pickup rings, toggle switch rings and pickguards that don't perfectly match in color. We do our best to match all our cream products, but there's no absolute control from batch to batch, or from supplier to supplier. WARNING: Cancer and Reproductive Harm - www.P65Warnings.ca.gov.


text:
Afro-Asiatic languages, also called Afrasian languages, formerly Hamito-Semitic, Semito-Hamitic, or Erythraean languages, languages of common origin found in the northern part of Africa, the Arabian Peninsula, and some islands and adjacent areas in Western Asia. About 250 Afro-Asiatic languages are spoken today by a total of approximately 250 million people. Numbers of speakers per language range from about 150 million, as in the case of Arabic, to only a few hundred, as in the case of some Cushitic and Chadic languages.
The name Afro-Asiatic gained wide acceptance following the classification of African languages proposed in 1955–63 by the American linguist Joseph H. Greenberg. Scholars in the former Soviet Union prefer to call these languages "Afrasian." The name Hamito-Semitic (or Semito-Hamitic), although occasionally still used, is largely considered obsolete; many scholars reject it because it is linguistically wrong—there is no linguistic entity "Hamitic" to be contrasted, as a whole, to "Semitic." Other designations, such as Erythraean and Lisramic, have gained little acceptance.
Relation to other language groups
The common ancestral dialect cluster from which all modern and extinct Afro-Asiatic languages are assumed to have originated is referred to as Proto-Afro-Asiatic. Proto-Afro-Asiatic is of great antiquity; experts tend to place it in the Mesolithic Period at about 15,000–10,000 bce. There is no general consensus over the location of the Urheimat, the original homeland from which began the migrations into the present locations of the speakers. The doyen of Afrasian studies in the former Soviet Union, Igor Diakonoff, theorized that it arose in what is now the Sahara, from where several subsequent migrations took place after about 5000 bce, including the exit from Africa by speakers of what would become the Semitic languages. Diakonoff accounted for the considerable linguistic diversity of Afro-Asiatic languages by suggesting that there was extensive interethnic and interlanguage contact throughout the region. Largely extralinguistic research based on the "out of Africa" theory for Homo sapiens sapiens has since placed the Urheimat in the Middle East—in the Fertile Crescent, one of the regions in which agriculture developed (c. 10,000 bce). This would mean that speakers of Proto-Afro-Asiatic dialects migrated back into Africa via the Sinai Peninsula and the Nile River valley before they eventually reached the ancient and present locations of the five constituent language families in Africa—i.e., Egyptian (Nile valley), Amazigh (Berber; North Africa and central Sahara), Chadic (Central Africa, Lake Chad basin), Cushitic (Horn of Africa), and Omotic (southwestern Ethiopia). Much later migrations from South Arabia brought some Semitic languages into Eritrea and Ethiopia, again to be followed by the expansion of Arabic in the Islamic period.
Speakers of Afro-Asiatic languages were among the first in human history to develop writing systems. Some Afro-Asiatic languages are known only from documents written as long as 5,000 years ago; examples include Akkadian and Eblaite. Some have disappeared but left traces in the form of inscriptions; Old Libyan, for example, is found in inscriptions dated as early as 139 bce. Others are mentioned in records that were transcribed in European languages, as is the case of the Guanche language of the Canary Islands. Coptic represents a third case; it originated in antiquity and was spoken until the 16th or 17th century ce but is now represented only by liturgical phrases used within the Coptic Orthodox Church.
Divisions within the phylum
Linguists generally recognize six divisions within the Afro-Asiatic phylum: Amazigh (Berber), Chadic, Cushitic, Egyptian, Omotic, and Semitic. These divisions differ in both the number of languages and the degree of genetic relationship as measured in terms of common inherited vocabulary and shared grammatical features, issues considered at further length below (see also comparative linguistics; historical linguistics). The degree of kinship between the divisions and subdivisions appears to be much more remote than that between the branches of Indo-European. However, none of the existing proposals concerning the relationship of divisions within the phylum can be considered final. Neither is there general agreement as to the subdivisions within the six major divisions. Some authors, for lack of robust evidence for subclassification, still follow Greenberg by accepting five coordinate branches within Afro-Asiatic (or six, including Omotic in a separate family). Others may favour a series of binary subdivisions such as those represented in the accompanying genealogy.
External relations
Certain similarities to Indo-European languages have prompted scholars to look for a special relationship between Afro-Asiatic and Indo-European. Some scholars even extend this kinship hypothesis to include the Uralic, Altaic, Kartvelian, and Dravidian language groups. Attempts have also been made to relate Afro-Asiatic to other African and European linguistic units, such as Niger-Congo, Nilo-Saharan, or Basque. However, the common ancestor of these languages, if there was one, existed so long ago that it is almost impossible to apply sound comparative methods to modern languages in order to test this hypothesis.
Proving genetic relationship: problems of internal comparison
Linguists use a set of methods with which they compare languages, both modern and ancient, in order to establish "genetically related" language groups. The application of such methods involves the systematic analysis of the phonologies (sound systems), vocabularies, and grammars of the languages in question. The products of such comparison are called "reconstructions" and are indicated by placing an asterisk * in front of the word or sound symbol; they describe a hypothetical common parent language (such as Proto-Afro-Asiatic) and its individual daughter languages (e.g., Proto-Chadic or Proto-Semitic), or a hypothetical common sound of origin. Languages are said to be genetically related when they meet two criteria: they match in phonology, vocabulary, and grammar in such a way that they can be systematically related to a common protolanguage, and the matches can be determined not to have resulted from chance resemblance or previous contact between genetically unrelated languages.
Solid comparative methods, although generally illuminating, are for several reasons difficult to apply to the languages and divisions within the Afro-Asiatic phylum. Relative chronology is one issue that makes applying such methods problematic. The vast majority of Afro-Asiatic languages are living languages without any written documents that would foster insights regarding the changes that inevitably occur over time. There are exceptions to this general rule; in some Semitic languages and Egyptian, there are documents that give linguists a picture of what these languages looked like—at least in written form—some 3,000–5,000 years ago. Using such attestations, Diakonoff classified Afro-Asiatic languages into Ancient, Middle, and Late Stage languages according to the extent to which they retained features of the ancestral protolanguage.
A second problem is referred to among linguists as "Semitic bias." The languages within the Semitic family are relatively homogeneous, which has caused some scholars to identify the family with a set of characteristic speech sounds and features of grammar—a "Semitic type" that they believe extends beyond the limits of the family itself. In light of the great age of Semitic attestations, they carry this notion a step further, into the discussion of the hypothetical ancestral language. The result, at least for them, is that Proto-Afro-Asiatic comes to resemble a "Semitic type" language. Recent data from African Afro-Asiatic languages, however, tend not to confirm this theory.
A third complication relates to vowel usage in the phylum: most Afro-Asiatic languages do not indicate vowels within their written documents. This poses obvious problems for the identification and reconstruction of vocabulary and grammar.
Common Afro-Asiatic features
Afro-Asiatic languages share features in phonetics and phonology, morphology, and syntax, as well as a fair number of cognate lexical items (i.e., words that have been retained from the common ancestral language). Given the great antiquity of Proto-Afro-Asiatic, only a few of its features can be expected to have survived in all divisions of Afro-Asiatic. Those that have include the feminine gender marker *t and the second-person marker *k. Other features or words of Proto-Afro-Asiatic show up only in languages of certain divisions or subdivisions.
Phonetics and phonology
Most Afro-Asiatic languages share a set, or inventory, of particular consonants. One group in this inventory is called the pharyngeal fricatives and is exemplified in Egyptian, Cushitic, Amazigh, and Semitic by ħ and ʿ ("ayn"). A second commonly used group of consonants is an emphatic set, similar to the pharyngeal fricatives but with phonetically quite different articulations; characteristically, emphatics are formed deeper down in the vocal tract and may involve different airstream mechanisms.
Amazigh and Arabic have three major types of consonants: pharyngealized (articulated at the back of the vocal tract with the pharynx), velarized (in which the back of the tongue touches the soft palate), and uvularized (articulated at the back of the vocal tract with the uvula). In South Arabian, Ethio-Semitic, Cushitic, and Chadic languages, there are consonants characterized by the following "manners," or types of air flow: explosive glottals, which occur when a complete closure is suddenly released; ejective glottals, which involve compressed air moving from the glottis and toward the lips; and implosive glottals, which involve air moving temporarily into the oral cavity before the release of the glottal closure allows the air from the lungs to stream out again. The glottal stop ʾ ("hamzah") is used as a separate consonant. Whereas the semivowels y (IPA: j) and w tend also to be used as consonants, consonants such as ʾ and *H̥ show functional affinities with vowels.
Reconstructions based on Semitic and Cushitic alone point toward a balanced inventory of three short vowels (*i, *u, and *a) and three long vowels (*ii, *uu, and *aa). This, however, is unlikely to have been the case in the protolanguage; rather, in light of Chadic and Amazigh data and a more abstract level of phonological analysis, a two-vowel system (*a, *ə) appears more likely there.
Some phonemes, such as *y, *w, *ʾ, and *H̥, appear to serve both as consonants (called "weak radicals" when they form part of a root) and as vowels (in which case they become *i, *u, and *a), depending on their distribution in the root or word. Conceivably, Proto-Afro-Asiatic lacked a vowel system in the traditional sense but may have distinguished consonants and sonants instead; examples of sonants would have been, for instance, *m, *n, *r, *l, *y, *w, *ʾ, *H̥, and *H̥w, which could perform the functions of either consonants or vowels. As vowels they gave rise to *i, *u, and *a and sequences such as *am, *an, *ar, *al, *ai, *au, and *ʾa in the languages spoken today.
The majority of Afro-Asiatic languages are tone languages, meaning that in addition to consonants and vowels, the pitch of the voice is used to differentiate between words or smaller meaningful units. The use of tones is attested in Chadic, Cushitic, and Omotic but in neither Semitic nor Amazigh. In some Cushitic and Omotic languages, however, tonality resembles pitch accent, a linguistic feature somewhat comparable to stress in European languages, albeit relying solely on higher pitch for "stressed" syllables rather than automatically combining higher pitch with loudness or duration. Some linguists believe that Proto-Afro-Asiatic was a tone language and that daughter languages such as Semitic, Amazigh, and possibly Egyptian subsequently lost all tonal distinctions. Other authors assume Proto-Afro-Asiatic was a pitch-accent language; these linguists consider it more likely that tonality emerged independently in Chadic, Cushitic, and Omotic, assuming that tonal distinctions, at least in Chadic, developed out of the pitch-accent system of Proto-Afro-Asiatic in conjunction with the pitch-lowering effect of certain syllable-initial consonants called tonal depressors. Such automatic pitch lowering is well attested outside Chadic both within and outside Africa. Thus, long periods of contact with speakers of genuine African tone languages of Niger-Congo and Nilo-Saharan stock may have assisted the historical shift from pitch accent to tone systems in Afro-Asiatic.
Afro-Asiatic languages are characterized by a "root and pattern" system in which the basic meaning of a word is manifested in the consonants alone. The sequence of vowels, which is known as the pattern, adds grammatical information and may modify the basic lexical meaning of the root, sometimes in combination with prefixes or suffixes. The root k-t-b-, which means 'write' in Arabic, provides illuminating examples: adding the vowel pattern -a-a-a yields the form kataba 'he has written,' while the zero-initial pattern Ø-u(-Ø) plus the prefix ya- and the suffix -u yields ya-ktub-u 'he is writing.'
It is no coincidence that the West Semitic quasi-alphabets, which developed in the 2nd millennium bce and from which all later Afro-Asiatic writing systems derive (including tifinagh of the Amazigh), are made up of signs that represent a consonant followed by any or no vowel, thus reflecting the structural properties of this characteristic root and pattern system.
The nominal system
The distinction of masculine and feminine genders in nouns and pronouns (in the second and third person, and both singular and plural) is maintained widely but has been lost in some subdivisions of Chadic and Omotic. In Semitic and Cushitic languages, a noun may change its gender when it changes from singular to plural, a feature known as "gender polarity." For example, in the Cushitic language Burunge, kori 'year' is a masculine noun, but korara 'years' is feminine. Other languages use common gender in the plural (i.e., there is no gender distinction in the plural).
A notable historical feature is "gender stability," meaning that words for common things tend to share the same gender across the languages of the Afro-Asiatic phylum, no matter whether or not the particular words are cognate across the specific languages in question. For instance, the word for "blood" is always masculine, although the forms of the word clearly have different origins: ahni in Tuareg (an Amazigh language), *bar in Proto-Chadic, boy in Beja (Cushitic), snf in Egyptian, and dam in Hebrew (Semitic).
Forms used as demonstratives, articles, gender markers, and the like share common elements that may occur singly or in combination in order to mark these features (such as the masculine singular, feminine singular, and the common plural). Examples include *n, *k, and *u or *w for masculine and *t and *i for feminine, as well as elements of more limited distribution, such as *l, *h, and *š or *s, which are used to form further demonstratives and the like.
Very similar pronouns are used in verb conjugation in both prefix and suffix position to indicate the person, gender, and number of the subject. For example, the third person singular feminine prefixes *ta- or *ti- can be found in Amazigh (t-dawa 'she healed'), in the Chadic language Hausa (tá-sàyáa 'when she bought'), in the Cushitic language Bedawi (ti-dbíl 'she collected'), and in the Semitic language Akkadian (ta-prus 'she divided'). The corresponding suffix is found in conjugations in Amazigh (-t), Egyptian (-tj), and Semitic (*-at). Different but similar sets of suffixed pronouns are used to indicate object and possessor.
Other common elements can be found in noun derivation and inflection. A widespread element of derivation is *m-, used to derive agentive, locative, and instrumental nouns from verbs: compare the Arabic agentive mu-katib-un 'the corresponding one' with the locative ma-ktab-un 'the place to write' or 'the school,' both of which are derived from the verb 'to write.' Quite similar examples occur (for instance) in the Chadic language Hausa: má-hàif-íi 'father (the begetting one),' má-háif-áa 'birthplace, womb,' both of which are from the verb 'to procreate, beget, give birth.'
Some Afro-Asiatic languages mark nouns for number in a manner quite different from that used in most Indo-European languages. Whereas English, for example, usually differentiates only between singular and plural, Classical Semitic and Egyptian routinely distinguished between singular, dual, and plural. This system has left traces in other divisions of Afro-Asiatic, which tend to have a rich array of plural marking devices. Some devices originate in the verbal system, where they mark plurality of action, actor, goal, or location. An example from the Chadic language Lamang is kəla 'take,' kala 'take many,' and kalala 'take many here and there.' Noun plurals may be formed through the addition of affixes such as -uu or -w, and -n, which are particularly well attested, or through internal inflection. So, for example, in the Chadic language Hausa, "spear" is rendered máashìi while the plural form, máasúu, is created through a change in suffix. In contrast, the Amazigh for "wall," agadir, becomes the plural form igudar through a change in internal inflection.
Together, the forms of pluralization combine to form "broken" plurals, such as in the Semitic language Geʿez, in which nəgus 'king' becomes nägäs-t 'kings.' Chadic and Cushitic languages also use repetition of final consonants, partly in combination with vowel changes, as in Hausa táfkìi 'lake' and táfúkkàa 'lakes,' and ḳáfàa 'leg, foot' and its plural, ḳáfàafúu.
The verbal system
There are competing schools of thought surrounding the conjugational patterns of the protolanguage's verbal system. For decades heated debates have focused on the functions and interrelations of the most basic inflectional categories, often discussed in terms of dichotomous subsystems such as "state versus action," "transitive versus intransitive," "punctual versus durative," or "perfective versus imperfective." Likewise, there is considerable debate over the original marking devices for these categories and for the expressions of aspect, tense, and mood. Scholars have investigated the possibility that the protolanguage marked these categories through internal inflection in the root and pattern system, affixes, prefixal or suffixal person marking, and so on. Another question concerns which of these formations were actually nouns rather than verbs, or even something in between, such as participles or gerunds. A final area of discussion focuses on the relative age of certain recurring or missing features in the different divisions and languages.
Most scholars of Afro-Asiatic agree that the verbal systems of all Afro-Asiatic languages can ultimately be traced back to the common protolanguage (usually allowing for a unique development in Egyptian). However, the individual verbal systems have undergone considerable changes since then. Semitic and Amazigh, and to a lesser degree Cushitic, have maintained reflexes of the ancestral prefixal conjugation. This appears to have been largely lost in Chadic and Omotic and completely lost in Egyptian. The root and pattern system is well attested for Semitic, is less so for Amazigh, and is only rudimentary in Cushitic and Chadic.
Nominalized verb formations such as verbal nouns, participles, and predicative adjectives probably harken back to the protolanguage and can be reconstructed for predicates expressing state rather than action. This predicate form is commonly referred to as the "stative conjugation" and uses suffixes for indicating the person, number, and gender of the subject. Some conjugational paradigms of today's languages (and also of extinct ones such as Egyptian and Semitic Akkadian) derive from this suffix conjugation, including practically all paradigms in Egyptian, the Akkadian stative, the West Semitic perfective, and the qualitative in Kabyle (an Amazigh language). A greatly simplified analog of this conjugational form would be the English "eating-of-mine" for "I eat."
Another common feature concerns the irregularity of imperative forms of the verbs "to come" and "to go." These tend to use specific suppletive forms; that is, they replace the verb stem itself with another stem. Compare, for instance, the normal verb stem and the imperative form of "to come": in Proto-Chadic these are *(-)sə and *ya, respectively; in Amazigh Kabyle as and eyya; in Egyptian nn and mn; and in Semitic Amharic mεṭṭä and na.
Afro-Asiatic verbs can be modified to indicate different kinds of qualities of action. Derivational extensions of verb stems (forming what are called "stirpes" or "themes") use root modification (infixes) and derivative affixes together with partial or complete reduplication to indicate repeated action. Derivational markers may combine, which makes it possible for a single verb to indicate repeated action (by what is called the iterative derivation of the verb), action caused to happen (the causative derivation), action affecting the subject (the reflexive derivation), or action mutually affecting subject and object (the reciprocal derivation). The stirpes are commonly named after the affixed consonant. Thus, for the Proto-Semitic root *-p-r-s- 'to divide,' the causative form is *-ša-p(a)ris (called the "S-stirps"), the reflexive is *-n-paris (the "N/M-stirps"), and the reciprocal is *-t-paris (the "T-stirps").
Little historical work has been done on comparative Afro-Asiatic syntax; consequently, there is little agreement even on the original word order. Classical Semitic, Egyptian, and Amazigh all use a VSO (verb–subject–object) order, but almost all Cushitic languages use SOV order, and Chadic languages usually have SVO order. If, however, as Diakonoff suggested, Proto-Afro-Asiatic was an ergative type of language, in which subject and object as traditionally construed are not valid concepts, then such simple formulas would not be at all useful in explaining the syntax of the protolanguage.
Learn More in these related Britannica articles:
Africa: LanguagesThe Afro-Asiatic family includes languages from both Africa and the Middle East: Semitic (including Arabic, Amharic, and Tigrinya), Egyptian (extinct), Amazigh (Berber), Cushitic, Chadic (e.g., Hausa), and Omotic. It is found over much of northern Africa and eastward to the Horn of Africa. Arabic is both…
Sudan: Languages…three families of African languages: Afro-Asiatic, Nilo-Saharan, and Niger-Congo. The Afro-Asiatic languages, Arabic and the Bedawi language of the Beja, are the most widely spoken. The Nilo-Saharan languages include the many Nubian languages, spoken in various places across the country, the Zaghawa and Fur languages, spoken…
Kenya: Ethnic groups and languagesNilo-Saharan, and Afro-Asiatic. Bantu is by far the largest, and its speakers are mainly concentrated in the southern third of the country. The Kikuyu, Kamba, Meru, and Nyika peoples occupy the fertile Central Rift highlands, while the Luhya and Gusii inhabit the Lake Victoria basin.…
Ethiopia: From prehistory to the Aksumite kingdom…the modern languages of the Afro-Asiatic (formerly Hamito-Semitic) family. This family includes the Cushitic, Semitic, and Omotic languages now spoken in Ethiopia. During the 2nd millennium
bce, cereal grains and the use of the plow were introduced into Ethiopia, possibly from the region of the Sudan, and peoples speaking…
Arabic language
Arabic language, Southern-Central Semitic language spoken in a large area including North Africa, most of the Arabian Peninsula, and other parts of the Middle East. ( SeeAfro-Asiatic languages.) Arabic is the language of the Qurʾān (or Koran, the sacred book of Islam) and the religious language of all Muslims. Literary Arabic,…
More About Afro-Asiatic languages7 references found in Britannica articles
Assorted References
- Basque languages
- Eastern African origins
- Nostratic hypothesis
- Kenya
- northern Africa
- Sudan


text:
Tiger Woods' next stop on the comeback trail will be the U.S. Open in June.
Woods, who finished tied for fourth in the Masters last week, officially entered the tournament, which will take place at the Pebble Beach Golf Links June 17-20. After his disappointing finish at Augusta, Woods indicated he would take time off before playing again. While the U.S. Open is the next major on the PGA circuit, there are several big golf tournaments between now and then.
Pete Kowalski, a spokesman for the United States Golf Association, confirmed Woods' entry in an e-mail first reported by the Monterey Herald of Monterey, California.
Woods has won three U.S. Opens, with his first coming in 2000 at the course in Pebble Beach, California. He also claimed the title in 2002 at Bethpage State Park in New York and in 2008 at Torrey Pines Golf Course near San Diego. Unlike the Masters, the U.S. Open rotates venues each year.
Woods has won 14 major championships, four shy of Jack Nicklaus's record.
Woods, 34, dropped out of sight following a Nov. 27 car accident that ignited a sex scandal. He later resurfaced saying he had been in treatment and hoped to save his marriage.
Among the tournaments Woods could play before the U.S. Open are the Quail Hollow Championship in Charlotte April 29-May 2, which he won in 2007; the Players Championship in Ponte Vedra Beach, Florida, May 6-9, which has a $9.5 million purse, the biggest in golf; and the Memorial Tournament in Dublin, Ohio, June 3-6.


text:
Go Gettas - I Ya Ya Ya [Unsigned Hype]
G reports "Hottest Comin OUt Of San Francisco (the BAY) THE REAL GO GETTAS!!!!!FUCK JOEY JIHAD more videos coming soon myspace.com/gogettasslap youtube.com/gogettastv
Please click the "Report" button below if the video on this page is not working properly.
Comments will only be displayed by verified emails. No Spamming or Racism.


text:
Robert Marcum knew he had a problem when he found out he was dead.
The tragic news arrived recently as he was trying to close a deal to buy property in Palm Springs. Marcum, 70, was informed that, according to his credit file, he'd passed away a couple of years ago.
"No one had told me," he said.
Looking more closely at his credit file, Glendale resident Marcum discovered that not only was he dead but that, when he was alive, he was apparently involved with a woman named Jean Thomson. Her name was all over his file.
"I don't know any Jean Thomson," Marcum said. "But there were credit cards in Thomson's name. It seemed like something scandalous had happened."
Meanwhile, about 20 miles away in Woodland Hills, Thomson, 81, was thinking the same thing.
"I was getting mail in this man's name to my address," she said. "I had no idea what was going on."
What was going on, according to the Los Angeles Times, was that Thomson's and Marcum's credit files had been mistakenly merged by a computer at Equifax, one of the leading credit reporting companies.
Such digital screw-ups happen from time to time and can be a challenge for consumers to untangle.
"It can be a big hassle to deal with something like this," said William Kennedy, a Northern California lawyer who specializes in credit-related cases.
"Your credit is your ticket to all sorts of things, from jobs to apartments," he said. "You can literally be held hostage if you find yourself in a situation like this."
It's hard to say how exactly credit files become merged. Typically, there will be enough similarities between files — a name, an address, a few digits of Social Security numbers — to confuse database computers and cause two reports to become one.
When this happens, the credit reporting company that created the mess won't spot it until someone brings it to the firm's attention. And even then, it can require consumers to jump through multiple hoops to straighten things out.
"It's almost a full-time job unraveling these mistakes," said Linda Sherry, a spokeswoman for the advocacy group Consumer Action.
Marcum's first thought was that he was a victim of identity theft, but, strangely, it didn't seem as though Thomson was doing him any financial harm. She was paying her credit card bills. There didn't seem to be any fraud.
Marcum contacted Equifax and began the dispute process. "They couldn't explain how this had happened," he told me.
For her part, Thomson was deeply concerned that she too was an ID theft victim. But she was mystified that Marcum didn't seem to be ripping her off in any way.
Thomson said she was told by Bank of America that Marcum apparently had the same Social Security number as her deceased husband, who also was named Robert.
This made no sense. Social Security would have flagged such an occurrence as soon as it became clear that benefits were being claimed by more than one person.
Thomson wasn't sure how to proceed, so she contacted me. I brought it to Equifax, which directed me to the Consumer Data Industry Assn.
Stuart Pratt, head of the trade group, acknowledged that bad info can seep into people's credit files. Sometimes this can be the result of human error, such as a wrong keystroke or a misplaced digit. Other times, the computer may be at fault.
"Large databases wrestle with a variety of challenges," Pratt said. "We have marriages and divorces. People are moving. Data can change for a variety of reasons."
When consumers notice a credit-file mistake, he said, they should take the initiative in contacting the credit reporting company. Each company has its own dispute process.
Here's the thing: Just because you've cleaned up a mess at one company doesn't mean you've taken care of things at the others. In Marcum's and Thomson's cases, their problem seemed to have originated with their Equifax files.
But that doesn't necessarily mean that their Experian and TransUnion files were in the clear.
Pratt said merged files such as this usually are confined to a single company, so there's no need for an industrywide system that would require each company to share such incidents with other credit reporting firms.
He admitted, though, that if this had happened to his Equifax file, he'd also contact Experian and TransUnion. Clearly the industry can do more in such instances.
Consumers should be vigilant where their credit files are concerned. Go to AnnualCreditReport.com and order a free copy of your files at least once per year. If you don't look out for problems, no one will.
As for Marcum and Thomson, they say they're taking steps to reclaim their lives. Marcum has closed the deal for that Palm Springs property. And creditors will no longer think he and Thomson are an item.
Although you never know.
"What's she like?" Marcum asked me.
--David Lazarus, Los Angeles Times
Ceiling mural discovery kicks off fundraising drive
Farmers market may be due for change


text:
The hostess with the "mostest" deserves all the praise in the world. Like Mom always said, you should never show up to a party emptyhanded, so whether you're headed to a housewarming party or a baby shower, these gift ideas will make sure you give any celebration the praise it's due.
Gifts.com is there for you with every life event, and our personalized housewarming gifts will help you celebrate every special event. If your friends have recently purchased a house, make sure you commemorate the occasion and share in their joy with some beautiful first home gift ideas. Perhaps it's your special guy who recently made this huge life step; grab a housewarming gift for your boyfriend to help him decorate the place and let him know how proud you are of his accomplishments. Browse our housewarming gift ideas for family, from wall décor with a customized touch to beautiful baskets of gourmet food items.
Are you soon headed to a baby shower? Let your friend know she's doing a great job of hosting with the perfect baby shower hostess gifts to show your gratitude. Are you the mommy-to-be of honor? Make sure your loved ones knows just how appreciative you are of her efforts to shower you with well wishes with creative baby shower hostess gifts she'll love. Are you recently engaged? If your family member or friend is throwing you a lovely wedding shower, make sure you don't show up emptyhanded to your own party and browse our elegant selection of wedding shower hostess gifts.
Are you shopping for host and hostess gifts at the last second? Don't fret, and don't run out to buy the same old bottle of wine. With overnight delivery on many of our lovely items, you'll have the perfect gift before heading over to the celebration.
Whether you need ideas for housewarming gifts or you're searching for birthday presents, Gifts.com is the place to be.


text:
GridStream Productions Celebrates 10 years on air!
GridStream Productions, the oldest existing MMORPG-based internet radio station in the world, is celebrating their 10th birthday on May 19th, bringing back some of the legends of GridStream who helped pioneer the concept of broadcasting from within a virtual world. We here at Funcom are very proud to have had them with us for so long and we will be attending the party held that very evening!
GridStream Productions (GSP) was founded in May 2002 by Anarchy Online celebrity Lan Tarryk Kozar, Justin Boco Devane, and others, and is still owned by some of the original staff and founders. The broadcasts are hosted within Anarchy Online with vicinity parties, games and contests, and live music streamed through GSP's website at gridstream.org.
GSP is run entirely nonprofit, by players for players of Anarchy Online. GSP currently has twenty DJ's based all over the world, with different tastes in music providing a varied listening experience. GridStream has also done interviews, like the exclusive they did with Nick Wheeler of The All American Rejects in connection with their in-game concert a few years ago.
Additionally, GridStream Productions is currently planning the first ever fan convention for Anarchy Online. It will be taking place August 10-12, 2012 in Grand Rapids, Michigan. You can find more information about it at ao-con.com.
The landmark birthday celebration will be taking place on May 19th with an enormous party at Reet's Retreat's Glass Dance Floor – the very place where GSP was conceived. The party will be on RK1 from 4pm to 10pm GMT. Tell your friends and log your alts. It'll be a celebration filled with fun, memories, and friendships old and new.


text:
Holy Spirit Medical Group (HSMG) is a growing group practice comprised of established primary care (family medicine, internal medicine, pediatrics and urgent care) and specialty care (endocrinology, cardiology/vascular, OBGYN and surgery) outpatient clinics. Our new facilities and state of the art technology provides an excellent environment for high quality, cost-effective patient care. Outpatient facilities are located within the suburban communities of central Pennsylvania, located near the state capital, which delivers economic stability and community vitality.
Geisinger Holy Spirit – Duncannon is seeking a board certified/board eligible primary care physician to join our outpatient primary care clinic in Duncannon, PA. The staff at Geisinger Holy Spirit – Duncannon is committed to providing the best care for every patient and as experts in primary care, meeting patients' needs is our top priority. Applicant is expected to work at least one evening per week and participate with an on-call rotation.
At Geisinger, we've been focused on advancing the future of health for more than a century. From our groundbreaking genomics program to our life-saving Fresh Food Farmacy which treats patients with diabetes, our commitment to innovation runs deep.
What you do at Geisinger shapes the future of health and improves lives with:
30 minutes appointments for our elderly patient population
Daily huddles with all care team members to review essential information about schedules, patients, resource needs and coordination of care.
Pharmacists to assist with patient education and medication management
Care managers, health managers clinic health associates and coding educators are available to patients and providers.
Increased access to care by means of eVisits, patient portals and Geisinger Holy Spirit's Spirit Urgent Care clinics.
For more information, please contact: Miranda Grace, Talent Management Consultant, Geisinger, at: www.geisinger.org, 717-899-0131 or firstname.lastname@example.com
OUR PURPOSE & VALUES: Everything we do is about caring for our patients, our members, our students, our Geisinger family and our communities. KINDNESS: We strive to treat everyone as we would hope to be treated ourselves. EXCELLENCE: We treasure colleagues who humbly strive for excellence. LEARNING: We share our knowledge with the best and brightest to better prepare the caregivers for tomorrow. INNOVATION: We constantly seek new and better ways to care for our patients, our members, our community, and the nation.
About Geisinger: Geisinger is a physician-led health system comprised of approximately 30,000 employees, including nearly 1,600 employed physicians, 13 hospital campuses, two research centers, and a 583,000-member health plan Geisinger is nationally recognized for innovative practices and quality care. Geisinger serves more than 3 million people in central, south-central and northeast Pennsylvania and also in southern New Jersey with the addition of National Malcolm Baldridge Award recipient AtlantiCare, A member of Geisinger. In 2017, the Geisinger Commonwealth School of Medicine became the newest member of the Geisinger Family.
We offer healthcare benefits for full time and part time positions from day one, including vision, dental and domestic partners.* Perhaps just as important, from senior management on down, we encourage an atmosphere of collaboration, cooperation and collegiality. For more information, visit www.geisinger.org, or connect with us on Facebook, Instagram, LinkedIn and Twitter.
** Does not qualify for J-1 waiver. We are an Affirmative Action, Equal Opportunity Employer Women and Minorities are Encouraged to Apply. All qualified applicants will receive consideration for employment and will not be discriminated against on the basis of disability or their protected veteran status.
*Domestic partner benefits not applicable at Geisinger Holy Spirit.


text:
WESTMINSTER, Colo., September 24 – The Association of Professional Genealogists (APG) honored five members for outstanding contributions and achievements at the 2009 Federation of Genealogical Societies (FGS) Conference held September 2-5 in Little Rock, Arkansas.
APG named Loretto Dennis Szucs as the recipient of the APG Professional Achievement Award. The award was created in 2007 to recognize a record of exceptional professional achievement with contributions to the field of genealogy through individual excellence and ethical behavior. Szucs has been involved in genealogical research, teaching, lecturing, and publishing for more than thirty years. Previously employed by the National Archives, she is currently executive editor and vice president of community relations for Ancestry.com. She has served on many archives and genealogical boards, and was founding secretary of the FGS. Currently, she serves as a director on the Board of the FGS.
Sandra MacLean Clunies, CG, received the Grahame T. Smallwood Jr. Award of Merit, an award honoring personal commitment and outstanding service to the APG organization. Clunies has served APG in several leadership roles since 1996, including two terms on the APG Board of Directors (2004-2008), National Capital Area Chapter President (2004-2008) and National Capital Area Chapter Vice President (1996-2000). In addition to her APG leadership roles, Clunies has served as Director for the Genealogical Speakers Guild, Vice-President of GENTECH and an adjunct faculty member at the National Institute on Genealogical Research (NIGR) and the Institute of Genealogy and Historical Research (IGHR) at Samford University.
APG named Sharon E. Sergeant as the recipient of the APGQ Excellence Award, given to recognize excellence in submitted APG Quarterly material. Sergeant was honored for her article titled, "Holocaust Secret Exposed: How Forensic Genealogy Cracked the Misha Defonseca Case". She is the past Program Director and current Secretary of the Massachusetts Genealogical Council. She is an active lecturer, author, and conference planner.
Certificates of appreciation were also awarded at the FGS in recognition of outstanding, continual or unusual contributions to APG, by a member or a non-member. This year, there were two recipients. Luke M. Muszkiewicz, of Pure Development, LLC, was honored for long-term contributions to the APG organization in the areas of technical advice, computer programming, web design, and customer service. Alvie L. Davidson, CG, was honored for continued generosity and involvement in the support, planning, and execution of APG's 30th Anniversary Celebration and the 2009 Professional Management Conference.
The Association of Professional Genealogists (http://www.apgen.org), established in 1979, represents over 1,800 genealogists, librarians, writers, editors, historians, instructors, booksellers, publishers, and others involved in genealogy-related businesses. APG encourages genealogical excellence, ethical practice, mentoring, and education. The organization also supports the preservation and accessibility of records useful to the fields of genealogy, local, and social history. Its members represent all fifty states, Canada, and twenty-six other countries.
Contact: Kathleen W. Hinckley, CG, Executive Director,
Association of Professional Genealogists
P.O. Box 350998, Westminster, CO 80035-0998
Phone 303-422-9371, fax 303-456-8825, e-mail firstname.lastname@example.com
# # #


text:
Patients & Visitors
For Professionals
Pharmacy Residency
Health Education
About Us
Presbyterian/St. Luke's Medical Center
Rocky Mountain Hospital For Children at P/SL
June 6, 20199:00 AM
Thank you for choosing Molly Jo Weaver for your medical needs.
Denotes required field
Now you can access your health information anytime through our secure, online health portal.
With MyHealthOne you can find a doctor, make an appointment, view hospital lab results, pay your hospital bills and more.
Send confirmation to


text:
Tyfyffe.com Presents RawNUncut [User Submitted]
"TyFyffe.com presents Raw N' Uncut - a chance for all aspiring artists to showcase their talent and perform to an actual track from superproducer TyFyffe! "
Please click the "Report" button below if the video on this page is not working properly.
Comments will only be displayed by verified emails. No Spamming or Racism.


text:
How To Get Great Amazon Reviews For Your Brand-New Novel
First, a big thanks to Tess and Joe for launching this campaign in Tess's War On Alzheimers. You never know which bullet will end up winning a war, and with our help, Tess and Joe have already delivered more than $25,000 to the front lines. If you haven't done so yet, please go visit her page and donate.
If you're reading this, maybe you're a newbie writer like me. A story idea sinks its hooks into your brain and won't let go. You find yourself grinning into an open refrigerator, whatever you were going to grab forgotten as the perfect plot twist or high-concept hook reveals itself to you. Your spouse/kid/significant-other has to repeat themselves three times before you realize you're still standing there with frost forming on you're face. And still grinning like an idiot.
You go write the story. And rewrite. Study craft books. Rewrite. Join critique groups. Rewrite. People start liking what you wrote. Some even love it.
You make whatever sacrifices are necessary to get yourself a great editor. You do that because you know publishing unedited, unpolished, incoherent writing riddled with typos is unprofessional. It's arrogant. If you expect readers to pay for your writing, they should be able to expect transparent prose and near-perfect copy from you, too.
You go get stunning cover art. A compelling blurb. Professional conversion to epub & mobi files. You upload your book to KDP, Nook Press, and iBookstore, and you "push the button." Then you celebrate, and tell all your real-life and Facebook and Twitter friends your book is finally out. And you sell a few dozen copies. Your friends compliment you on how talented you are.
And all too soon—to paraphrase Animal Mother from Kubrick's Full Metal Jacket—"…you're fresh out of friends, Joker." Because half of your friends don't read, and the other half don't like the same kinds of books you do.
So you start eyeing BookBub, Ereader News Today, Pixel of Ink, and the other great sites where we indies can get the word out. But that glaring "Be the first to review this item" link on your book's Amazon page is an ugly roadblock. You need reviews. Good reviews.
Still with me? Great. Let's go get those reviews.
Should we:
1) Harass friends and family to write their first book review ever?
2) Pay a service to bulk-email a hundred or a thousand prolific Amazon reviewers in our genre, blasting them with a generic mail-merged solicitation to review our book?
3) Review other new authors' books ourselves, just so we can ask them to review ours?
No. All three approaches are total bullshit. Worse, they will damage your credibility as a newbie author. And you'll end up making the rest of us indies look bad, too. Here's why.
The problem with friends-and-family reviews:
I'm not going to touch the ethics here; I'm only going to focus on the practicalities. When checking out a new author on Amazon, the first thing a savvy book-browser does is look at the distribution of ratings. A natural distribution of 5, 4, 3, 2, and 1 star reviews is very easy to recognize. So is a pattern of friends-and-family-written 5-star reviews—even with a couple fake 4-stars and one 3-star thrown in to try to appear more authentic.
The next thing a savvy Amazon browser does is skim a few of the reviews. A quick glance at word count, specificity, and tone usually tells me right away which ones are honest, non-incented reviews by strangers and which ones are what the Amazon reviewer community refers to as "shill reviews."
If there's still any question about whether you're looking at a shill review or not, the proof-positive check is to click on the reviewer's name, and then the "See all my reviews" link on their profile. If the only three books he or she ever reviewed belong to that same brand-new author… or if five other titles got quick-and-dirty reviews that same day, but the reviewer reviewed nothing before or afterward… then you know.
And you move on immediately. Because the shill reviews look needy and sad, and the sour whiff of desperation makes you assume the book is lousy even when it really isn't. You resent the author for trying to trick you. You make a mental note to avoid him or her in the future… if you actually bother to remember the name.
Hugh Howey's WOOL has over 6,000 reviews on Amazon. (Go read WOOL, SHIFT, and DUST. Seriously. Then read 'em again slowly and take notes.) Hugh requires no introduction here, and he's graciously allowed me to quote him on the topic of reviews.
Hugh Howey says:
I ask my friends and family *not* to write them (I had my wife delete some reviews for my older works)… It was over a year or so ago that I had to tell my father not to write reviews for my works. I love the man to death, and he was just trying to support a son that he was proud of, but he would get on and review my works as soon as they went up (he reads them in draft form before I publish them). At this point, I was aware of Amazon's review policy and the sensitivity toward authors soliciting reviews from friends and family. I never asked my dad to write reviews. He was just being nice. Same thing with my wife. What stinks about all of the controversy around the reviews is that my friends and family *do* read my books, and at least some of them actually like them. And they can't share their opinions.
Paul Draker says:
We can learn a lot from Hugh. Every new author has to find his or her own path, but with selfless folks like Hugh and Joe lighting the way for us and sharing their experiences so openly, it's a hell of a lot easier now.
If you are *still* tempted to go the friends-and-family-reviews route at this point, here's a final caveat emptor. Amazon's independent reviewer community doesn't like authors who do, because it devalues and shows disrespect for something they care a great deal about: honest, impartial reviews. Amazon's most influential reviewers are people like you and me who are very passionate about what they do. They put a lot of time into it. They hate it when you make everyone question the integrity and credibility of Amazon reviews. As a new author, do you really want to poke our new gatekeepers in the eye? Especially when those gatekeepers are some of our best customers?
The problem with spam-solicited reviews:
I ran across a few services that will spam Amazon's Top-100 or Top-1000 "contactable" reviewers if an author pays them to. Some target reviewers by genre: Mystery, Thriller, Romance, etc. One predicts a 9% response rate and a 6% agree-to-review rate. But if you try this approach, your chances of screwing yourself good are also reasonably high. Here's why.
If you've written a novel that evokes strong reactions—and if it's good, believe me, it will—your true target audience will love it. But not everybody will. Some people will hate it, and that's fine. Look at the most-successful novels and you will see a plethora of one-star reviews panning them, too. Look at Gillian Flynn's Gone Girl reviews. And who wouldn't want her sales?
But you aren't Gillian Flynn. If you are, call me—I've got a series idea we can co-write ;)
If you write "thrillers" as I do, you face a real audience-segmentation challenge. The term "thriller" can mean anything from a CSI-style procedural or a courtroom drama, to an apocalyptic end-of-the-world epic, a gore-drenched serial-killer hunt, or a guns-blazing spy-versus-spy technothriller. Each has a distinct audience, and they don't overlap much. "Mystery" could be a parlor-room cat-sleuth cozy or a Hitchcock-style suspense story or splatterpunk noir. "Romance" could be sweet, soft-focus boy-meets-girl that makes you go "Aww…" Or it could be sexually-explicit erotica. Genre-mashups make the problem worse. Industry BISAC categories fail to delineate the real distinctions between what a given group of readers will love and what they are likely to detest.
An email solicitation that begins: "Dear iluv2rivu, because you like thrillers…" is more likely to net you a bunch of lousy reviews than good ones. Not because your book sucks, and not because the solicitation screams "spam," but rather because you ended up soliciting reviewers predisposed to dislike your book.
Oh, and a lot of the top reviewers *do* find getting spammed by those emails annoying. Especially when they can tell the book is one they won't like. Once again, caveat emptor.
The problem with you-scratch-my-back-and-I'll-scratch-yours author peer reviews:
Amazon already has, or had, a policy of deleting reviews by other authors. Enough said. If poking the new gatekeepers in the eye is a dumb idea, what about biting the hand that feeds you?
Okay, so none of those approaches are worth pursuing and some can backfire. They can seriously hurt your author cred. But that "Be the first to review…" link is still sitting there like a big, ugly cankersore in the center of your product-page's face. So…
How does a newbie author go about getting great, honest, real Amazon reviews?
You know your book is good. Really damn good. You know there is a specific group of readers out there somewhere who will absolutely love it. They are your audience. In fact, you even know the exact tastes of those ideal readers. You know precisely what books they read, what movies and TV shows they watch. You know which ones they've loved, and which ones they've hated. And you know what they loved or hated about them. You know all of this because you see one of your ideal readers every day. In the mirror.
You *did* write the kind of story you always wanted to read, right? If not, what are you doing here? Go write *that* book, then come back.
Because what comes next presupposes that you've already done your part. You've written a story that people will actually love reading, and you've had it professionally edited, and honed your prose to perfection before you try this. The reviews you're about to get will be no-bullshit honest reviews. If your book isn't ready for that, you should NOT be doing this at all. If you do, you'll get reviews, all right—one and two star ones. Worse, you'll also hurt the credibility of the rest of us indie publishers.
But if you did do your homework and wrote a good book, your audience is out there somewhere. Even better, some of them are honest, tenured reviewers who will love what you wrote and give you a heartfelt, enthusiastic review on Amazon. Your book may well be a unique and beautiful snowflake, but right now it's invisible in a blizzard of brand-new books. Your ideal reviewers are busy writing Amazon reviews for other books. They have no idea that yours exists. You would love to tell them about it, but you have no idea who they are, either.
What you do know is the other books and movies they love. And which ones they hate. And why. So roll up your sleeves… it's time to get to work. I didn't say this was going to be easy, did I? But you already wrote a good book. Compared to that, this part is cake. And you'll see—once you start engaging and talking to reviewers who are part of your own unique target audience—that it's rewarding, gratifying, and fun as hell, too.
Let's dive in. Here it is, step by step.
STEP 1: Make a list of books and movies you absolutely loved, and which some aspects of your book are similar to. Unique snowflake? Nothing else like it? Gee, sorry, but something inspired you to write that particular type of story. Figure out what your all-time favorite book and movie influences were and write them down. You need a statistically-significant spread, so write down at least twenty. The more distinctive they are, the better. The more unique to your taste they are, the better. Then make a second, shorter list of five or so books and movies your friends expected you to love, but you ended up hating instead.
STEP 2: Read five-star and four-star Amazon reviews of the books and movies you love first. Whenever a reviewer's specific comments make you smile and think, "Yep, that's exactly what I thought," or, "that was the most memorable part/character/twist/setting for me, too. That's why I used a similar one in my book," click the reviewers name to pop open their profile. Some reviewers have email addresses listed, but don't jump in and email them yet. A single book or movie on which your tastes are similar doesn't mean much. Sending them a vague email implying that any five-star reviewer of Lee Child's Jack Reacher books should be thrilled to hear about your own won't get you good reviews. At this stage, you would probably just be annoying the recipient with unwanted spam. You might even earn yourself a lousy review by doing so.
STEP 3: Read the reviewer's "In My Own Words" and "Interests" which some have taken the time to fill out. Look at their frequently used tags. All these things will give you a better feel for whether this person is part of your audience or not. If you see red flags that apply to your book (no graphic violence, dislike profanity), or just get a general sense they might not be a good match for you, move on. Again, you're trying to find reviewers who will *want* to hear about your book… and trying not to be that jerk spamming people who don't.
Look for Amazon rank badges next to the reviewer's name: Top 1000 reviewer, Top 500 reviewer, etc. Reviews from higher-ranked reviewers generally get more visibility on your product page, in the two slots for "most helpful positive review" and "most helpful critical review."
But trying to get the higher-ranked reviewers to review your book isn't necessarily the best approach. They receive tens of daily email solicitations to review this or that. Most are Vine Voices, often with a backlog of obligatory reviews they owe Amazon before they can even consider tackling yours. They are already jaded by the tons of free review copies big publishers throw at them every day, so many have adopted a policy of ignoring indie book review solicitations. Because they have to review so many books, they might only speed-read or skim yours, then write a generic review that reads like backcover-blurb-summarized-plus-generic-faint-praise. That's not what you want, either.
Instead, look at the reviewer's "Helpful votes received on reviews" percentage. Here, the higher, the better. 80%+ is good. 85%+ is great. 90%+ is stellar. Below 50%, and you are asking a person to review you whose reviews most people consider unhelpful. In other words, probably a troll. Move on.
Also, some reviewers' profiles clearly state "I don't accept review requests" or "no self-published books" or "no e-books" or "I don't review fiction" or similar. If so, respect their wishes and move on. They aren't your audience. But if the reviewer's profile reads like something you might have written yourself, you're getting warmer. Still, you have much more to do before you can decide whether to click that email link or not.
Many profiles are blank: a nickname, but no details and no contact info. Even that's not a showstopper if the reviewer's tastes turn out to be a great match for your book, as we'll see shortly.
Some profiles have a website or blog listed for the reviewer, but don't go there yet, either. Save that for last. We'll come back to it if the reviewer still seems like a good match after the next—and most important—step.
STEP 4: Now click on "See all 114 reviews" (or however many this particular reviewer has done.) Page through them to find which of the other books and movies on your lists the person reviewed, how they rated them, and what they said about them. If they haven't reviewed several of the other books and movies on your list, it's an indication they probably aren't a good match, because folks tend to review their favorite things. Look at their one- and two-star reviews, also, and read what they say. If the reviewer disliked a book or movie you love, that's a big yellow flag. If you disagree with why they say they disliked it, that's a red flag. Move on. But if their opinions on the other things on your list parallel your own opinions, too, and they say "should get seven stars" and "my all time favorite" or say "fell asleep halfway through" and "I wanted the annoying sidekick to die" about the same ones you would, then BOOM. You most likely have found someone who would want to review your book. Another good sign is when they make frequent references and comparisons in their reviews to yet other books and movies you love—like John Carpenter's THE THING—too.
Take notes on the individual reviews and colorful comments that you most strongly agree with. Seriously, take those notes because you'll need them when you contact the reviewer. And don't forget, you'll be looking at lots of different potential reviewers and tons of titles each have reviewed. If you don't take notes, it will all blur in your head. And then you'll embarrass yourself telling someone you loved what she said about the chainsaw flashback in Jeff Lindsay's Darkly Dreaming Dexter when it was actually someone else who said that. Did I mention to take notes?
If you see reviews you emphatically don't agree with, it's time to move on, because the reviewer is not your audience. But if you find that the more of their reviews you read, the more you believe their tastes match yours, it's time to go back to their profile page and click the link for their website or blog.
One last thing: as you read reviews, look for the word Kindle: "I was turning Kindle pages faster and faster at the end." "My Kindle battery died on the last chapter, and I almost cried with frustration." "When I read that part, I wanted to throw my Kindle in the pool." If you find references to their Kindle or other e-reader, then grin and make a note of that, too.
If this seems like a lot of effort to put in to get to know a single potential reviewer, just consider how many hours of *their* time you are asking for, when you ask them if they want to read your book.
STEP 5: Read the reviewer's webpage, if they happened to provide a link to one. Browse their blog posts. Get to know them better. Again, look for red flags that have relevance for your book ("BF took me to see Joss Whedon's CABIN IN THE WOODS yesterday. Yawn."), and make note of interests that match yours.
If the reviewer didn't include their email on their Amazon profile but listed their website or blog, you can usually find their email or other contact info there.
STEP 6: You've now gotten a good feel for how this reviewer thinks and talks, what gets them jazzed, and what annoys them. You've read so many of their reviews that you can practically hear what they'll say about your book in your head already. If you still are convinced they'll love it, it's time to send that brief email. Include:
· How you found them: by reading a bunch of their reviews on Amazon.
· Which comments and reviews of theirs you enjoyed. You write books. They write reviews. They want folks to read and value their reviews just as much as you want people to read and value your book. Tell them which reviews you liked, and why. Be specific. But be succinct, too.
· Why you are contacting them: because you think that, based on what they said in their reviews, they might enjoy your book, too.
· A very brief teaser or blurb for your book. But provide enough information to let them know what to expect, plot-wise and tone-wise.
· A statement that you are looking for honest, unbiased reviews of your book.
· Offer them a free review copy of your book.
If you are sure they read on a Kindle or other ereader (check your notes), offer to email a free mobi file of your book. But do not send it until they tell you they want it. Many will decline and buy their own copy, which is even better. They do it because they love books and want to support you, the author. And also because they don't like to put the FTC-mandated disclosure of a free author-provided copy in the review, which might cause someone to question the honesty and impartiality of what they said about it.
If you have a print version available through Createspace or Lightning Source, you can offer the reviewer their choice of formats. It's a classy thing to do. But it can get expensive fast.
If you don't currently have a print version, narrow your target to reviewers who have mentioned their Kindle or ereader in a review. Otherwise, you're probably wasting their time. And yours. And disappointing or annoying them.
No email address on their profile? No contact info? No problem. That "Add a comment" button beneath their most recent review of a book you both love? Leave a briefer version of your review request as a comment instead, but make sure you tick the "Receive an email when new posts are made" checkbox when you do it.
Be courteous. Be brief. Be honest. Be yourself.
Remember, nobody can express what's great about your book as well as you can. And you'll also be talking to the most receptive audience possible: the reviewers most likely to love it.
But no means no. If a reviewer doesn't express interest, don't pester them. Don't spam them. Move on. Reviewers are our most influential, most valuable, most enthusiastic customers. Don't pee in the pool the rest of us indies are swimming in, too.
STEP 7: Shake. Rinse. Repeat.
Before you start, I also recommend reading How To Get Good Reviews On Amazon: A Guide For Independent Authors and Sellers by Theo Rogers. It'll help you avoid shooting yourself in the foot. You'll learn a lot about the Amazon.com reviewer community from it, and I've borrowed from it shamelessly here.
If your own book is good—if it's polished and professional and people actually enjoy reading it—repeat STEPS 1-7 enough, and that ugly "Be the first to review…" will go away, replaced by pretty yellow stars. Lots of them.
The best part is: you won't only be gathering honest, positive reviews from well-respected Amazon reviewers this way. You'll also be planting seeds that will grow into your own eager army of Constant Readers, too. And you'll be meeting new friends who share your enthusiasm for the books and movies you love, including your own. Reviewers are by definition the most active, outspoken readers, and they share what they like with their friends. They spread the word. Your reviewers are all unique and beautiful snowflakes, too. You never know which snowflake will be the one to set off the avalanche.
As I type this, I'm staring at my own book NEW YEAR ISLAND's ugly "Be the first to review" link. But I'm grinning at that nasty little sucker, because it's not going to look that way for long.
Does combing through Amazon reviews until you find honest reviewers who share your tastes sound like a lot of work? Then picture Joe in the pre-Amazon days, driving around the country from bookseller to bookseller, talking to several a day and doing back-to-back book signings. For years.
Puts things into perspective, doesn't it?
If you've managed the hard part and written a book that some people will enjoy reading, then your own audience is out there, waiting for you. Now go find them.


text:
Two Ways To Wear Polka Dot Jeans
While poring over street style photos from Paris Fashion Week, we spotted two models, Devon Windsor and Andreea Diaconu, in off-duty outfits featuring the same pair of Stella McCartney Pre-Fall 14 polka dot jeans (in stores in May). Normally, we wouldn't dwell on the twinning moment, but we couldn't help but delight in each model's drastically different, yet equally cool, styling. Click through to see how each model made the look her own, and shop our picks to steal the spotted style for yourself.
Photo:A Love Is Blind
Who said polka dots can't be tough? It's all about the styling, as evidenced by Windsor's choice to pair the jeans with biker boots and a leather vest.
Image courtesy of A Love Is Blind
Photo:A Love Is Blind
Combined with a trench and loafers, the polka dot print lives up to its sweet vibe.
Image courtesy of A Love Is Blind
These have a strong similarity to the models' Stella McCartney jeans, but are available right this second.
BLANK NYC Spray On Jeans ($69)
For a retro pin-up vibe, opt for this high-waisted version.
Just Female Skinny Jean ($75)
The light wash on this pair creates a more subtle print effect.
Mango Jeans ($40)
Get a crash course in polka dots throughout history, from Twiggy to Ashley Olsen.


text:
Author Notes: This is an old family recipe. Always looked forward to the summer months when basil grew like crazy. This sauce is not cooked and served cold over hot spaghetti, don't know why but spaghetti seems to be the best pasta with this sauce. This sauce should be made at least 1 day in advance so flavors can better marry together. I recently found this sauce also makes a wonderful pizza sauce. Wonderful home cooked dish for a quick supper, served with a salad, after a hard days work or play. Please enjoy. - Roxanne DeRosa —Roxanne DeRosa
Food52 Review: Almost as easy as opening a jar of premade sauce, but much more delicious and versatile. I used a 750 ml box of Pomi crushed tomatoes and cut the rest of the ingredients to 1/3 (1 cup basil, 2 cloves garlic, 2 TB olive oil), and that seemed about right. For the garlic; I smashed 2 cloves and let them sit in the sauce overnight, then fished them out the next day -- this gave the sauce a garlic essence without overpowering it. However, raw garlic lovers could just mince up the cloves and keep them in the sauce. It certainly was nice to put everything together the night before and not heat up the kitchen. —drbabs
Serves: 4
10 can crushed tomatoes
cups packed fresh basil
7 cloves
garlic or more
cup extra vigin olive oil
salt and pepper to taste
pound spaghetti
- Use a food processor to finely chop basil or it can be done by hand. In a large bowl empty the canned tomatoes, basil, garlic, salt and pepper. Mix these ingredients together and refrigerate over night. When you're ready to use, remove from the refrigerator and add oil, stir well. In the meantime, cook the pasta al dente, drain and add the sauce. The hot pasta will warm the cold sauce. No cheese please...it's not needed. This recipe makes enough to make 2 complete dinners, or keep remaining sauce in the fridge for your pizza's.
- This recipe is a Community Pick!
- This recipe was entered in the contest for Your Best Recipe Using Fresh Basil
More Great Recipes:


text:
Nothing will be pleasant when tackling the task of shoring up the state unemployment compensation fund. Sacrifices will have to be made by the business community in the form of increased taxes into the fund, and by workers who have lost their jobs.
As compassionate Vermonters, the notion that unemployed workers may have to do with less is tough to hear, but we all must brace for the pain that comes with shared sacrifice.


text: A beloved Iowa journalist is being remembered today. Jack Shelley passed away last night at the age of 98. Shelley was there in the early days of radio and television and sent home riveting stories from WWII. We look back at the career of this pioneer broadcaster. Sounds from 1945-1953 in Guam, Belgium, Tokyo Bay and the state of Nevada. Major events related to the atomic bomb are closely linked to Shelley's news coverage. Old audio is from WHO's original recordings, on file at the Archives of Iowa Broadcasting.


text:
Document version 0.92.
This example, called VLib, is a port of the Virtual Library example distributed with Apache Tapestry. It shows a Tapestry application using JDO.
The original Virtual Library example is an ambitious example intended to show off the capabilities of Tapestry, a Web application framework. The fictitious business case for the Virtual Library application is the notion of a book club, perhaps at work, where people can borrow each other's books. The Virtual Library keeps track of what books are available, who owns them, and who has borrowed them. There are three levels of access: anonymous, logged-in, and administrative. The example looks sharp with a heavy emphasis on graphics in the presentation. Howard Lewis Ship, the architect of Tapestry, gives a two chapter tutorial of the Virtual Library example in his book Tapestry in Action , published by Manning.
As written, the VLib port runs with JPOX 1.0.2 (and later) and JPOX 1.1.0.A2 and later. As of these JPOX versions, the same VLib example works with both versions. As JPOX 1.1 evolves, it is expected that the VLib version for JPOX 1.1 will evolve to make use of some of the new features in JDO 2.0.
Developers who are familiar with or learning Tapestry will benefit the most from this example.
Tapestry is a Web application framework from Apache. It can be found at http://jakarta.apache.org/tapestry.
Web applications within Tapestry follow the model-view-controller (MVC) pattern. The view consists of HTML templates, and specifications in XML for JavaScript, as well as style sheets and graphic resources. The controller consists of Java code with page and component wiring in XML. Tapestry does not provide a model, making it an ideal partner for JDO.
Tapestry abstracts from the multi-threadedness of the Servlet API and provides tight coupling between the HTTP request and response handling code. The same components that participate in the rendering of page also accept the user's response to the page. The handshaking between HTTP responses and the Java code is handled by the framework, so that most dynamic information presented on the page and most user input to the page are represented as properties of the Tapestry page or its components. The user's next request action results in an invocation of a listener method on the page or one of its components. Every Tapestry page and component is single-threaded by design, and contrary to what you might be inclined to believe, it performs quite well because of object pooling.
The VLib example is a port (or fork) of the Virtual Library example that is distributed with Apache Tapestry.
Unlike the Virtual Library example which uses Enterprise JavaBeans to implement the model, the VLib example uses JDO.
In general, most of the presentation files are unchanged, and those that are changed, are changed very little. The controller code varies class-by-class from no change, to one or two little changes, to many small changes. The model code has been, for the most part, completely rewritten, although there is a family resemblance to the original code.
It would be useful to put the VLib example on the Web, but in the meantime, setting it up on your own machine is not hard.
This tutorial assumes that you want to start by just deploying the example and seeing it work, before you dive into the source code and Ant build.
Install Tapestry 3.0. If you are just learning Tapestry, you should get the Hangman example working. The book Tapestry in Action from Manning Publications can be quite useful.
Install JPOX 1.1.0-alpha-2 (or later). If you are new to JDO, you should work through the JPOX tutorial. The book Using and Understanding Java Data Objects from Apress can be quite useful for understanding both the details of JDO and the big picture.
With the preliminaries taken care of, let's get started
From this point on, you can just use the application. The book Tapestry in Action contains a tutorial for the user interface. There are four user accounts already defined. Suzy Queue is email@example.com . Frodo Baggins is email@example.com , Dilbert is firstname.lastname@example.com , and Grace Hopper is firstname.lastname@example.com . All of them have the password 'secret' (What can I say, they are trusting souls!)
How to build from source
If you use Ant to build, begin by examining and modifying the build.xml file where all the build properties are defined at the top. Most of the Jar files that you will need are contained in the binary distribution, so you should be able to grab the miscellaneous files there and copy into the appropriate directories in your source distribution. The build has a default target called war-file and a target called clean . Begin with the clean target. This will invoke the property verification targets that can detect some types of errors in your build configuration. Once you correct the errors and get the clean target working, you should be ready to build the War file. The War file that you build should look very similar to the War file in the binary distribution. The clean target must always be invoked manually. All of the other targets are incremental build steps.
Most of the features of JDO that the VLib example uses are required features in every JDO 1.0 compatible implementation. In one case, the VLib example uses a JDO optional feature, nontransactional-read, which is implemented by JPOX and nearly every JDO implementation.
The VLib example also uses three vendor features in the JPOX implementation. Vendor features are features that are found in the vendor's implementation of JDO but are not specified by the JDO standard. When the same feature is found in another implementation, it generally has a different interface. I'll list the vendor features and say a few words about each.
First, VLib uses JPOX's ability to automatically generate, upon first encounter, the schema for data objects. This is a feature that is ready-made for an example application that will be deployed in many different development environments. Most JDO implementations have ways to create the schema automatically, but so far as I know, there are no plans to make automatic schema generation a standard feature of JDO.
Second, the VLib example uses the toUpperCase method in JDOQL (JDO's query language). This vendor feature is implemented in many JDO implementations and will be required in JDO 2.0.
Lastly, the VLib example uses JPOX's support of SQL to obtain a count of the query results for setting up the paging of search results. In an example program with a small test data set, it is obviously not necessary to spend much time worrying about how to obtain the count of query results, but I used this vendor feature for several reasons. One, the business logic to page results was already present in the original Virtual Library example. Two, paging results is a problem for many real-world applications. Three, many O/R mapping implementation of JDO support SQL queries. Finally, support for aggregates is part of the JDO 2.0.
In short, the VLib example as written will work only with JPOX, but the work to port it to any other JDO implementation is minimal. As this example evolves to use JDO 2.0, its dependency on JPOX will diminish.
The VLib example demonstrates a Tapestry Web application using JDO as its model. In this sense, the example is a proof-of-concept. The integration of Tapestry and JDO can be done!
The example has other important goals as well. Since working example code is often used as a template for real-world applications, the VLib example strives to avoid bad code. There is no reason for you to learn bad lessons from an example. It also attempts to show good architectural design. In other words, not only does the example work, but it works in a good way. No doubt there are bugs in this code, and the bugs may go deeper than some code not working. If you spot bad code or bad design, speak up, and help improve this example.
'Design patterns' is too strong a term for the designs decisions discussed here, since not all of these design decisions have been applied in multiple applications, and the classic exposition of a design pattern has not been adopted. Nevertheless, this example contains several design insights that are worth understanding. If you understand them, you can choose whether to apply them to the applications that you write.
Use one persistence manager per HTTP request
The first thing to understand when building a Web application using JDO, is to select and stick with the one-pm-per-request design pattern. This pattern was first described in the book Using and Understanding Java Data Objects . It is a simple concept, and it works without subtle errors.
The reason to obtain one persistence manager at the start of each request is the need to release the persistence manager at the end of the request. Persistence managers can consume limited resources which must be shared with other request handling threads. As a rule, they do not serialize, and therefore cannot be stored in the session.
The one-PM-per-request design pattern imposes real constraints on your application's design. We will encounter them at every turn throughout the rest of this discussion. The alternatives, however, can cause worse problems in the form of extra coding, increased complexity, the potential for subtle errors, and a failure to deliver the expected benefits. For further discussion of the alternatives, see Chapter 10, 'Using JDO in a Web Application' in Using and Understanding Java Data Objects.
In the one-pm-per-request design pattern, there is a static factory that produces persistence manager objects. In this example, the PMLocator class (contained within the VLibDataService source file) provides the factory by delegating to JDO's PersistenceManagerFactory class. Each time a request is serviced, a VLibDataService object is constructed, and during its initialization, it uses the locator to get a persistence manager. The important point is that the persistence manager factory is constructed only once for each Web container, but the persistence managers are obtained on each HTTP request. JDO is constructed to put most of the time into the construction of a persistence manager factory. The JDO implementation may use connection pooling, object pooling, and in some cases, data pooling, to reduce the computational burden of constantly getting and releasing persistence managers and the persistent objects they manage.
In the VLib example, the VirtualLibraryEngine class acts as the factory to produce the current request's VLibDataService . The VirtualLibraryEngine closes the VLibDataService (which thereby releases the persistence manager) in its cleanupAfterRequest method, which the Tapestry framework calls after every request. The VLib examples shows a clean and simple implementation of the one-pm-per-request pattern.
Encapsulate JDO transactions within the life-cycle of the service
This is really just a corollary of the pattern above. Since JDO 1.0 transactions do not outlive the persistence manager, if you close the persistence manager you must also end the transaction. In JDO 2.0, extended optimistic transactions will be supported. For further discussion of extended optimistic transactions, see the section 'Add extended optimistic transactional semantics' towards the end of this tutorial.
Divide the model into service and data classes
One the one hand, data objects are plain-old-Java-objects (POJOs), and their classes can be simple JavaBeans. Data classes are identified in the JDO metadata. JDO fetches and stores the state of the managed objects of data classes without the need for your code to implement the magic. On the other hand, your code will need to invoke explicit JDO services to control transactions, to define and run queries, to iterate query results, to create new persistent objects, todelete existing persistent objects, and to create value objects.
Therefore, think of your model as a set of data classes wrapped by a service. What goes into and comes out of the service are value objects (more on this point in the next section). The service itself uses managed data objects. The following diagram illustrates the point.
In the VLib example, the data classes are Book , Person , and Publisher , and the application's service is the VLibDataService .
Use value objects in the controller and presentation code
JDO's management of persistent objects has its good points and its bad points. On the good side, a data object looks like a POJO. They are simple to design, and easy to code and understand. JDO handles all of the code required to shuffle state between the object and the database. On the bad side, JDO's management of the object can be a hindrance in some cases.
For example, JDO's management is a hindrance when changes to persistent objects need to be recorded in memory without having an active JDO transaction. JDO will not allow a managed object to be changed unless a transaction is active. (Surprisingly, JDO's nontransactional-write feature is not the solution it appears to be).
JDO's management is also a hindrance when the persistence manager is to be released, but the data object is still needed for later use. The persistent objects are no longer valid once the persistent manager has been released (in other words, its close method has been called). At the same time, it is natural in most Web applications to store some data objects in the session between requests. The Web container may serialize these objects between requests, and the persistence manager is not around to manage them.
So it would appear that Web applications need data objects when they are not available. How is this problem solved? The answer is to create value objects which contain all of the information required for non-managed operations and for later updating of the corresponding managed object. Some people believe that separate classes should define the value objects, but in the classic words of Abe White, the architect of Kodo, 'data objects can be their own value objects.' By using the data classes to define both managed data objects and unmanaged value objects, both the code and its maintenance are simplified.
The entire process of creating a value object, modifying it, and later updating a managed data object with it is called 'detachment-attachment.' By creating value objects, the controller code can store and modify unmanaged data objects and sends them to the service to update managed data objects. JDO 2.0 will provide the detachment-attachment mechanism. In JDO 1.0, application code must do it. For the simple cases, it is not hard.
In the VLib example, the DataObjectService and the VLibDataService collaborate to insure that only value objects enter and leave the public methods of the VLibDataService .
For a simple example like VLib, the case can be made for using value objects only where needed and using managed data objects everywhere else. This would reduce the amount of garbage generated by servicing a request. Most real world Web applications are not simple. When confronting the inevitable complexity of real-world requirements, grand organizing principles that keep the architecture, design, coding, and debugging simple are generally worth more than a minor improvement in performance.
Encapsulate mutations of relationships in the service
Data classes like all Java classes define state and behavior. All of the state is defined in the member fields of the Java class. Some of this state is inherent to the data class. State stored in primitive fields and state stored in some system classes, such as Integer , Date and String , is the inherent state. It is inherent because the state applies directly to the object. Other state defines the relationships between data objects. A Person may relate to a Book which the person has borrowed. An Invoice may contain LineItems .
The attachment code to handled modified relationships is more complicated than the attachment code to handle modified inherent attributes. Since in JDO 1.0 the application's code must perform the attachment, it is convenient to delegate to the data service all operations that modify the relationships between data objects. The support for attachment in JDO 2.0 will give us a reason to reevaluate this argument.
When writing a Web application, there is another reason to encapsulate mutations of relationships in the service. Often the relationships between data objects are managed by the user through the user interface. In HTML, the objects being referred to by various controls can be uniquely identified by the identity string of the persistent object. When the user borrows a book, the natural thing to expect from the HTML control is the identity string of the new owner. Since the controller code does not know which person goes with the identity string, it is natural to delegate the task to the data service. This reason will remain even with the advent of JDO 2.0.
In the VLibDataService , there are several methods that modify the relationships between data objects, such as borrowBook , returnBook , and transferBooks . Each of these service methods look up persistent Book objects and persistent Person objects and call the book's setHolder and setOwner methods.
Define an interface for your value object's operations.
It is often the case that a value object should not change some state that a managed object can and must change. In the discussion above, the setHolder and setOwner methods of the Book class are not operations for value objects. Combine this with the question of what is the best value object implementation, and you have the perfect prescription for an interface. By making all of your controller and presentation code use an interface to the value objects, you create the means to control what operations the controller and presentation code perform and what implementation will perform it.
In the case of VLib example, the Book , Person , and Publisher data classes each have one of the value interfaces, IBook , IPerson , and IPublisher .
Encapsulate transactions within the service when possible
JDO does not, nor should it, encapsulate transactions. Where transactions are bounded and which code controls the boundaries is a design decision that varies from application to application. In the case of Web applications, since the life-time of the service and the persistence manager it uses is congruent with the processing of the HTTP request (always assuming that you have adopted the one-pm-per-request design pattern), transactions that JDO 1.0 can enforce must be short lived.
Since the transaction is already confined to the duration of the HTTP request processing, it makes sense to go further and confine it to the duration of a data service method call. While not necessary, this confinement simplifies the controller's code. If you find as I do that the most precious development resource is developer time, it pays to adopt the KISS solution as the first solution.
In the case of the VLib application, all JDO transactions live within the confines of a VLibDataService method call.
Add extended optimistic transactional semantics
Concurrent access to the same data is a real problem in database Web applications. In the VLib example, two people can be viewing the same book, and independently decide to borrow it. Without concurrency control, the last borrower wins. Since the view and the request to borrow it are two separate HTTP requests, JDO transactions do not apply (always assuming that you are using the one-pm-per-request design pattern.).
What is required can be called 'extended optimistic transactions' (which I suppose we could shorten to EOTS or 'e-oughts'). With EOTS, the code executing user A's request to borrow the book detects that the book has been changed since the book has been viewed. It is possible for the application to implement EOTS using JDO 1.0. There is an example of an EOTS implementation in the book Using and Understanding Java Data Objects.
The VLib example does not implement extended optimistic transactional semantics for two reasons. One, this was and remains a problem in the original Virtual Library example. Two, JDO 2.0 will provide EOTS for detached objects and it will also provide the tools to write a trivial implementation of EOTS even when the detached objects are discarded.
So this defect remains in the VLib example and is expected to be corrected with the evolution of the example as JDO 2.0 becomes available.