text:
There are two aspects to this paper: first, it appears to be a solid attempt at inferring the age of mtDNA haplogroup L3. This haplogroup contains several subclades, including M and N, the two macrohaplogroups of the vast majority of Eurasians.
I am usually skeptical of very tight age estimates, but there appear to be no obvious flaws in the paper, and alternative mutation rates are used to derive the 70ka bound. Moreover, the 70ka age is consistent with what appears to be no longer in doubt, namely the arrival of fully anatomically and behaviorally modern humans all over the Old World, starting from the 50-40ka period.
Although the tree is highly starlike at shallower time depths, suggesting numerous episodes of rapid growth in the human population in the more recent past, it is only at a third of the time depth of the entire tree with the emergence of the L3 haplogroup that the first multifurcating them all the ancient diversity observed outside Africa) (Behar et al. 2008; Torroni et al. 2006; Watson et al. 1997).
- East African L3 subclades are found in Arabia, where one finds a rich assortment of basal N subclades, as well as a not insignificant amount of M. These are often dismissed as the result of recent introgression, but they could in fact, and in part, be remnants of an older population, perhaps associated with the Persian Gulf Oasis hypothesis, and certainly absorbed by J1-bearing Arabian ancestors from further north.
- The Y-chromosome phylogeny has no clear signal of Out-of-Africa ~70ka. On the contrary, Eurasia possesses DE*, D and E haplogroups, as well as CF, the major human lineage, with C being totally Asian. While Africa possesses the oldest Y-chromosome lineages (basal to CT), the evidence tilts towards Asia being the homeland of CT, which has the closest parallels to a post-70ka event.
- Finally, Africa, including East Africa, shows, at present no sign for the presence of fully modern humans at the crucial time period. We do have, of course, Omo ~195ka, crucial anatomically modern humans in Ethiopia, but no clear sign of a bubbling volcano of a population c.70ka ready to errupt onto the Eurasian landmass.
There is an intriguing possible rider to this conclusion. North Africa has been entirely depopulated and repopulated, at least with respect to mtDNA variation (Pereira et al. 2010), since the time of the Aterian industry, where modern symbolic behavior is attested very early, similar to Southern Africa, and in contrast to Eastern Africa (Barton et al. 2009). We might therefore contemplate a possible North Africa ancestry for L3, with its rapid radiation corresponding to an early range expansion into Eastern Africa. However, any potential dispersal between the Mediterranean and the Horn of Africa around the time of the MIS4/3 transition would face severe environmental difficulties, unlike the "green Sahara" conditions of MIS5 and the early Holocene (Drake et al. 2010). We therefore conclude that an indigenous origin for L3 in Eastern Africa remains by far the most likely scenario.As Mellars (2006) has argued, the early evidence for symbolically mediated behavior in both North and Southern Africa rules out any simple direct link for the expansion of L3 to (Ambrose 1998; Watson et al. 1997). Evidence of engraved ochre now extends back to at least 100 ka (Henshilwood et al. 2009), Nassarius marine shell beads were evidently present across the range of early modern humans from Southern Africa to North Africa and the Levant before 80 ka – possibly tens of thousands of years earlier (Barton et al. 2009; Bouzouggar et al. 2007; d'Errico et al. 2009; Mellars 2006; Vanhaeren et al. 2006) – and evidence for burial ritual is found in early modern humans in the Levant dating to 90–110 ka (Mellars 2006; Shea 2008). Thus, as suggested by Basell (2008) the demographic expansionsthat led to the first successful dispersal out of Africa seem better explained by the play of palaeoenvironmental forces than by recourse to the advantages of "modernity".
Mol Biol Evol (2011) doi: 10.1093/molbev/msr245
The expansion of mtDNA haplogroup L3 within and out of Africa
Pedro Soares et al.
Although fossil remains show that anatomically modern humans dispersed out of Africa into the Near East ∼100–130 ka, genetic evidence from extant populations has suggested that non-Africans descend primarily from a single successful later migration. Within the human mtDNA tree, haplogroup L3 encompasses not only many sub-Saharan Africans but also all ancient non-African lineages, and its age therefore provides an upper bound for the dispersal out of Africa. An analysis of 369 complete African L3 sequences places this maximum at ∼70 ka, virtually ruling out a successful exit before 74 ka, the date of the Toba volcanic super-eruption in Sumatra. The similarity of the age of L3 to its two non-African daughter haplogroups, M and N, suggests that the same process was likely responsible for both the L3 expansion in Eastern Africa and the dispersal of a small group of modern humans out of Africa to settle the rest of the world. The timing of the expansion of L3 suggests a link to improved climatic conditions after ∼70 ka in Eastern and Central Africa, rather than to symbolically mediated behavior, which evidently arose considerably earlier. The L3 mtDNA pool within Africa suggests a migration from Eastern Africa to Central Africa ∼60–35 ka, and major migrations in the immediate postglacial, again linked to climate. The largest population size increase seen in the L3 data is 3–4 ka in Central Africa, corresponding to Bantu expansions, leading diverse L3 lineages to spread into Eastern and Southern Africa in the last 3–2 ka.


text:
Learning German at VHS Remscheid
In our German language courses you learn together with students of different nationalities and cultural background. Our integration courses are approved by the Federal Office for Migration and Refugees.
Course Structure
Registration Support & Information
A prior consultation is needed before registering to help you find the suitable level/ course.
Please make an appointment with:
For further information, please contact:
Martina Pansold
Stellvertretende VHS-Leiterin
Bereichsleitung Integrationskurse / Deutsch als Fremdsprache (B2/C1)
02191 16-2792
Do you want to continue learning German at home? Please try the online learning platform www.ich-will-deutsch-lernen.de
Follow this link to the homepage of the Federal Office for Migration and Refugees for more information on integration courses.

subset: commoncrawl


text:
Dear BitMart Users,
We will list SnapCoin Token (SNPC) on our digital asset platform on December 31, 2018. The following trading pairs are available: SNPC/BTC, SNPC/ETH. Please note the available dates for different functions below:
- Deposit feature: 2018/12/31 7:00 AM (EST)
- Trading feature: 2018/12/31 7:00 AM (EST)
- Withdrawal feature: 2019/01/03 7:00 AM (EST)
We are making this decision according to BitMart Listing Criteria and the local rules and regulations in areas where we operate. We have been strictly enforcing our listing criteria to make sure that the projects we introduce to all BitMart users are secure, compliant, and innovative. We are persuaded that SNPC meets these criteria of BitMart. We also took tremendous time and effort to develop our own compliance review system to make sure that our listings of certain tokens/coins do not run afoul of local laws. Our compliance team prudently reviewed all the materials we were provided on a case-by-case basis and reported that SNPC is structured and promoted as "Utility Token", and therefore, should be not categorized as "Security". We finally decided that listing SNPC is in compliance with local rules and regulations in areas where we operate.
Meanwhile, any inquiries, concerns, and questions with regard to our listing decision, either from authorities, social organizations, or individual users, are sincerely welcome, and we will revisit our listing process on a fully-informed basis. You may submit the inquiry or email firstname.lastname@example.com and we will get back to you promptly.
ATTENTION: This announcement is only intended to be a legal disclosure to BitMart users. This is not an investment advice, or an endorsement by BitMart as to the intrinsic value of a digital asset, or a commitment by BitMart team to support any specific asset/token that the announcement pertains to.
BitMart Team
December 28, 2018


text:
Yeah, so?
Okay, maybe not everybody around here is quite as excited as I am that Farmgirl Fare won a Food Blog Award in the Best Food Blog--Rural category. Though I suppose if I had to spend a minimum of eight hours a day eating just to stay alive (I wish), I probably wouldn't have much time for awards either. But I don't, so I do have time to send a hearty congratulations to all of the Food Blog Award winners and finalists, especially my far-flung and well deserving 'competitors' in the Rural category: Field To Feast (Zimbabwe), Lucullian Delights (Italy), Gluten Free Goddess (New Mexico), and last but not least, my pal Tana at the very wonderful I Heart Farms (California).
Many, many thanks to everyone who voted for Farmgirl Fare.
A year of Daily Photos ago: Fungus & Vine Intertwined
Welcome new visitors!
Click here for a brief introduction to this site.


text:
The farmers market was flooded with fresh local strawberries this weekend and I picked up a bunch of them. I just couldn't pass up on making a decadent strawberry breakfast and I thought that strawberry crepes would be great. Cheesecake had been on my mind and I was thinking that using a cheesecake like filling would be a great idea. For the cheesecake like filling I folded cream cheese into whipped cream. I still had some of the strawberry jam that I made last year and I decided to add some of that for even more strawberry flavour. The strawberry cheesecake crepes were really good. They were nice and fresh and cool and sweet and full of strawberry flavour. I enjoyed the taste and texture of the cream cheese and whipped cream filling. The crepes were a perfect Sunday breakfast.
Strawberry Cheesecake Crepes
- 1 (4 ounce) package cream cheese (softened)
- 1/4 cup icing sugar
- 1 tablespoon lemon juice
- 1 teaspoon lemon zest
- 1/2 teaspoon vanilla extract
- 1/2 cup heavy cream
- 1 batch crepes
- 4 tablespoons strawberry jam
- 2 cups strawberries (sliced)
- Mix the cream cheese, icing sugar, lemon juice, lemon zest and vanilla in a bowl.
- Whip the heavy cream and fold it into the cream cheese mixture.
- Spread 1 table spoon strawberry jam onto a crepe.
- Add 1/4 cup of the cream cheese mixture and some strawberries in the crepe, roll and serve.
Strawberry Cheesecakeadillas
Strawberry and Mascarpone Crepes with Strawberry Syrup
Strawberry Cheesecake Ice Cream
Strawberry and Nutella Crepes
Strawberry Shortcake
Strawberry Pavlova
Lemon New York Style Cheesecake with Gingersnap Crust
Japanese Souffle Cheesecake
Strawberries and Cream Cheesecake with Pretzel Crust
Dark Chocolate Cheesecake
Blueberry Swirl Lemon Cheesecake
Peppermint Chocolate Cheesecake
Chocolate and Peanut Butter Cheesecake


text:
Authorities say they have arrested a Dutch national in Spain in connection with a March cyberattack widely described as the largest in Internet history.
According to The Associated Press, Dutch prosecutors say the 35-year-old suspect, who is identified only by his initials, S.K., was taken into custody on Thursday.
In a statement released Friday, they say S.K. is believed to have carried out "unprecedentedly serious attacks on the non-profit organization Spamhaus."
The Netherlands National Prosecution Office said the suspect was arrested at his home in Barcelona and that authorities had also seized computers and mobile phones, the AP reports.
The suspect was being held on a European arrest warrant and was expected to be extradited to the Netherlands, according to the AP report.
The attack on Spamhaus, an anti-spam group, occurred in March and allegedly came from someone using Cyberbunker, a Dutch company that hosts many spammers.
At the time, Kaspersky Labs, a leading cybersecurity research group, called it "one of the largest [Distributed Denial of Service] operations to date" involving 300 gigabits of data per second directed at Spamhaus.
But as we reported in March, while the attack was indeed a large one and did slow down the Internet in parts of Europe, it barely registered with most Web users.
Copyright 2021 NPR. To see more, visit https://www.npr.org.


text:
SIGN, contracts, evidence. A token of anything; a note or token given without words.
2. Contracts are express or implied. The express are manifested viva voce, or by writing; the implied are shown by silence, by acts, or by signs.
3. Among all nations find and at all times, certain signs have been considered as proof of assent or dissent; for example, the nodding of the head, and the shaking of hands; 2 Bl. Com. 448; 6 Toull. D. 33; Heinnec., Antiq. lib. 3, t. 23, n. 19; silence and inaction, facts and signs are sometimes very strong evidence of cool reflection, when following a question. I ask you to lend me one hundred dollars, without saying a word you put your hand in your pocket, and deliver me the money. I go into a hotel and I ask the landlord if he can accommodate me and take care of my trunk; without speaking he takes it out of my hands and sends it into his chamber. By this act he doubtless becomes responsible to me as a bailee. At the expiration of a lease, the tenant remains in possession, without any objection from the landlord; this may be fairly interpreted as a sign of a consent that the lease shall be renewed. 13 Serg. & Rawle, 60.
4, The learned author of the Decline and Fall of the Roman Empire, in his 44th chapter, remarks, "Among savage nations, the want of letters is imperfectly supplied by the use of visible signs, which awaken attention, and perpetuate the remembrance of any public or private transaction. The jurisprudence of the first Romans exhibited the scenes of a pantomime; the words were adapted to the gestures, and the slightest error or neglect in the forms of proceeding was sufficient to annul the substance of the fairest claim. The communion of the marriage-life was denoted by the necessary elements of fire and water: and the divorced wife resigned, the bunch of keys, by the delivery of which she had been invested with the government of the family. The manumission of a son, or a slave, was performed by turning him round with a gentle blow on the cheek: a work was prohibited by the casting of a stone; prescription was interrupted by the breaking of a branch; the clenched fist was the symbol of a pledge or deposits; the right hand was the gift of faith and confidence. The indenture of covenants was a broken straw; weights and, scales were introduced into every payment, and the heir who accepted a testament, was sometimes obliged to snap his fingers, to cast away his garments, and to leap and dance with real or affected transport. If a citizen pursued any stolen goods into a neighbor's house, he concealed his nakedness with a linen towel, and hid his. face with a mask or basin, lest he should encounter the eyes of a virgin or a matron. In a civil action, the plaintiff touched the ear of his witness seized his reluctant adversary by the neck and implored, in solemn lamentation, the aid of his fellow-citizens. The two competitors grasped each other's hand, as if they stood prepared for combat before the tribunal of the praetor: he commanded them to produce the object of the dispute; they went, they returned with measured steps, and a clod of earth was cast at his feet to represent the field for which they contended. This occult science of the words and actions of law, was the inheritance of the pontiffs and patricians. Like the Chaldean astrologers, they announced to their clients the days of business and repose; these important trifles wore interwoven with the religion of Numa; and, after the publication of the Twelve Tables, the Roman people were still enslaved by the ignorance of judicial proceedings. The treachery of some plebeian officers at length revealed the profitable mystery: in a more enlightened age, the legal actions were derided and observed; and the same antiquity which sanctified the practice, obliterated the use and meaning, of this primitive language."
SIGN, measures. In angular measures, a sign is equal to thirty degrees. Vide Measure.
SIGN, mer. law. A board, tin or other substance, on which is painted the name and business of a merchant or tradesman.
2. Every man has a right to adopt such a sign as he may please to select, but he has no right to use another's name, without his consent. See Dall. Dict. mot Propriete Industrielle, and the article Trade marks.


text:
This is MORNING EDITION from NPR News. I'm Renee Montagne.
And I'm Steve Inskeep. BP faces trial next week in a civil lawsuit to fix blame for the worst environmental disaster in U.S. history. It's the 2010 explosion of the Deepwater Horizon in the Gulf of Mexico.
MONTAGNE: Eleven rig workers were killed and nearly five million barrels of oil spilled. Some of the oil drifted onto beaches and wetlands from Florida to Texas.
INSKEEP: And now tens of billions of dollars in civil penalties are at stake. NPR's Debbie Elliott reports.
DEBBIE ELLIOTT, BYLINE: The three main issues before a New Orleans federal judge are whether BP was grossly negligent, how much oil polluted the Gulf, and what kind of environmental harm it caused. Many observers anticipated a settlement, but as trial draws near, all sides appear to be digging in for a court battle. Alabama Attorney General Luther Strange is coordinating counsel for the five Gulf states.
LUTHER STRANGE: We think BP was grossly negligent and we are prepared to prove that starting on the 25th.
ELLIOTT: Yesterday, BP general counsel Rupert Bondy acknowledged the company was looking to make a deal, but said in his statement that, quote, "faced with demands that are excessive and not based on reality, we are going to trial." That's something BP CEO Bob Dudley prepped investors for in a conference call.
BOB DUDLEY: Throughout we have been preparing for the trial scheduled for later this month and we will be ready to thoroughly and factually present our case in court.
ELLIOTT: BP says the disaster was a tragic accident resulting from multiple causes and involving multiple companies. Some, including rig owner Transocean, have settled both criminal and civil charges. BP has admitted its role in the accident and reached a record $4.5 billion dollar criminal deal with the Justice Department.
Sources close to the ongoing civil talks say states are the holdup, in part because of the enormous amount of money involved. It's complicated. First, there are clean water act penalties - the bulk of which will go back to the Gulf states.
The range is about five billion up to $20 billion, depending on whether the judge finds that BP was grossly negligent. That's why you'll hear lawyers like Alabama Deputy Attorney General Corey Maze argue that BP could have prevented the deadly well blowout.
COREY MAZE: What we're going to prove is a corporate culture of just callousness. Every decision you're going to see that BP made or didn't make was because it saved them time and money.
ELLIOTT: BP says it will vigorously defend the allegations and will also dispute the government on how much oil spilled. Clean water act penalties are calculated per barrel.
DAVID UHLMAN: If this case goes to trial, it is a high stakes gamble for everyone involved.
ELLIOTT: University of Michigan law professor David Uhlman is a former chief of the Justice Department's environmental crime section. He says the bigger sticking point is what BP should pay for natural resource damages - for instance, fisheries harmed or wetlands destroyed.
UHLMAN: And that's a real wild card in the Gulf because no one really knows how much damage was done by the Gulf oil spill.
ELLIOTT: Environmentalists don't want to see the Gulf shortchanged.
UNIDENTIFIED MAN: All right, let's go.
ELLIOTT: Last week in Washington, a coalition of groups delivered boxes of petitions to Attorney General Eric Holder. Sara Gonzales-Rothi is with the National Wildlife Federation.
SARA GONZALES-ROTHI: They say make BP pay, hold BP fully accountable.
ELLIOTT: It's been nearly three years since the oil spill, but the disaster is far from over. Off the Alabama coast, for example, submerged tar mats continue to wash up during rough surf. And Louisiana still has over 200 miles of oiled shoreline.
Contending with that, and an uncertain future, is what's holding Louisiana back from making a deal, says Garret Graves, the top coastal adviser to Governor Bobby Jindal.
GARRET GRAVES: If we pivot to a settlement type scenario, it would be a settlement that we can stand before the citizens of the Gulf of Mexico and explain to them, defend to them, and ensure that the long term interests of the Gulf are fully addressed. Not just this generation but for generations to come.
ELLIOTT: Generations that could still be contending with BP's oil long after the complicated litigation has been resolved. Debbie Elliott, NPR News, Orange Beach, Alabama. Transcript provided by NPR, Copyright NPR.


text:
We were unable to find the requested page. This could be caused by browser settings that disable the use of cookies, or by attempting to enter the site directly (such as with a bookmark), without using an authorized gateway page. Please check your browser settings to confirm that cookies are enabled, and make sure you access this page through a link. If you continue to have problems, you should contact the site administrator. |
Referring url:
site Derivation: atlantichealthssl.adam.com
ssl login: ATLA199


text: Article / 20 April 2013 FBI interviewed Boston bombing suspect in 2011 By Mark Hosenball and Warren Strobel FacebookXEmailLinkedInWhatsApp The tip, by a foreign government also said he was preparing to leave the United States to join underground organisations. The FBI said its interview two years ago of Tsarnaev and his family, along with checks of travel records, Internet activity and personal associations, "did not find any terrorism activity" at the time. But the revelation is the first evidence that the Tsarnaev family came to US security officials' attention after they emigrated to the United States about a decade ago, and it could raise questions about whether the government missed potential warning signs about the behavior of two brothers. Tamerlan Tsarnaev, 26, died overnight in Boston in a shootout with police. His younger brother, Dzhokhar, 19, was taken into custody on Friday evening in the Boston suburb of Watertown after a dramatic, day-long manhunt, Boston police said. The FBI statement did not disclose which foreign government asked it for information about the brothers and their family. But Tamerlan was widely reported to have made a trip to Russia last year. The brothers and their family were ethnic Chechens, whose small republic's attempts at independence following the collapse of the Soviet Union were brutally crushed by Moscow. Both brothers, however, were born in the Central Asian state of Kyrgyzstan, the FBI statement said, and Dzhokhar was a naturalised US citizen. Uncomfortable questions The revelation that the elder Tsarnaev was on US law enforcement authorities' radar screens seemed likely to raise uncomfortable questions for the Obama administration about whether it could have done anything to detect and stop the plot. "It's new information to me and it's very disturbing that he's on the FBI radar screen," Rep. Michael McCaul, Texas Republican and chairperson of the House Homeland Security Committee, said on CNN late Friday. It is not known when the Boston Marathon bombings were planned, or whether there were clues that could have allowed authorities to pre-empt it. National security and law enforcement authorities said on earlier Friday that they had not turned up any evidence that the Tsarnaevs had contacts with al Qaeda or other militants overseas. Rep. Peter King, New York Republican and member of the House intelligence committee, said in a statement that there "was no federal intelligence or chatter prior to the marathon bombings," a reference to militant communications often picked up in advance of an impending attack. The US officials said they were leaning toward the theory that the bombings were motivated by Islamic extremism, although that remained unproven. Were the Tsarnaevs working with others? Violent plots involving a single individual or small groups who self-radicalise and have minimal dealings with other militants can be extremely difficult to detect in advance, according to US counterterrorism officials and private experts. The revelation about the FBI contacts with the elder Tsarnaev came as US officials told Reuters that investigators are scouring government data banks to determine if spy and police agencies missed potential clues that might have alerted them to the two brothers. Another top priority for investigators is to determine whether the brothers had any confederates either inside the United States or overseas, one US official said. This official and others spoke on condition of anonymity to discuss an ongoing investigation. Three people were taken into custody for questioning in New Bedford, Massachusetts, police said on Friday. Two men and a woman are being questioned by the FBI "on the assumption there is an affiliation with" Dzhokhar Tsarnaev, Lieutenant Robert Richard of the New Bedford Police said. One official said the possibility that the US government had information that should have raised questions about the Tsarnaev brothers before the attack could not be ruled out. Other officials said they were unaware that such material had turned up. In several recent cases, US intelligence and law enforcement agencies failed to put together clues that, in hindsight, might have led them to pre-empt a plot. Intelligence failure In 2009, US Army Maj. Nidal Hassan killed 13 people and wounded another 32 at Fort Hood, Texas. Prior to the shooting spree, Hassan had email contacts with Anwar al-Awlaki, the US-born cleric and leader of al Qaida's affiliate in Yemen who was later killed in a US drone strike. US authorities had investigated Hassan's emails, but concluded they posed no threat of violence. The father of Umar Farouk Abdulmutallab, the so-called "underwear bomber" who tried to bring down a US jetliner over Detroit on Christmas Day 2009, reported suspicions about his son's activities to the US Embassy in Nigeria. But Abdulmutallab's US visa was never revoked. A report by the Senate intelligence committee heavily criticised US intelligence agencies for failing to act on available information in that case. But Brian Jenkins, a respected terrorism expert at the RAND Corp., dismissed the idea that the Boston bombings represented an intelligence failure. People will inevitably ask, "did we miss something in intelligence?" said Jenkins, speaking before the news of the 2011 FBI interview with Tamerlan Tsarnaev become public. "Some people will label it an 'intelligence failure.' But that's because people have come to expect 100 percent security," he said. – Reuters (Additional reporting by Patrick Temple-West) Tags: Boston Bombings, Tamerlan Tsarnaev


text:
As the Android platform works its way alphabetically through the dessert trolley, we are treated to new features and improvements, but software is never straightforward and issues always pop up. Google released version 4.1 of Android, codenamed 'Jelly Bean,' on July 9 2012. It was followed by version 4.2 on November 13, version 4.2.1 on November 27, and version 4.2.2 on February 11 this year. The last couple of releases included a batch of bug fixes.
The initial leap from 'Ice Cream Sandwich' (Android 4.0) to Jelly Bean delivered a much smoother experience, and the following 4.2 release brought us a range of small, but useful features. However, though it may be improved, many users have encountered problems with Android Jelly Bean.
Below are some common bugs and issues with Jelly Bean and try to suggest either workarounds or, where possible, genuine solutions.
Problem: Wi-Fi dropping or not connecting
We've seen this problem reported widely on a number of Android devices. The common thread for some people seems to be the update to Jelly Bean, but different version updates have impacted on different devices. There are a lot of potential reasons that Wi-Fi issues can occur and it might be due to your specific router or the settings on it. If you find that your device is unable to connect to a Wi-Fi network, or keeps dropping the Wi-Fi connection, there are things you can try.
Possible solutions
- Try turning the router and the Wi-Fi on your device off. Tell your device to forget the details of your Wi-Fi network. Hold down the power button and restart it, or shut it down completely and then turn it back on again. Turn the router back on again. Turn Wi-Fi on your device on again and enter the details afresh.
- Try going to Settings > Wi-Fi > Menu > Advanced on your device and make sure that "Keep Wi-Fi on during sleep" says Always. You can also try unchecking the box next to Avoid poor connections.
Problem: Random rebooting or freezing
If you find your phone keeps freezing or crashing and rebooting itself after a Jelly Bean update then it could be caused by an incompatible app. The problem is that your software has been updated, but the app hasn't. It could also have been caused by a bug in Jelly Bean – Google released 4.2.2 and it was supposed to fix a number of bugs including the random reboot issue. If you're still having problems there are a few things worth trying.
Possible solutions
- Your first port of call is always just to hold down the power button and turn your device off completely and then wait a moment and turn it on again.
- Check which apps are running in Settings > Application manager on the Running tab. Remove them one at a time and wait to see if the rebooting or freezing problem occurs until you find the app responsible. This solution can be annoyingly time-consuming.
- Do a factory reset by going to Settings > Backup & reset > Factory reset. Enter your pattern, password, or PIN when prompted, then choose Erase everything. Keep in mind, this will actually erase all content on your phone and re-install a fresh version of Android. Backup anything important.
Problem: Poor battery life
Complaints about poor battery life are common for smartphones generally, but some people have complained that their device's battery life has been noticeably worse after upgrading to Jelly Bean. This could be down to specific apps or services. If you find that your battery is draining faster than it was before, then try and reboot first. If that doesn't help, try the steps below.
Possible solutions
- Go into Settings > Battery and take a look at what is draining the power most. Some people reported an increase in battery life after switching off Google Now, or Google Wallet and NFC functionality. Perhaps you have another app running in the background that's eating more power than it should. If so, you'll find it here, and you can deal with it.
- It could be because your device is connecting to LTE or trying to. You can change this in Settings > More settings > Mobile networks and select your Network mode.
- It could be a reading fault with your microSD card. Try removing it and see if the problem persists. If it works then backup the contents to your computer and reformat the card.
Problem: Bluetooth not working
Google confirmed that version 4.2 of Android contained a Bluetooth bug that can disrupt audio streaming. If you've experienced issues with your Bluetooth functionality after upgrading to 4.2, then that's the reason.
Solution: Google released a fix in version 4.2.1. You need to upgrade to get your Bluetooth working again. This is, assuming it's possible
Problem: Missing December
A high profile gaffe saw December missed out of the People app calendar on Nexus devices in the 4.2 update.
Solution: It was restored in version 4.2.1.
Other Android Jelly Bean problems
Most of the issues that popped up after the Jelly Bean updates rolled out have been device-specific. If you haven't managed to find a fix for your particular issue then you might want to check out some of our other problem roundups. Check out Galaxy S3 problems, Nexus 4 problems, or Nexus 7 problems for more help. You can also share your Jelly Bean problem in the comments.
If you find alternative fixes for any Jelly Bean issues then please do share them. Check back again, as we'll update this roundup over time.


text:
Special Feature
Evans vs. Ortiz headlines UFC 133 this Saturday in Philadelphia. Michael DiSanto breaks it down...
Rashad Evans and Tito Ortiz will dance for the second time this Saturday night.
Forty-nine months ago, Evans and Ortiz squared off in what was a turning point for each of their careers. Evans was taking a major step up in quality of competition. The then-undefeated prospect seemed like he had all the tools to be great, but nobody knew for certain whether he could take his game to the next level. After 15 minutes in the cage with Ortiz, there was no doubt that "Suga" was the real deal.
Ortiz was in a very different place in his career back on July 7, 2007. The former champion was seven months removed from his second technical knockout loss to Chuck Liddell. A bout with Evans was a way of getting back on the championship trail—if he won, of course.
Ortiz neither won nor lost the fight. He suffered an anti-climatic draw, thanks to a point deduction from illegally grabbing the fence in an attempt to prevent a takedown. But for that deduction, the judges would have awarded Ortiz the decision. Yet, it was Evans who likely left the cage that night with the edge in confidence. He knew that he could hang with Ortiz, once he settled down and actually engaged the "Huntington Beach Bad Boy" in a fight.
More than four years later, Evans is the former champion still in his fighting prime looking to get back to the top of the mountain. A win over Ortiz likely puts him at the front of the line for the winner of the upcoming battle between two of his arch enemies, Jon Jones and Quinton Jackson.
Ortiz, by contrast, is looking to make one final title push. Keep in mind that Ortiz was in a must-win situation, if he wanted to continue competing in the UFC, heading into his UFC 132 fight last month. His submission win over Ryan Bader was the first mixed martial arts bout that Ortiz has won since defeating Ken Shamrock back in October 2006.
So, what will happen this time around? The rematch between Evans and Ortiz will be decided by one factor: takedowns.
If Ortiz is able to take down Evans with any sort of regularity, he wins the fight. If Evans is able to avoid being taken down for two of the three rounds or take down Ortiz with some regularity, he wins the fight.
It really is that simple.
How can I be so sure? Easy. Evans is much better in the standup realm. He is an expert counterstriker who has the speed and power to knock out just about anyone in the division, assuming he has the confidence to sit down and commit to his punches. In fact, I'll go so far as to argue that Evans has the fastest hands in the division, bar none.
Suga's hand speed gives him a tremendous advantage against just about anyone. Unlike most counterpunchers, Suga doesn't like to slip punches and fire back. His forte is countering before his opponent completes a strike. In other words, he fires a counter off of his opponent's tell sign, and his blazing hand speed allows him to land first in those instances.
The perfect example is when Evans fought Liddell. Evans noticed during pre-fight film study that Liddell's expression changed or his face curled up with determination milliseconds before he fired a lead power punch, so he sat back and waited for that moment to arrive. Evans fired a fully committed right hand the instant Liddell tipped his hand with his tell sign, and the punch landed right on the button, immediately ending the fight.
If Evans had the juice to knock out Liddell when he was still near the prime of his career, he certainly has the juice to stop a 36-year-old Ortiz. If the two engage in a firefight or any sort of contest that unfolds largely on the feet, then Evans winning by knockout seems like the most likely outcome. His standup skills are that much better.
Similarly, if Evans can put his fellow former champion on his back and keep him there for significant portions of the fight, he should be able to walk away with a victory. Granted, Ortiz has excellent Brazilian Jiu-Jitsu skills, including a grossly underrated offensive guard. Yet, there is very little chance that Ortiz scores a submission win over Evans. Not unless he first rocks Evans with some sort of strike, resulting in him making a rudimentary mistake.
Evans probably shouldn't worry too much about searching for a submission, if he is able to score a takedown. Fans must remember that Ortiz has not been submitted in more than a decade. The last time it happened he was so exhausted that he could hardly move— a situation that a cardio machine like Ortiz is not likely to face again. Evans won't be the one to break that streak. Not on Saturday night anyway.
Yet, if Evans can put Ortiz on his back and grind away with conservative ground and pound, he should be able to score a judges' decision, just like Couture did against Ortiz back in 2003. Again, Ortiz's ground skills are much better today than they were in 2003, but he isn't going to be the first man to score a submission victory over Evans. Not from his guard, at least.
What if Ortiz is able to turn the table and put Evans on his back?
Well, if he can keep him there, then Ortiz wins the fight. Evans has never shown a great ability to defend from his guard. This guy is a lifelong wrestler, just like Ortiz, only he competed at a much higher level than Ortiz in the amateur ranks. Thus, like with many lifelong wrestlers, Evans is like a cockroach or a large tortoise on his back—basically harmless. And Ortiz is one of the best in the business at grinding out victories from the top position, if he is fortunate enough to score a takedown.
What about Ortiz scoring a knockout on the feet?
No chance. Ortiz has shown better and better striking skills in each of his last several fights, including rocking and dropping Ryan Bader with a punch last month. I certainly acknowledge that fact. I will also acknowledge that anything can happen with those little vale tudo gloves. It's also accurate that Evans is viewed by many as being a bit "chinny." Lyoto Machida left him in a heap in their 2009 bout. Thiago Silva and Quinton Jackson both rocked him badly in the final round of their losses by judges' decision. But Ortiz doesn't have the stand up juice of Machida, Silva or Rampage.
So what about Ortiz outpointing Evans on the feet?
Again, no chance at all. Evans' hand speed and technique will be too much for Ortiz, assuming he fights with confidence. In the first round of their last bout, Evans was hesitant in pulling the trigger. Shortly after the draw, Evans turned into one of the game's elite sluggers. Of course, that came to an end when he got separated from consciousness by Machida. Since that time, Evans has shown less and less faith in his standup game. That may make him susceptible to dropping the first round. But that should be the only thing his tentativeness impacts. If Evans returns to his corner and hears that he lost the first round, he will begin to let his hands go, and that spells disaster for Ortiz.
So, how do I see the action unfolding?
This fight seems to have Evans written all over it, but that doesn't necessarily mean he will win. A perfectly healthy, well-prepared Ortiz performing at the top of his game is pretty darn difficult to defeat. The fact that Evans is coming off the longest layoff of his career is also extremely significant. Cage rust may be a very real factor in the outcome of the fight. Another question is whether he is finally in a good place about getting knocked out by Machida.
On the other side of the Octagon, Ortiz is a complete unknown at this stage in his career, despite his win over Bader. How will he perform after a month-long layoff? Will he still have the same legendary cardiovascular conditioning? Has he continued to develop his game to compete with the new breed of elite fighters?
Honestly, I don't know the answers to any of those questions, and neither does anyone else.
I could easily write another 1,500 words stating a case in favor of either man winning. That is what makes this fight so intriguing. Instead, I'll just sit back, relax and enjoy the action as it unfolds.
Quick Facts:
Rashad Evans
• 31 years old
• 5'11, 205 lbs
• 74.5-inch reach
• 20-1-1 overall (10-1-1 UFC)
• 4-1 in last 5 fights
• 8-1-1 in last 10 fights
• 3-1-1 against 5 current or former UFC champions
• Former UFC Light Heavyweight Champion
• 147-day reign as champion; no successful title defenses
• Former heavyweight winner on The Ultimate Fighter
• Current layoff of 434 days is the longest of his career
Tito Ortiz
• 36 yrs old
• 6'3, 205 lbs
• 74-inch reach
• 17-8-1 overall (15-8-1 UFC)
• 1-3-1 in last 5 fights
• 5-4-1 in last 10
• 5-7-1 against 10 current or former champions, including UFC/PRIDE tournament champions
• Former UFC Light Heavyweight Champion
• Record for longest 205-lb title reign in UFC (1,260 days)
• Record for most consecutive successful defenses of 205-lb title (5)
• Current layoff of 35 days is the second shortest layoff of his professional career; shortest in more than a decade
• 557 days is the longest layoff of his career
Power Slap


text:
Haskell in web browser
Comment 2010 August: This tutorial is interesting, but neither of the two support packages (HsWTK nor DOM.Level2) can be found on hackage, thus the code cannot be compiled.
Yhc is no longer supported
The idea of such conversion has been around for a while <insert citations>, and Yhc Javascript backend is its practical implementation. Use of functional languages for client-side Web programming is a relatively new phenomenon, and hopefully this Tutorial along with the Service online will attract more attention and subsequently programmers resources into this area.
Basics of programming for web browser
Formalized description of DOM interfaces is provided by the Web Consortium in the form of OMG IDL definitions. An example of such definitions can be found here.
It was necessary to convert these definitions to Haskell function declarations to make them available to Haskell programs for Web browser. The special utility, domconv
is part of the Javascript backend toolset. The utility is based on HaskellDirect, although most of non-IDL related functionality was stripped, and Haskell source generator was completely rewritten. In this section, we discuss the logic of IDL to Haskell conversion.
DOM interfaces vs. Haskell type classes
Web Consortium's DOM definitions are presented as a hierarchy of interfaces. For example, the Node interface is a parent to the majority of other interfaces, such as Document (direct ancestor), or HTMLElement (not a direct ancestor, but HTMLElement should inherit all properties and methods of Node).
This is achieved by defining Haskell type classes whose hierarchy repeats the hierarchy of DOM interfaces. Thus, we have the CNode and CDocument classes. For each DOM interface, also a phantom data type is defined: TNode, and TDocument correspondingly. Phantom types are assigned to concrete values (references to DOM objects) while type classes are used to constrain types of parameters of functions working with those DOM objects. The CDocument class is defined as:
class CNode a => CDocument a
data TNode
data TDocument
instance CNode TNode
instance CDocument TDocument
instance CNode TDocument
to reflect inheritance of Document from Node. Accordingly, continuing our example, for HTMLElement, we have:
class CNode a => CElement a
class CElement a => CHTMLElement a
data THTMLElement
instance CElement THTMLElement
instance CHTMLElement THTMLElement
instance CNode THTMLElement
and so on. This means that a value of THTMLElement may be passed as argument to a function expecting an instance of CNode, but not the opposite. Similarly, a value of TDocument can by no means be passed to a function expecting a THTMLElement. This increases type safety of a program which, if written in Javascript, would have lacked such safety completely (or eventually would end up throwing an exception from runtime type check).
Below is an example of such type constrained function:
hasChildNodes :: CNode this => this -> CPS c Bool
which corresponds to the hasChildNodes function defined within the Node interface. Any DOM object which is a Node can be passed to this function (by reference) as the this
Attributes vs. getters and setters
Within interfaces, DOM specification defines attributes and methods. Attributes are either read-only (such as nodeName of the Node interface) or read-write (such as nodeValue of the same interface). In Haskell bindings, getter (for read-only attributes), and both getter and setter (for read-write attributes) functions are defined in straightforward manner:
get'nodeName :: CNode this => this -> CPS c String
set'nodeValue :: CNode zz => String -> zz -> CPS c zz
get'nodeValue :: CNode this => this -> CPS c String
Getters always take the object containing an attribute as the first argument, this
, and it is always constrained to the type class corresponding to the DOM interface. Setters always take the value to be set as the first argument, and the object containing the attribute as the second argument. Setters always return reference to the same object where an attribute was set. The latter property allows to concatenate multiple setters in Continuation-passing style, such as:
........$ \he ->
(set'id "myid")
(set'lang "en")
(set'title "Hello")
This whole construction will pass the same object (he
) to the continuation, but continuation will deal with updated object.
The setters in the example above are defined in the DOM.Level2.HTMLElement module.
Methods vs. functions
Interface methods are translated to Haskell functions whose type signatures have proper type coetraints. Thus, the getElementById function defined in the Document interface as
Element getElementById(in DOMString elementId);
translates to Haskell function:
getElementById :: (CDocument this, CElement zz) => this -> String -> CPS c zz
as follows from its type, getElementById does not return a value of concrete type, but rather a type-constrained value. Values of types corresponding to DOM interfaces, translate to type-constrained rather than concrete values. This sometimes makes it necessary to supply explicit type signatures unless a function receiving the returned constrained value has a type signature that brings a constrained type down to a concrete type.
Maker functions
The IDL conversion utility domconv
auto-creates convenient functions that serve as constructors of DOM objects corresponding to HTML tags. An example of such maker function is:
mkDiv :: CHTMLDocument a => a -> CPS c THTMLDivElement
which creates a DOM node tagged with <DIV>. Such maker functions are defined for most of HTML elements. Maker functions always return values of concrete type.
Threads emulation
Javascript threads available to Haskell programs have must of "real" threads features stripped off: there are no thread identifiers, threads must always explicitly yield execution, time-wise threads scheduling is very loose, etc.
Please refer to the Control.Concurrent.JSThreads module documentation. A working threads example (including inter-thread message passing, see below) can be found here.
CPS and threads
Continuation Passing Style allows for very efficient implementation of threads: in fact, switching context between threads is merely saving a continuation of currently executing thread in some static memory object, and evaluating continuation of (resuming) a thread that was similarly suspended earlier.
Message passing between threads
Threads may pass messages to each other, using Message Boxes. Sending messages is asynchronous (although rescheduling of threads execution occurs to resume the receiving thread). Sending a message may fail if there is a message in the Message Box (no message buffering). Receiving messages is always a blocking operation. Receiving a message may fail if there is already a thread waiting on the Message Box. Therefore more than one thread may send messages to the same Message Box (but sending all messages is not guaranteed unless result of sending is checked, and appropriate action taken if sendMsg
fails), but more than one thread may not receive messages from the same Message Box.
Events handling
From Javascript standpoint, attaching an event handler to a HTML element is simply setting appropriate on- attribute with reference to appropriate function to which event information will be passed. The low-level events API available to Haskell programs provides means for a thread to wait on a HTML element for a certain event to occur. Refer to the CDOM.Level2.Events module for more information.
XML HTTP API is available to Haskell programs running in Web browser. Refer to the Network.XMLHTTP module for more information.
The JSON API provided to Haskell programs is based on the opaque type JsonNode. Operations over JSON nodes are monadic as they may fail. For example, the getValueByName function fails if the JSON node queried does not have a value with given name. Monadic interface allows to write code that retrieves values from JSON node in do
notation and compose operations using >>=
(monadic bind).
Thus, the following code:
uri = fromMaybe "----" $ do
buri <- splitURI loc
prot <- getValueByName "protocol" buri >>= getString
auth <- getValueByName "authority" buri >>= getString
anchor <- getValueByName "anchor" buri >>= getString
let uri = prot ++ "://" ++ auth ++ "/" ++ anchor
return uri
retrieves parts of an URI (see below) represented as a JSON node, and composes a new URI out of them. If the URI JSON node does not contain any of the values requested, the whole monadic sequence fails, and the fall-back value "----" will be returned.
Refer to the Data.JsonNode module for more information.
Haskell web toolkit
HsWTK is no longer actively developed or maintained.
Haskell Web Toolkit (further referred to as HsWTK) is a thin layer built on top of DOM interfaces. It provides program interfaces to compose static layout of a web application page, and to hook up visual elements of an application to event handlers and XML HTTP communication means. HsWTK hides the low-level DOM APIs where possible; however their knowledge may be necessary to develop certain types of visual components and event handlers.
Widgets are basic building blocks of Graphical User Interface (GUI).
To build a web-based GUI, HsWTK defines the following type:
type Widget = THTMLDocument -> THTMLElement -> Bool
That is, Widget is a function, or, to be a more precise, an action (as evaluation of this function does assume side effects). This action's first argument, of type THTMLDocument, refers to the HTML document containing the GUI elements. The action's second argument, of type THTMLElement, refers to a parent HTML element. This makes perfect sense from the DOM standpoint, as in order to create a visible element on a Web page, it is at least necessary to create an element by calling Document.createElement
method (which needs a Document), and next to insert the newly created element into some (parent) node by calling Node.appendChild
HTML elements as widgets
So, inside the Widget action, some work may be done to create a HTML element, and make it a child of some other Widget. This is generalized by HsWTK as Element Creation Function, and defined as
type ECRF n = (THTMLDocument -> CPS Bool n)
Now, if we refer to Maker functions defined for HTML-tagged Elements we may see some similarity:
mkDiv :: CHTMLDocument a => a -> CPS c THTMLDivElement
If we substitute n in ECRF definition with THTMLDivElement, and remember that THTMLDocument is an instance of CHTMLDocument, we get a perfect match. From this, it may be concluded that Maker functions may serve as Element creation functions.
Passive widgets
The simpliest form of Widget is passive widget. Passive widgets only display themselves as part of Web GUI, but are not capable of nesting other widgets. A good example of such passive widget is text label or non-clickable image.
HsWTK defines a function passive
which given an Element Creation Function, returns a Widget:
passive :: CNode n => ECRF n -> Widget
Thus, given a Maker function (e. g. mkImg), applying passive to it creates an image which will appear in the proper place of a Web page.
For a text element itself, there is a Maker function mkText
which produces a text node to be inserted into a < DIV > or < SPAN > or any other element with closing tag. mkText is not a pure Maker function though; due to its type signature, flip
has to be applied to it.
One important passive widget not based on a HTML element is nowidget
. It may be used as a placeholder for any passive widget, and does not produce any kind of effects.
HTML elements with closing tags contain other elements in between. To reflect this, HsWTK defines another function, container
. This function, applied to a Maker function, produces a widget capable of nesting other widgets.
Composition combinators
For the purpose of sequencing widgets within a container, or nesting widgets in containers, HsWTK defines combinators +++
, <<
, |<<
, and ++|
. Please refer to the appropriate section of the Graphics.UI.HsWTK module documentation.
The +++
combinator sequences two widgets inside a container. Widgets (a +++ b
) appear second (b) at the right of the first (a). Result of such composition is also a widget, and it may be sequenced with other widgets. (a +++ b) +++ c
is same as a +++ b +++ c
The <<
combinator nests a widget (or composition of widgets) in a container.
So, the following fragment of code creates a widget consisting of a < DIV > with a text inside:
mkTextFl = flip mkText
container mkDiv << passive (mkTextFl "Hello World")
To simplity the code, HsWTK defines these two functions:
which is equivalent topassive (flip mkText txt)
which is defined asc |<< d = container c << d
, that is the wordcontainer
may be omitted.
Document body
The toplevel widget (one that is not nested in any other widget) has to be inserted into the HTML document body. This is acieved by applying the function docBodyC
to the toplevel widget. This application often becomes the main
function of a Web application. Please note that document body is not a Widget.
Code example - Hello Web
At this point, we are able to code our first HsWTK example. By tradition, this is a Hello ... program. Paste the code below into Yhc Web Service New Entry Form and press the Submit button (don't forget to fill out the Author and Title field).
-- Begin Pasteable Code --
module TutEx1 where
import DOM.Level2.HTMLSpanElement
import Graphics.UI.HsWTK
-- The Main Function
main = docBodyC mainW
-- The Toplevel Widget
mainW = (mkSpan |<< (textP "Hello " +++ textP "Web"))
-- End Pasteable Code --
After the compilation is finished, load the generated Web page. Haskell says Hello to the new environment it just has started to explore.
The example shows all the facilities of HsWTK we recently discussed:
- widgets sequencing (
combines two text elements one after another) - creation of a HTML Element based widget (mkSpan)
- nesting composition of widgets in a container (
) - inserting the toplevel widget into the document body (docBodyC)
Decorators are not Widgets: they are tools to change properties of a widget they are applied to, at the moment of that widget creation.
Earlier we discussed setters defined for HTML Elements' writable attributes. HsWTK defines a function decorate
which when applied to a setter, produces a decorator. An example of such a decorator is withTitle
defined as shown below:
withTitle :: (CHTMLElement b) => ((a -> ((b -> (CPS c b)) -> d)) -> (String -> (a -> d)))
withTitle = decorate set'title
The set'title
function is a setter for the title attribute of HTMLElement.
Decorators are binary functions taking the Widget to decorate as the first argument, and the value used to decorate as the second. In our case, this looks like this:
... mkDiv `withTitle` "This div has a title" |<< textP "titled div"
HsWTK defines some frequently used decorators, such as withClass
to specify the class attribute of an element used in a widget, or withSrc
to use with an < IMG > element to specify image source.
Inline style
A special decorator, withStyle
, represents a more complicated case. It does not alter attributes/properties of a widget element it is used with; instead it affects inline style properties of the widget element.
While arttribute-based decorators take simple values (strings, less often numbers) to decorate widget elements, withStyle takes a list of name-value pairs. Both names and values are strings, and should conform to the Cascading Style Sheets Specification.
Property names and values are paired using the :=
data constructor. The latter is just a binary infix data constructor, and it is used just to improve the code appearance, so CSS property assignments look more natural.
Our next pasteable examples deal with widget elements' inline style manipulations. The following example displays a centered white bold text on green background spanning over 45% of browser window width floating to the right side of browser window.
-- Begin Pasteable Code --
module TutEx2 where
import DOM.Level2.HTMLDivElement
import Graphics.UI.HsWTK
main = docBodyC mainW
mainW = mkDiv `withStyle` ["display" := "inline"
,"float" := "right"
,"width" := "45%"
,"text-align" := "center"
,"background-color" := "green"
,"color" := "white"
,"font-weight" := "bold"] |<< textP "Hello Web"
-- End Pasteable Code --
Our next example is more contrived. It displays a line of text with each character colored differently, and colors are taken from an infinitely repeating sequence. Note the use of nowidget: it is used with foldr
as a "starting value".
-- Begin Pasteable Code --
module TutEx2a where
import DOM.Level2.HTMLSpanElement
import Graphics.UI.HsWTK
-- Main function
main = docBodyC mainW
-- Text to display
txt = "Changing Colors of World Wide Web"
-- Make an infinite list of colors for each character to display
fgcs = cycle ["red", "blue", "green", "cyan", "magenta"]
-- Sequence as many spans as needed for colored characters
mainW = foldr (+++) nowidget (zipWith spanc fgcs txt)
-- Color a single character by creating a span properly styled
spanc f c = mkSpan `withStyle` ["color" := f] |<< textP [c]
-- End Pasteable Code --
At this point, we are able to create static layout of Widgets. No way has been shown yet how to make GUI elements interact.
Activators serve exactly this purpose. Activators are functions, usually endlessly looped which are executed each in its own thread. These functions repeatedly receive messages from Message Boxes, and also intercept events induced by user. Activators also are able to modify on-the-fly properties of Widgets to which they are "attached". Some Activators also perform data exchange over XMLHTTP.
Method of inter-widget communication described here is derived from one discussed in the following paper:
HsWTK defines a type for these functions:
type ACTF = THTMLElement -> Bool
This type has one thing in common with the Widget
type: a THTMLElement
is one of function's arguments.
HsWTK also defines a function active
which being applied to an Activator turns it into a Widget, that is, an Activator may be nested within a container: that's what was meant above for an Activator "attached" to a Widget.
Our next example consists of two <INPUT> elements: when something is typed in the left one, it is repeated in the right one:
module TutEx3 where
import Graphics.UI.HsWTK
import Control.Concurrent.JSThreads
main = docBodyC mainW
mainW = msgBox $ \ibx2 ->
msgBox $ \dummy ->
inputI |<< active (evtBCastA "keyup" rtgt [ibx2])
+++ inputI |<< active (fwdValueA ibx2 dummy)
rtgt e = readTargetU e FwdUpdSet
Let's go line by line. As new things are introduced, they will be discussed in appropriate sections.
Message boxes and activators
Message boxes were discussed earlier as means for inter-thread communications. Each Activator is represented by a separate thread. Unlike previous code examples, the main Widget code contains two calls to the msgBox
function. The msgBox
function passes reference to newly created Message box to its continuation. Thus, after the following code:
msgBox $ \ibx2 ->
msgBox $ \dummy ->
is executed, two Message boxes are created.
Wiring the static layout
The following code of the main Widget would have produced the same static layout of two input elements:
mainW = inputI |<< nowidget
+++ inputI |<< nowidget
Note the use of nowidget
here: the inputI
function produces an <INPUT> element, and the |<<
combinator assumes that the <INPUT> element is a container, that is, should have something nested.
This approach may be used during Web GUI design: make Widgets containers where necessary, but nest nowidget
's instead of Activators.
Compare the code of mainW
above with the code from our example:
mainW = ...
inputI |<< active (evtBCastA "keyup" rtgt [ibx2])
+++ inputI |<< active (fwdValueA ibx2 dummy)
Each <INPUT> element got an Activator. As it may be guessable, Activator attached to the first declared (showing at the left of Web page) <INPUT> element, transmits its value (whatever is typed in), and Activator attached to the <INPUT> element declared second (showing right of the first <INPUT>) receives the value.
Mapping and broadcasting events
HsWTK defines the following Activator function: evtBCastA
evtBCastA :: CEvent e => String -> (e -> CPS Bool v) -> [MSGBOX Bool v] -> ACTF
The first argument of String
type is the type of event this Activator responds to. Only one event type may be specified. Event types are derived from on- attribute names, e. g. "keyup" corresponds to onkeyup event, etc.
The second argument is a CPS-style function mapping an event to some value of type v. Such a function may retrieve certain parameters of an event (such as code of a key pressed), or event produce some side effects, although this is not recommended.
The third argument is list of Message boxes where the mapped value will be broadcast over. Broadcast will be performed using the sendMsg_
function, so there is possibility of message non-delivery.
HsWTK defines two functions that can be used as the second argument of evtBCastA
: maps any event to the given constant value
: maps any event to the value (always of typeString
) retrieved from its target element. The target element must support the value property.
The latter function is used in our example. Basically the Activator attached to the left <INPUT> element intercepts each onkeyup event, retrieves event target value (that is, the <INPUT> element it is attached to), maps it to the value forwarding message (see below), and sends to the Message box that other <INPUT> element may be listening to by means of its Activator.
Value forwarding protocol
Value forwarding protocol is a convention set by HsWTK regarding the way how Widgets values may be set externally, or queried. A conforming Widget should have an Activator parameterized with two Message boxes. The first Message Box is for receiving messages of type FwdValueMsg
. The second Message Box is for sending messages of type String
The Activator should act upon the receipt of FwdValueMsg as follows:
- FwdCurr: forward the current value, not changing it
- FwdCurrSet s: forward the current value to the default Message Box, update with new value s
- FwdUpdSet s: update element's value with new value s, forward the new value to the default Message Box
- FwdCurrTo m: like FwdCurr but to a specified Message Box m
- FwdCurrSetTo m s: like FwdCurrSet but to a specified Message Box m
- FwdUpdSetTo m s: like FwdUpdSet but to a specified Message Box m
Messages FwdCurrTo, FwdCurSetTo, FwdUpdSetTo cause the value of the Widget to be forwarded to a Message Box different from one the Activator is parameterized with.
In our code example, the second <INPUT> element has an Activator fwdValueA
... inputI |<< active (fwdValueA ibx2 dummy)
This is a "standard" Activator provided by HsWTK for Widgets based on HTML elements with attribute value defined. The first Message Box is the same where the first <INPUT> element's Activator broadcasts the value upon each key release.
The second Message Box is not used in any way, but it is there since fwdValueA
requires it.
Now, looking at the event mapping function of the first <INPUT> element:
rtgt e = readTargetU e FwdUpdSet
which means that the constructor FwdUpdSet
is applied to the value retrieved from the event target element (that is, the first <INPUT>), yielding the message per Value forwarding protocol. This value will be received by the second <INPUT> element's Activator, and will subsequently show in the element.
More complex widgets
Our next example shows a Widget which has some functionality encapsulated, while externally this is just an <INPUT> element. The example features an input field which validates its value (as it is typed in) against a regular expression, and changes its border color to green when validation passes, and to red otherwise.
-- Begin Pasteable Code --
module TutEx4 where
import Data.JRegex
import CDOM.Level2.DomUtils
import Graphics.UI.HsWTK
import DOM.Level2.HTMLSpanElement
import Control.Concurrent.JSThreads
main = docBodyC mainW
mainW = msgBox $ \valmb ->
textP "Version (X.Y.Z) etc.:"
+++ valInput (JRegex "^[0-9]+(\\.[0-9]+)*$") ("green", "red") valmb
valInput rgx coltp mb =
msgBox $ \dummy ->
inputI |<< (active (evtBCastA "keyup" (valrx rgx coltp) [])
+++ active (fwdValueA mb dummy))
valrx rgx (ct, cf) e k = readTargetU e (jrxTest rgx "") $ \bv ->
targetElement e
(set'style ["border-color" := if bv then ct else cf]) $ \_ -> k True
-- End Pasteable Code --
Regular expression in this example matches numbers separated by dots (like 1.2.3). Readers are encouraged to try other regular expressions as well.
Understanding of how this code works is left as reader's excercise. Hint: evtBCastA
is called with empty list of Message Boxes. All event processing work is done on the single HTML element (event target).
Display-only widgets
Below is an example of code similar to the example with two <INPUT> elements except that user's input is displayed in a non-editable (display-only) Widget.
-- Begin Pasteable Code --
module TutEx5 where
import Graphics.UI.HsWTK
import DOM.Level2.HTMLDivElement
import DOM.Level2.HTMLSpanElement
import Control.Concurrent.JSThreads
main = docBodyC mainW
fleft = mkDiv `withStyle` ["float" := "left"]
fclear = mkDiv `withStyle` ["clear" := "both"] |<< nowidget
mainW = msgBox $ \ibx2 ->
mkDiv |<< (fleft |<< inputI |<< active (evtBCastA "keyup" rtgt [ibx2])
+++ fleft |<< mkDiv `withStyle`
["border" := "1px solid gray"
,"width" := "100px"
,"padding" := "3px"
,"text-align" := "right"
,"overflow" := "hidden"]
|<< (textP "\160"
+++ mkSpan |<< active (updMapA "" unFwd ibx2))
+++ fclear)
rtgt e = readTargetU e FwdUpdSet
unFwd (FwdUpdSet s) = s
unFwd _ = ""
-- End Pasteable Code --
In this example, both <INPUT> and <DIV> elements are enclosed within left-floating <DIV>'s for proper placement. The character with code 160 (that is,
) is inserted within a framed <DIV> to make sure the frame has full height when nothing is displayed. Finally, a <SPAN> element is nested within the framed <DIV>. The special Activator, updMapA
is attached to the latter. This activator is parameterized with one Message Box to receive messages of any type. Another parameter of updMapA
is a function that maps input messages to String
s. In this example, the message sent by the <INPUT> element to be displayed, is expected to be wrapped into the FwdUpdSet
constructor. Please note that this is not a full emulation of Value forwarding protocol as nothing would be sent in response to messages like FwdCurrTo
. Please note also that when building a display-only element, avoid nesting anything other than the appopriate Activator within the element that performs actual display. The updMapA
Activator is based on the updateU
function which replaces the first child of given node with given String
value. Other children remain unchanged. With this logic, some interesting effects may be achieved, but this feature should be used with caution.
Conclusion: all together
In conclusion, let's finally develop a program that does something useful. As another "classical" example, this will be a RPN calculator.
-- Begin Pasteable Code --
module TutEx6 where
import CPS
import Data.Char
import Graphics.UI.HsWTK
import DOM.Level2.Event
import DOM.Level2.Events
import DOM.Level2.KeyEvent
import DOM.Level2.HTMLDivElement
import DOM.Level2.HTMLSpanElement
import Control.Concurrent.JSThreads
main = docBodyC mainW
mainW = msgBox $ \calcmb ->
msgBox $ \dispmb ->
mkDiv `withStyle` ["border" := "1px solid black"
,"width" := "200px"
,"height" := "150px"
,"text-align" := "center"]
|<< (mkDiv `withStyle` ["height" := "20%"
,"text-align" := "right"
,"vertical-align" := "middle"
,"overflow" := "hidden"]
|<< (textP "\160" +++ textP "\160"
+++ active (updMapA "0" id dispmb))
+++ foldr (+++) nowidget (map (cbtn calcmb) btxt)
+++ active (passMapStateA ci calc (show . acc) calcmb dispmb)
+++ active (evtBCastA "keydown" clkey [calcmb])
+++ active (tabIndexA 0))
clkey :: TKeyEvent -> CPS Bool Char
clkey e k = preventDefault e $ \_ -> get'keyCode e $ \c -> k $ case c of
38 -> '^'
107 -> '+'
61 -> '+'
109 -> '-'
106 -> '*'
191 -> '/'
111 -> '/'
59 -> '/'
_ -> chr c
data CalcST = CalcST {acc :: Int, stack :: [Int], rst :: Int}
ci = CalcST {acc = 0, stack = [], rst = 0}
calc :: CalcST -> Char -> CalcST
calc st c = case c of
'C' -> ci
d | isDigit d -> let acc' = rst st * acc st * 10 + ord d - ord '0'
in st {acc = acc', rst = 1}
'^' -> st {rst = 0, stack = (acc st) : (stack st)}
o | o `elem` ['+', '-', '*', '/'] ->
let op '+' = (+)
op '-' = (-)
op '*' = (*)
op '/' = div
in if null (stack st)
then st
else let acc' = op o (head $ stack st) (acc st)
in st {rst = 0,
stack = acc' : tail (stack st),
acc = acc'}
_ -> st
btxt = ['1', '2', '3', '+',
'4', '5', '6', '-',
'7', '8', '9', '*',
cbtn mb txt = mkDiv `withStyle` ["float" := "left"
,"width" := "25%"
,"height" := "20%"
,"margin" := "0px"
,"vertical-align" := "middle"
,"text-align" := "center"]
|<< buttonI `withStyle` ["width" := "80%"
,"height" := "80%"
,"font-size" := "80%"]
|<< (textP [txt]
+++ active (evtBCastA "click" (evt2ConstU txt) [mb]))
-- End Pasteable Code --
The main Widget, mainW
consists of the following pieces:
- Two Message Boxes. One (
) will be used to transmit keystrokes and mouse clicks received from the browser's input facilities. Another (dispmb
) will be used to update the calculator's display element.
- A <DIV> element with visible border: it encloses all other elements of the calculator. It is also responsible for receiving keyboard input.
The following elements are nested within the above mentioned <DIV>:
- A <DIV> element that contains the calculator's display.
- 16 buttons for mouse input. Note the use of
. All buttons use the same Message Boxcalcmb
, so it is passed to each button's creation function. Each button uses its own character taken from thebtxt
list: button creation function is mapped over this list. Finally, the resulting list is folded with+++
to sequence all buttons properly.
- Activator which implements the internal (stateful) logic of the calculator. It is based on
which receives messages from its input Message Box, maintains internal state transitions based on what is received, and maps internal state to messages sent to the output Message Box. That's how the two parts (user input and result display) are wired together.
- Activator based on
to catch keystrokes and route them to the same Message Box where mouse clicks go.
- Activator based on
. Although DOM does not define the tabIndex property for most HTML elements, according to this (last comment), it is necessary to initialize this property in order to be able to receive keystrokes on <DIV> elements.
The clkey
function performs proper mapping of keystrokes to simulate mouse clicks on buttons. It extracts the value of keyCode property from the event received, and remaps certain codes, finally passing a character to the continuation.
The CalcST
defines the internal state of the calculator. It includes the accumulator (where the user input goes), the stack (a list of numbers), and the reset flag which helps update the display properly when entry of a new number begins.
Internal logic of the calculator (calc
) is pretty straighforward: numbers typed in are pushed down the stack when "^" button is clicked, or the "up arrow" key is pressed. Operation buttons/keys perform binary operations between the accumulator and the topmost stack element. Finally copy of the result is pushed back onto the stack, so next number typed in may be used for the next computation.
The btxt
list of characters defines what shows on buttons.
The button creation function (cbtn
) defines a <DIV> element nesting a <BUTTON> element. Each button has an Activator based on evtBCastA
that maps each click to the character showing on the button. Note the float: left style and percentage width defined for <DIV>s: no matrix layout logic is necessary; buttons fill the <DIV> with borders with correct placement.
For any questions, suggestions, concerns please contact Dmitry Golubovsky (golubovsky at gmail dot com).


text:
You must have the latest version of Macromedia Flash Player to view this video.
Download the free Macromedia Player now.
Okamiden Nintendo DS TGS 09: Puzzle Gameplay (Off-Screen)
Spread the word.
Copy and paste the following code to embed.
HTML code to display this video on your personal web page:
Code to display this video on a GameSpy community site:
Post to a bookmarking service.
Send a link of this video to a friend:
Friend's Email: (Separate email addresses with commas)
Your Email:
Subject: (optional)
Message: (optional)
This video is not available for video play but may be downloadable below.
Certain videos offer different formats, resolutions and file sizes.
320x180 (10.317025390625 MB)
Set the video resolution for your videos:
Low-Resolution [Default]
High-Resolution [Faster Connections]


text:
Colebrooke-taylor Surname Ancestry Results
Our indexes 1000-1999 include entries for the spelling 'colebrooke-taylor'. In the period you have requested, we have the following 1 record (displaying 1 to 1): Try these... colebr colebran colebrand colebrand' colebrant colebraund colebre colebridge colebrigge colebroc colebroch' colebrock colebrok colebroke colebron colebrond colebrondesleman colebroock colebrook colebrooke colebrowne colebrun colebrunne coleburg coleburge coleburn coleburne coleburt colebury colebut coleby colebyare colec colec' colecester' colecestr colecestr' colecestra colecestre colecestria These sample scans are from the original record. You will get scans of the full pages or articles where the surname you searched for has been found. Your web browser may prevent the sample windows from opening; in this case please change your browser settings to allow pop-up windows from this site. Research your ancestry, family history, genealogy and one-name study by direct access to original records and archives indexed by surname. |


text:
Tuesday, January 31, 2012
Monday, January 30, 2012
Wednesday, January 25, 2012
New Character Design Blog
Hey folks
I am putting together a new blog site just for my design work - mostly from commercials and short spots.
That image above is a layout from Rex Hackelberg's fancy designs.
Take a gander if you are interested...
Friday, January 20, 2012
Wednesday, January 18, 2012
Wednesday, January 04, 2012
Does Anyone Still Have A Real Job?
Now and then I'll read other people's jobs descriptions on "Linked In". I think I can see why if you do something that's tangible you may not find the kind of jobs that are available today.
Here are some typical skills that people advertise today:
"Develop, prioritize and execute optimizations for partners"
We all could use more "optimizations" so it's a good thing someone is continually developing them for us. I wonder why they murder them after they prioritize them?
"Manage strategy and execution for social media marketing by establishing best practices, developing brand voice, and streamlining efforts and positioning with international teams to launch an internal social media dashboard product for aggregated quantitative analytics."
I think if you put anything to do with "social media" in your job description, you expect your potential bosses to throw their money at you. This description admits the person does not actually produce anything; he manages others who do the very important job of aggregating "quantitative analytics". Where do you keep your analytics? I store mine under the sink.
Here is some detail that explains much more clearly what the worker above does:
"Manage large-scale conversational marketing campaigns that bring together brands, content, and audiences. As a digital media publisher, we bring together leading online voices with major brands to host robust social media environments where value-driven conversation is key. Management of these efforts involves working with cross-functional stakeholders (authors, sales, product strategy, engineering, accounting, finance, client services, etc.) and strategic partners to manage programs from inception through execution."
Can you imagine bosses dumb enough to hire someone on the basis of all this mumbo-jumbo? It must happen because so many people have job descriptions like this and people in charge believe it's somehow useful to spend a lot of money on fake jobs, while sending the real jobs to India and Korea and China.
What ever happened to jobs that are obvious and functional? Like: "I fix cars". "I design toys". I manage a grocery store". "I rob 7-Elevens".
There are a lot of theories about why the world economy has broken down. Mine is that nobody wants to actually do anything real anymore. Everyone is a manager of some group of researchers in the world of branding, social media (add your own trendy buzz-word) or focus testing. Or they are consultants for businesses that they have never actually worked in.
I think when corporations get too big, they stop thinking about making products and instead fill 57 stories of their skyscrapers with managers, middle managers, experts and consultants, none of whom have ever made anything with their hands. - Certainly not the product that the corporation ultimately wants to sell - if they sell anything at all. There are huge corporations now that don't seem to produce anything - consulting firms, ad agencies, some of the well known internet giants...
Even in animation, we now have lots of job categories that for the life of me I can't figure out their purpose: Concept Artist, Storyboard Revisionist, Note-Givers, not to mention the armies of executive producers that fill up the opening credits of many cartoons. I get all kinds of crazy skills described in animation graduate resumes. It's never "I can animate" "I can clean up and inbetween" or "I can do background layout". It's always management jobs or directing and designing and concept art - basically starting at the top. Not many want to do the actual work on a job anymore. I guess the schools must encourage that; I don't really know.
Imagine how much more efficient and cost effective the world would be if people still made things and we eliminated all the experts and managers and consultants with vague job descriptions that stop things from getting made by people who actually know how to make them. And we could make things in the country again.


text:
A while back I shared my favorite paint supplies, and then I was asked, "Where do you keep all of your painting tools?"
The short answer is, in some cheapo white baskets on the top shelf in the laundry room.
For over a year now, the baskets have been doing their job keeping the supplies wrangled and concealed {clear bins would add visual clutter}. But it stopped there. Every single time I wanted to whip out a quick project, I would pull every bin down and search for the specific supply I needed. Where did I toss the paint can opener the last time I used it? Which bin had my favorite paint brush? We need to quickly fill a hole in the wall, where is that spackle again? Guessing and searching isn't my idea of a good time, especially when I just want to get the project wrapped up. And without labels, the baskets were never guaranteed to make their way back to the same location on the shelf.
So, I started out by loosely categorizing each bin, and sorted accordingly.
Caulks, putties and adhesives in one, miscellaneous painting tools in another and paint applicators in the third.
I brainstormed all sorts of labeling ideas. Luggage tags, laminated labels, etc... but in the end, there didn't seem to be straight forward way to label all of the contents that were in each bin; there were so many miscellaneous items in each one that I would never be able to read the small print from down below.
A simple 1, 2, 3 label would do the trick. I like how they look, and I could just create a simple reference list down at ground level.
Each basket received a spray painted house number, and the contents in each basket were listed on a printable I quickly whipped up.
I decided to hang the list in a frame since it is a laundry room and it is exposed to lint and cleaning supplies and sprays. Since the contents of the bins rarely change, it would be no biggie to pull it out of the frame and add to the list.
Now I know what is in each bin without question! Time to get painting!
This method could be applied in so many areas around the home, I especially love the idea of using it for managing storage bin contents in a garage or storage room. We also use the 1, 2, 3 system frequently around the home for the kids and it has been a huge
How has a numbering system worked for you in the past? Do you looove it as much as I do?


text:
Frame: Yes
Material: Canvas
Picture: Wall Art
Painting: Printed Oil Painting
Coating: UV,Water-Proof,Moisture-Proof
Type : Giclee prints Cross painting (Not handpainted)
Product Detail:
Size :
- Medium: 20x35cmx2 + 20x45cmx2 + 20x55cm ,
- Large: 30X40cmX2 + 30X60cmX2 + 30X80cm,
- Extra Large: 40x60cm x2 + 40x80cm x2 + 40x100cm
Materials: HQ Ployester canvas, Wooden inner framework
Frame: Stretched canvas with wood bars, ready for hang.
Seller Note:
1. Please choose the proper size, if you need another size, please contact us.
2. Because of the different settings, Canvas here might be slightly difference in color from each display device.
1. Item will be shipped in 2-5 days after a verified payment.
2. We offer free Standard Shipping Worldwide, If you need another shipping method, please contact us.


text:
Back to back?
We'd go years and years before without a together sighting.
At this rate they're almost like Jennifer Garner on an Argo campaign trail. Except right now, at least I don't think, there's nothing to sell.
Here are Gwyneth Paltrow and Chris Martin on their way to school today with the kids. G has apparently been in LA prepping 33 Dias with Antonio Banderas which is expected to start shooting at the end of the month in Paris. Banderas plays Pablo Picasso during the period when he was working on Guernica and G is his lover and muse Dora Maar. So, you know, get ready for some Smug. She'll be speaking Spanish in the film. Oh My God, you are going to be SO annoyed, I cannot wait!
PS. LOVE her pants