text:
Was the event TLOC?
In case of TLOC, is it of syncopal or non-syncopal origin?
In case of suspected syncope, is there a clear aetiological diagnosis (see section 4.1.1)?
Is there evidence to suggest a high risk of cardiovascular events or death (see section 4.1.2)?
TLOC has four specific characteristics: short duration, abnormal motor control, loss of responsiveness, and amnesia for the period of LOC (for an explanation of the clinical features of TLOC see Web Table 4 in section 4.1 of the Web Practical Instructions ).
TLOC is probably syncope when: (i) there are signs and symptoms specific for reflex syncope, syncope due to OH, or cardiac syncope, and (ii) signs and symptoms specific for other forms of TLOC (head trauma, epileptic seizures, psychogenic TLOC, and/or rare causes) are absent. Practical instructions for history taking are given in sections 3 and 4 of the Web Practical Instructions .
When epileptic seizures or psychogenic attacks are likely, appropriate steps should be taken. By using a detailed clinical history, physicians can differentiate syncope from other forms of TLOC in approximately 60% of cases. 12 For non-syncopal TLOC, refer to sections 7 and 8.
Flow diagram for the initial evaluation and risk stratification of patients with syncope. BP = blood pressure; ECG = electrocardiogram; HP exam = history and physical examination; TLOC = transient loss of consciousness.
Flow diagram for the initial evaluation and risk stratification of patients with syncope. BP = blood pressure; ECG = electrocardiogram; HP exam = history and physical examination; TLOC = transient loss of consciousness.
The starting point of the diagnostic evaluation of TLOC of suspected syncopal nature is the initial syncope evaluation, which consists of:
Careful history taking concerning present and previous attacks, as well as eyewitness accounts, in person or through a telephone interview.
Physical examination, including supine and standing BP measurements.
Electrocardiogram (ECG).
Based on these findings, additional examinations may be performed when needed (see section 4.2):
Immediate ECG monitoring when there is a suspicion of arrhythmic syncope.
Echocardiogram when there is previous known heart disease, data suggestive of structural heart disease, or syncope secondary to cardiovascular cause.
Carotid sinus massage (CSM) in patients aged >40 years.
Head-up tilt testing when there is suspicion of syncope due to OH or reflex syncope.
Blood tests when clinically indicated, e.g. haematocrit or haemoglobin when haemorrhage is suspected, oxygen saturation and blood gas analysis when hypoxia is suspected, troponin when cardiac ischaemia-related syncope is suspected, or D-dimer when pulmonary embolism is suspected, etc.
We came up with a list of toys that targeted several developmental milestones. The first 12 toys boost the abstract, creative, and interpretative skills of your 10-year-old, as they lean more towards the area of arts, crafts, and even fashion. We also picked educational toys to further her intellectual journey, physical toys to keep her active in this stage of early adolescence and puberty, and a few toys to help in her social interactions with friends.
As she enters into the early adolescent years and hits puberty, your 10-year-old will encounter many physical changes with her body. She will start developing proportions that are similar to adults, and even grow in height and weight in proportion to boys her age. She will also have developed full control of her small and large muscles, so she is able to enjoy activities that are more physically demanding and which require
Printed Racerback Top Perfect Orange World 11 by VIDA VIDA Newest Cheap Price 01rMgugLuW
. She may also begin showing an increased interest in a certain skill or sport instead of just a general desire to be physical.
You will notice that your 10-year-old can converse with you as easily as an adult can, and she can do the same for people of all ages. Her speech patterns will mimic that of an adult, and at this point she can even create her own special lingo. She will have many stories to share, but she also needs to continue broadening her vocabulary and improving her communication skills further.
Intellectually, this is the marked beginning of abstract thinking and interpretative or inferential abilities . They now have an increased understanding for abstract thought, and they seek whatever can help them explain the complex phenomena that surround them. They are also more equipped for logical reasoning and critical thinking, and you'll be surprised at their ability to view the world beyond their personal experiences. Their problem-solving skills are more advanced, and they are curious enough and knowledgeable enough to test various hypotheses that help them make sense of the world. That said, your 10-year-old is also now more meticulous and detail-oriented than ever before.
In terms of social and emotional development, early adolescents have a strong group identity and value their friends a lot. They hang out with their peers more often because they also identify with them. This means this age is still ripe for creative and cooperative play, as well as a little friendly competition. You have to note though that this is also the stage where their values and beliefs will be tested and shaped, forming her personality into what it will be as she blossoms into an adult.
Wrapping it Up
The 10-year-old mark being such a critical one, it's really important that the toys that you get are age-appropriate. It's an opportune time to use toys to the fullest, and this is why it's important that you pick the right ones. With this comprehensive and well-researched guide, you'll be able to do so.
Aperiomics solves inadequate pathogen testing by combining deep next-generation sequencing (NGS) with its powerful Xplore∙NGS℠ software. This combination of technologies allows virtually any biological sample to be tested for virtually any microorganism.
Aperiomics uses the latest technology from the best minds in genomics and microbial testing. Next-generation sequencing is performed using Illumina sequencers. Once a complete genetic fingerprint of the sample is created, the human portion is removed and the remaining microbial data is run through our proprietary software and against the Aperiomics Microbial Database™. It's a comprehensive database of microorganisms, including the world's largest collection of pathogens. This technology allows "all-in-one" testing from any sample and is only available through Aperiomics.
Set up free account
Order collection kits to have on hand
Collect patient samples
Complete requisition form
Ship to Aperiomics at no cost
Receive interpret report
Aperiomics has successfully found many infections missed by standard testing. By utilizing the Aperiomics Microbial Database, my interstitial cystitis patients have been able to finally identify not only bacteria, but fungal and viral infections contributing to their chronic bladder symptoms and then receive the appropriate treatment needed to cure what was previously thought to be a chronic, degenerative, and incurable condition.
Aperiomics provides state of the art DNA testing for over 30,000 microbes of the viral, bacterial, parasitic and fungal variety. This is a powerful silver bullet in testing for any savvy physician to diagnose the underlying root causesof most medical illness from chronic fatigue to headaches to IBS and a variety of pain syndromes, just to name a few. The staff are friendly, approachable and responsive. It has made a significant difference in the care of my patients and has saved manylives.
Paternity of all four sons was confirmed by showing the expected segregation of four highly polymorphic autosomal markers ( Weber and May, 1989 ). These were D21S156, D21S270, D13S132, and D13S159 with heterozygosities of 0.83, 0.86, 0.84 and 0.90 respectively.
FISH for DAZ was performed with Cosmid 63C9 ( Saxena et al. , 1996 ), using established methods ( Yu et al. , 1996 ).
The proband (individual III 8 in Figure 2) and his spouse (III-9) presented to the Reproductive-Endocrinology-Infertility Clinic at Columbia-Presbyterian Medical Center with complaint of primary infertility for 3 years. Testing revealed normal karyotype and normal serum hormone levels while semen analyses showed severe oligozoospermia (Table II). Microdeletion screening by STS based PCR revealed the presence of a microdeletion in subinterval 6D–6F of the Y chromosome long arm (Figure 1). During discussion, the proband reported that his two older brothers (III-4 and III-6) were known to be azoospermic and infertile. Subsequent work-up revealed all three brothers had an apparently identical microdeletion. Testicular biopsy performed on one of them (III-6) demonstrated `Sertoli cell only' syndrome.
The finding of microdeletion in three infertile brothers suggested their father was likely to carry the same deletion. A detailed study was undertaken on the remainder of the family who all resided in a small town in the Dominican Republic. A complete reproductive history was elicited from the adult family members. The familial relationships depicted in the pedigree (Figure 2) were confirmed by showing the expected segregation of several autosomal polymorphic markers (data not shown) for the relevant family members (I-1, I-2, II-1, II-8 and II-1, II-2, III-1, III-4, III-6, III-8, III-10). There was no evidence of non-paternity. Thorough cytogenetic studies on relevant family members (I-1, II-1, II-6, II-8, II-10, III-1, III-4, III-6, III-8, III-14, III-15, III-17, III-19, and IV-1) revealed normal karyotypes. Semen analysis was performed in seven of the 16 males and blood samples were obtained from most of the family members.
Table II summarizes the results of semen analysis and endocrine work-up on relevant family members. The proband (III-8), his father (II-1) and two of his three brothers (III-4, III-6) were found to be either azoospermic or severely oligozoospermic. The proband's oldest brother (III-1) declined semen analysis. In addition, the proband's uncle (II-8) was found to have azoospermia and elevated FSH with low testosterone. As shown in Figure 1, the proband, his father and three brothers were all found to have microdeletion of Yq by STS PCR analysis. Southern blotting with the DAZ (Figure 3) and RBM (data not shown) probes confirmed that the deletion included the DAZ locus but not the RNA binding motif ( RBM ) locus. FISH analysis with the DAZ Cosmid 63C9 ( Saxena et al. , 1996 ) of the proband's father's (II-1) leukocytes showed uniform absence of the DAZ locus (Figure 4).


text:
Potatoes and taxes: A glimpse at what we payEDITORIAL
July 14. 2014 8:10PM
You might have seen the story of Zack Brown, the Columbus, Ohio, man who jokingly started a kickstarter online fundraising campaign to finance a single bowl of potato salad. At one point, he had pledges of $70,000. What would be the tax bill for a $70,000 order of potato salad? Try $21,167.
That would be Brown's tax bill if he got $70,000 in cash for his potato salad, the analysts at the Tax Foundation calculated. According to a Washington Post story, the bill would include $9,313 in payroll taxes, $8,632.22 in federal income taxes, $1,510.20 in city taxes, and $1,712 in state income tax. The federal income tax would amount to 13.1 percent, but the total tax bill would be 32.1 percent.
Because of federal withholdings, it is not easy to see how much we are really paying in taxes. Zack Brown's kickstarter campaign provides a good look at just how much money government actually takes from us. Granite Staters on average work until April 19 to pay off their tax bills. We work nearly 1/3 of the year just to pay our taxes. And still there are people who do think this is not long enough.

subset: commoncrawl


text:
Too busy to manage your visa request? Use the CIBTvisas Concierge Service and have a dedicated specialist manage the entire application process from start to finish. The CIBTvisas Concierge Service provides our highest level of hands-on, customised service.
Have an urgent visa application with a tight deadline? Use Visa Pre-Check to save valuable time. Have an experienced visa specialist review and verify that your application is accurate and complete or if corrections are needed.
Need a fast, easy and inexpensive way to get a photo you can use for your visa application? Use CIBTvisas's photo service to upload a digital photo that we will review and print for your visa application.


text:
- Boscos challenge
- Great Lost Bear takes the trophy
- BJ's winners
- The littlest pub
Competition results:
- Great American Beer Festival
- World Beer Cup
All were trophy winners in the 2003 Realbeer.com Challenge Cup.
Whistlers Inn in Cinnaminson, N.J., served 1,995 pints of American beer July 22-24 to win the large taphouse title, edging out the Green Leafe Cafe in Williamsburg, Va., and defending champion the Great Lost Bear of Portland, Maine. The Blind Tiger Ale House in Manhattan, only seven years old but well known by brewers of specialty beer across the country, won the small taproom cup.
Second Street Brewery of Santa Fe, N.M., sold more than 1,700 pints to win the large brewpub competition. Boscos Nashville captured the small brewpub cup - a victory that is bound to spark controversey in Tennessee.
Boscos Nashville served 1,424 pints July 22-24, when family rival Boscos Squared was closed because of a storm that rolled through the Tennessee and Ohio valleys and knocked power out in Memphis.
The pubs staged a belated showdown July 29-31 (it was still American Beer Month) the following week, with Boscos Squared pouring 1,527 pints and Nashville 1,242.
More than 250 establishments across the country took part in the 2003 Challenge Cup, selling a quarter million pints of American brewed beer and participating in a variety of special events. In some other competitions:
Most interactive
Boscos brewpubs in Memphis and Nashville. Read their intrastate comments.
Champion multi-tap bar
Great Lost Bear in Portland, Maine. Members of the Maine brewing community were in the pub every night.
Champion chain brewery-restaurant
Rock Bottom Restaurant-Brewery in Arlington, Va.
BJ's Challenges
Within BJ's family of restaurants and breweries, establishments competed with each other. BJ's in Chandler, Ariz., which won the big establishment cup and to Portland/Lloyd Center (on Weidler), the small establishment champion.
Smallest participant
Kaffeeklatsch Bar in Huntsville, Ala. Only one tap, but lots of fun.


text:
H.R. 1223, the GSE Credit Risk Equitable Treatment ActPosted by on April 13, 2011
The legislation, introduced by Capital Markets Subcommittee Chairman Scott Garrett, helps clarify the risk retention rules required under Section 941 of the Dodd-Frank Act to make clear that Fannie Mae and Freddie Mac will be held to the same standards as any other secondary mortgage market participants. A GSE loan purchase or asset-backed security issuance would not affect the status of the underlying assets.
On April 6, 2011, the Capital Markets Subcommittee approved the legislation with a vote of 34-0.


text:
This is it.
We started with 32 shows and now we're down to two. After four rounds of heated competition, you decided that either "Chuck" or "Dexter" is the best show on TV. Now it's time to pick a winner for Hulu's second annual Best in Show. Voting is open until we announce a winner on April 4.
Will Dexter carve out a place for himself in history, or will Chuck covertly sneak in as the best show of 2010-2011? TV expert and HitFix.com Senior Editor Alan Sepinwall is here to explain what the shakeout of the Final Four means, how this final pairing can shape TV's future, and to which show he's handing his final, five-percent vote for Best in Show.
Hulu: If "Dexter" wins this thing, does that make it a candidate to be an all-time great? It gets overlooked by the Greatness Hype that has pervaded "Mad Men," "Breaking Bad," and "Boardwalk Empire" discussions. Doesn't that belong in those discussions at this point?
Alan Sepinwall: With all due respect to the fans who have pushed it this far in the contest, I have to say no. "Dexter" is a show with a brilliant lead performance that had a great first couple of seasons (though the second season ended poorly after a great start) and has — outside of the Michael C. Hall/John Lithgow acting duel in season 4 — been largely going through the motions ever since. A fun show. Not an all-timer.
"Dexter" dominated "Glee," a show you thought had a very good chance to win the whole contest. "Community" completely derailed all of its competition, until it faced off against "Chuck" in this round. Meanwhile, "Chuck's" only challenge came from "Supernatural," which arguably had the competition's most vocal support. Should we have foreseen this final coming early on?
Given what I know A) about the passion of "Community" fans, and B) how last year's Best in Show went (where the guest critic had a stronger vote and wasn't a "Community" fan at the time), I have not been surprised in the least about "Community's" success. Nor "Chuck's," for reasons I'll get to below. As I've said, "Dexter" crushing "Glee" was by far the biggest shocker of the tournament for me, though in retrospect "Glee" losing to a show whose support we all underestimated.
"Dexter" has been heavy on guest stars this season. While this is used as a cheap trick on a lot of shows, "Dexter" seems to use them effectively and genuinely. Can shows use this season as a primer on how to work cameos effectively?
"Dexter" uses guest stars well in part because its regular characters other than Dexter (and, at times, his sister) aren't particularly deep, and aren't allowed to know about Dexter's other, more interesting, life. So they have to put him up against non-regulars whenever he's being himself. But even "Dexter" has had a spotty record with guest stars. Most of them were good this season, and Lithgow was fantastic last season, but Jimmy Smits (an actor I usually like) was a real misfire the year before.
Where are these "Chuck" superfans coming from? Did you have any idea how avid and vocal their fan base is?
Given that I was there to witness the fan campaign that helped save the show from cancellation two years ago, I'm not the least bit surprised by how much they've been supporting their show here. These are people who went out and bought Subway sandwiches to help keep their favorite on the air when it was most vulnerable; for this, they didn't even have to spend money.
In a couple of years, are we going to look back at any show and say, "How could that have possibly not won Best in Show in 2011?" And are we going to be embarrassed by any show's particularly lengthy run?
"House" (which was a strong show once upon a time but is now mostly running on fumes) took out the two shows that I'd easily consider to be the best of Best in Show: "Mad Men" and "Breaking Bad." I understand why it happened — many, many, many more people watch "House" than either AMC show — but I think history is going to look far more kindly and frequently on Don Draper and Walter White than on Greg House.
We want to thank you again for supplying five percentage points of brilliance to this contest. So for the very last time: Who do you see winning Best in Show?


text:
Jesse Eisenberg will star as Lex Luthor in the upcoming "Man of Steel" sequel. (Jim Lee / DC Entertainment; Jay L. Clendenin / Los Angeles Times)Link
Jeremy Irons will play Alfred Pennyworth in the upcoming "Man of Steel" sequel. (Brian Bolland / DC Entertainment; Ethan Miller / Getty Images)Link
Ben Affleck has been cast as Batman opposite Henry Cavill's Superman in the upcoming "Man of Steel" sequel. (Ethan Van Sciver / DC Entertainment; Allen J. Schaben / Los Angeles Times)Link
Actress and model Gal Gadot, best known for her work in the "Fast & Furious" film franchise, has been cast as Wonder Woman in Zack Snyder's upcoming "Man of Steel" sequel. (Alex Ross / DC Entertainment; Handout)Link
Henry Cavill as Superman in "Man of Steel." (Clay Enos / Warner Bros.)Link
Ladies and gentlemen, meet your Aquaman. Jason Momoa is set to suit up as the Atlantean king in Warner Bros.' superhero movie "Batman v. Superman: Dawn of Justice," according to multiple reports. HitFix was first with the news.
No official announcement has been made; so far the studio and Momoa's reps have been mum.
Momoa, a swarthy hunk who played the Dothraki warlord Khal Drogo on HBO's "Game of Thrones" and the title role in 2011's "Conan the Barbarian," has been rumored to be circling "Batman v. Superman" for months but has largely disavowed any involvement.
In January, he told MTV News, "I get it all the time. It's just a rumor. I swear." He added, "Man to man. You can punch me in the face [if I'm lying]."
The 34-year-old actor would bring a different look to Aquaman, who in the comics is a blond dude known to sport green tights. That said, a new twist on the character would be in keeping with director Zack Snyder's m.o. on "Batman v. Superman," which also stars Jesse Eisenberg as a much younger Lex Luthor than moviegoers are used to seeing.
Momoa does have ocean experience as well, having starred in TV's "Baywatch."
According to HitFix, Momoa will not have a major role in the "Man of Steel" sequel but will make an appearance, which will set him up to return in Snyder's follow-up "Justice League" movie.
"Batman v. Superman" also stars Henry Cavill as Superman, Ben Affleck as Batman and Gal Gadot as Wonder Woman. It is set for release May 6, 2016.
— Oliver Gettell
Follow me on Twitter: @ogettell
'Superman/Batman': Jesse Eisenberg as Lex Luthor
'Superman/Batman' film release pushed to 2016
'Doctor Who,' Batfleck: 2013 in review
Josh Brolin ready for Ben Affleck as Batman
Gal Gadot cast as Wonder Woman in Snyder film
Gal Gadot casting: Comics world reacts on Twitter
Ben Affleck: Whom would you rather see as Batman?
Ben Affleck: Roles that might inform Batman


text:
- code point argument
- charinfo()
- charblock()
- charscript()
- charblocks()
- charscripts()
- charinrange()
- general_categories()
- bidi_types()
- compexcl()
- casefold()
- casespec()
- namedseq()
- num()
- prop_aliases()
- prop_value_aliases()
- prop_invlist()
- prop_invmap()
- Unicode::UCD::UnicodeVersion
- Blocks versus Scripts
- Matching Scripts and Blocks
- Old-style versus new-style block names
Unicode::UCD - Unicode character database
use Unicode::UCD 'charinfo';
my $charinfo = charinfo($codepoint);
use Unicode::UCD 'casefold';
my $casefold = casefold(0xFB00);
use Unicode::UCD 'casespec';
my $casespec = casespec(0xFB00);
use Unicode::UCD 'charblock';
my $charblock = charblock($codepoint);
use Unicode::UCD 'charscript';
my $charscript = charscript($codepoint);
use Unicode::UCD 'charblocks';
my $charblocks = charblocks();
use Unicode::UCD 'charscripts';
my $charscripts = charscripts();
use Unicode::UCD qw(charscript charinrange);
my $range = charscript($script);
print "looks like $script\n" if charinrange($range, $codepoint);
use Unicode::UCD qw(general_categories bidi_types);
my $categories = general_categories();
my $types = bidi_types();
use Unicode::UCD 'prop_aliases';
my @space_names = prop_aliases("space");
use Unicode::UCD 'prop_value_aliases';
my @gc_punct_names = prop_value_aliases("Gc", "Punct");
use Unicode::UCD 'prop_invlist';
my @puncts = prop_invlist("gc=punctuation");
use Unicode::UCD 'prop_invmap';
my ($list_ref, $map_ref, $format, $missing)
= prop_invmap("General Category");
use Unicode::UCD 'compexcl';
my $compexcl = compexcl($codepoint);
use Unicode::UCD 'namedseq';
my $namedseq = namedseq($named_sequence_name);
my $unicode_version = Unicode::UCD::UnicodeVersion();
my $convert_to_numeric =
Unicode::UCD::num("\N{RUMI DIGIT ONE}\N{RUMI DIGIT TWO}");
The Unicode::UCD module offers a series of functions that provide a simple interface to the Unicode Character Database.
code point argument
Some of the functions are called with a code point argument, which is either a decimal or a hexadecimal scalar designating a Unicode code point, or
U+ followed by hexadecimals designating a Unicode code point. In other words, if you want a code point to be interpreted as a hexadecimal number, you must prefix it with either
0x or
U+, because a string like e.g.
123 will be interpreted as a decimal code point. Note that the largest code point in Unicode is U+10FFFF.
use Unicode::UCD 'charinfo';
my $charinfo = charinfo(0x41);
This returns information about the input "code point argument" as a reference to a hash of fields as defined by the Unicode standard. If the "code point argument" is not assigned in the standard (i.e., has the general category
Cn meaning
Unassigned) or is a non-character (meaning it is guaranteed to never be assigned in the standard),
undef is returned.
Fields that aren't applicable to the particular code point argument exist in the returned hash, and are empty.
The keys in the hash with the meanings of their values are:
- code
the input "code point argument" expressed in hexadecimal, with leading zeros added if necessary to make it contain at least four hexdigits
- name
name of code, all IN UPPER CASE. Some control-type code points do not have names. This field will be empty for
Private Usecode points, and for the others without a name, it will contain a description enclosed in angle brackets, like
- category
The short name of the general category of code. This will match one of the keys in the hash returned by "general_categories()".
The "prop_value_aliases()" function can be used to get all the synonyms of the category name.
- combining
the combining class number for code used in the Canonical Ordering Algorithm. For Unicode 5.1, this is described in Section 3.11
Canonical Ordering Behavioravailable at http://www.unicode.org/versions/Unicode5.1.0/
The "prop_value_aliases()" function can be used to get all the synonyms of the combining class number.
- bidi
bidirectional type of code. This will match one of the keys in the hash returned by "bidi_types()".
The "prop_value_aliases()" function can be used to get all the synonyms of the bidi type name.
- decomposition
is empty if code has no decomposition; or is one or more codes (separated by spaces) that, taken in order, represent a decomposition for code. Each has at least four hexdigits. The codes may be preceded by a word enclosed in angle brackets then a space, like
<compat>, giving the type of decomposition
This decomposition may be an intermediate one whose components are also decomposable. Use Unicode::Normalize to get the final decomposition.
- decimal
if code is a decimal digit this is its integer numeric value
- digit
if code represents some other digit-like number, this is its integer numeric value
- numeric
if code represents a whole or rational number, this is its numeric value. Rational values are expressed as a string like
- mirrored
Ndesignating if code is mirrored in bidirectional text
- unicode10
name of code in the Unicode 1.0 standard if one existed for this code point and is different from the current name
- comment
As of Unicode 6.0, this is always empty.
- upper
is empty if there is no single code point uppercase mapping for code (its uppercase mapping is itself); otherwise it is that mapping expressed as at least four hexdigits. ("casespec()" should be used in addition to charinfo() for case mappings when the calling program can cope with multiple code point mappings.)
- lower
is empty if there is no single code point lowercase mapping for code (its lowercase mapping is itself); otherwise it is that mapping expressed as at least four hexdigits. ("casespec()" should be used in addition to charinfo() for case mappings when the calling program can cope with multiple code point mappings.)
- title
is empty if there is no single code point titlecase mapping for code (its titlecase mapping is itself); otherwise it is that mapping expressed as at least four hexdigits. ("casespec()" should be used in addition to charinfo() for case mappings when the calling program can cope with multiple code point mappings.)
- block
the block code belongs to (used in
\p{Blk=...}). See "Blocks versus Scripts".
- script
the script code belongs to. See "Blocks versus Scripts".
Note that you cannot do (de)composition and casing based solely on the decomposition, combining, lower, upper, and title fields; you will need also the "compexcl()", and "casespec()" functions.
use Unicode::UCD 'charblock';
my $charblock = charblock(0x41);
my $charblock = charblock(1234);
my $charblock = charblock(0x263a);
my $charblock = charblock("U+263a");
my $range = charblock('Armenian');
With a "code point argument" charblock() returns the block the code point belongs to, e.g.
Basic Latin. The old-style block name is returned (see "Old-style versus new-style block names"). If the code point is unassigned, this returns the block it would belong to if it were assigned.
See also "Blocks versus Scripts".
If supplied with an argument that can't be a code point, charblock() tries to do the opposite and interpret the argument as an old-style block name. The return value is a range set with one range: an anonymous list with a single element that consists of another anonymous list whose first element is the first code point in the block, and whose second (and final) element is the final code point in the block. (The extra list consisting of just one element is so that the same program logic can be used to handle both this return, and the return from "charscript()" which can have multiple ranges.) You can test whether a code point is in a range using the "charinrange()" function. If the argument is not a known block,
undef is returned.
use Unicode::UCD 'charscript';
my $charscript = charscript(0x41);
my $charscript = charscript(1234);
my $charscript = charscript("U+263a");
my $range = charscript('Thai');
With a "code point argument" charscript() returns the script the code point belongs to, e.g.
Han. If the code point is unassigned, it returns
If supplied with an argument that can't be a code point, charscript() tries to do the opposite and interpret the argument as a script name. The return value is a range set: an anonymous list of lists that contain start-of-range, end-of-range code point pairs. You can test whether a code point is in a range set using the "charinrange()" function. If the argument is not a known script,
undef is returned.
See also "Blocks versus Scripts".
use Unicode::UCD 'charblocks';
my $charblocks = charblocks();
charblocks() returns a reference to a hash with the known block names as the keys, and the code point ranges (see "charblock()") as the values.
The names are in the old-style (see "Old-style versus new-style block names").
prop_invmap("block") can be used to get this same data in a different type of data structure.
See also "Blocks versus Scripts".
use Unicode::UCD 'charscripts';
my $charscripts = charscripts();
charscripts() returns a reference to a hash with the known script names as the keys, and the code point ranges (see "charscript()") as the values.
prop_invmap("script") can be used to get this same data in a different type of data structure.
See also "Blocks versus Scripts".
In addition to using the
\p{Blk=...} and
\P{Blk=...} constructs, you can also test whether a code point is in the range as returned by "charblock()" and "charscript()" or as the values of the hash returned by "charblocks()" and "charscripts()" by using charinrange():
use Unicode::UCD qw(charscript charinrange);
$range = charscript('Hiragana');
print "looks like hiragana\n" if charinrange($range, $codepoint);
use Unicode::UCD 'general_categories';
my $categories = general_categories();
This returns a reference to a hash which has short general category names (such as
S) as keys and long names (such as
Symbol) as values. The hash is reversible in case you need to go from the long names to the short names. The general category is the one returned from "charinfo()" under the
category key.
The "prop_value_aliases()" function can be used to get all the synonyms of the category name.
use Unicode::UCD 'bidi_types';
my $categories = bidi_types();
This returns a reference to a hash which has the short bidi (bidirectional) type names (such as
R) as keys and long names (such as
Right-to-Left) as values. The hash is reversible in case you need to go from the long names to the short names. The bidi type is the one returned from "charinfo()" under the
bidi key. For the exact meaning of the various bidi classes the Unicode TR9 is recommended reading: http://www.unicode.org/reports/tr9/ (as of Unicode 5.0.0)
The "prop_value_aliases()" function can be used to get all the synonyms of the bidi type name.
use Unicode::UCD 'compexcl';
my $compexcl = compexcl(0x09dc);
This routine is included for backwards compatibility, but as of Perl 5.12, for most purposes it is probably more convenient to use one of the following instead:
my $compexcl = chr(0x09dc) =~ /\p{Comp_Ex};
my $compexcl = chr(0x09dc) =~ /\p{Full_Composition_Exclusion};
or even
my $compexcl = chr(0x09dc) =~ /\p{CE};
my $compexcl = chr(0x09dc) =~ /\p{Composition_Exclusion};
The first two forms return true if the "code point argument" should not be produced by composition normalization. For the final two forms to return true, it is additionally required that this fact not otherwise be determinable from the Unicode data base.
This routine behaves identically to the final two forms. That is, it does not return true if the code point has a decomposition consisting of another single code point, nor if its decomposition starts with a code point whose combining class is non-zero. Code points that meet either of these conditions should also not be produced by composition normalization, which is probably why you should use the
Full_Composition_Exclusion property instead, as shown above.
The routine returns false otherwise.
use Unicode::UCD 'casefold';
my $casefold = casefold(0xDF);
if (defined $casefold) {
my @full_fold_hex = split / /, $casefold->{'full'};
my $full_fold_string =
join "", map {chr(hex($_))} @full_fold_hex;
my @turkic_fold_hex =
split / /, ($casefold->{'turkic'} ne "")
? $casefold->{'turkic'}
: $casefold->{'full'};
my $turkic_fold_string =
join "", map {chr(hex($_))} @turkic_fold_hex;
if (defined $casefold && $casefold->{'simple'} ne "") {
my $simple_fold_hex = $casefold->{'simple'};
my $simple_fold_string = chr(hex($simple_fold_hex));
This returns the (almost) locale-independent case folding of the character specified by the "code point argument".
If there is no case folding for that code point,
undef is returned.
If there is a case folding for that code point, a reference to a hash with the following fields is returned:
- code
the input "code point argument" expressed in hexadecimal, with leading zeros added if necessary to make it contain at least four hexdigits
- full
one or more codes (separated by spaces) that, taken in order, give the code points for the case folding for code. Each has at least four hexdigits.
- simple
is empty, or is exactly one code with at least four hexdigits which can be used as an alternative case folding when the calling program cannot cope with the fold being a sequence of multiple code points. If full is just one code point, then simple equals full. If there is no single code point folding defined for code, then simple is the empty string. Otherwise, it is an inferior, but still better-than-nothing alternative folding to full.
- mapping
is the same as simple if simple is not empty, and it is the same as full otherwise. It can be considered to be the simplest possible folding for code. It is defined primarily for backwards compatibility.
- status
common) if the best possible fold is a single code point (simple equals full equals mapping). It is
Sif there are distinct folds, simple and full (mapping equals simple). And it is
Fif there is only a full fold (mapping equals full; simple is empty). Note that this describes the contents of mapping. It is defined primarily for backwards compatibility.
On versions 3.1 and earlier of Unicode, status can also be
Iwhich is the same as
Cbut is a special case for dotted uppercase I and dotless lowercase i:
- turkic
contains any special folding for Turkic languages. For versions of Unicode starting with 3.2, this field is empty unless code has a different folding in Turkic languages, in which case it is one or more codes (separated by spaces) that, taken in order, give the code points for the case folding for code in those languages. Each code has at least four hexdigits. Note that this folding does not maintain canonical equivalence without additional processing.
For versions of Unicode 3.1 and earlier, this field is empty unless there is a special folding for Turkic languages, in which case status is
I, and mapping, full, simple, and turkic are all equal.
Programs that want complete generality and the best folding results should use the folding contained in the full field. But note that the fold for some code points will be a sequence of multiple code points.
Programs that can't cope with the fold mapping being multiple code points can use the folding contained in the simple field, with the loss of some generality. In Unicode 5.1, about 7% of the defined foldings have no single code point folding.
The mapping and status fields are provided for backwards compatibility for existing programs. They contain the same values as in previous versions of this function.
Locale is not completely independent. The turkic field contains results to use when the locale is a Turkic language.
For more information about case mappings see http://www.unicode.org/unicode/reports/tr21
use Unicode::UCD 'casespec';
my $casespec = casespec(0xFB00);
This returns the potentially locale-dependent case mappings of the "code point argument". The mappings may be longer than a single code point (which the basic Unicode case mappings as returned by "charinfo()" never are).
If there are no case mappings for the "code point argument", or if all three possible mappings (lower, title and upper) result in single code points and are locale independent and unconditional,
undef is returned (which means that the case mappings, if any, for the code point are those returned by "charinfo()").
Otherwise, a reference to a hash giving the mappings (or a reference to a hash of such hashes, explained below) is returned with the following keys and their meanings:
The keys in the bottom layer hash with the meanings of their values are:
- code
the input "code point argument" expressed in hexadecimal, with leading zeros added if necessary to make it contain at least four hexdigits
- lower
one or more codes (separated by spaces) that, taken in order, give the code points for the lower case of code. Each has at least four hexdigits.
- title
one or more codes (separated by spaces) that, taken in order, give the code points for the title case of code. Each has at least four hexdigits.
- upper
one or more codes (separated by spaces) that, taken in order, give the code points for the upper case of code. Each has at least four hexdigits.
- condition
the conditions for the mappings to be valid. If
undef, the mappings are always valid. When defined, this field is a list of conditions, all of which must be true for the mappings to be valid. The list consists of one or more locales (see below) and/or contexts (explained in the next paragraph), separated by spaces. (Other than as used to separate elements, spaces are to be ignored.) Case distinctions in the condition list are not significant. Conditions preceded by "NON_" represent the negation of the condition.
A context is one of those defined in the Unicode standard. For Unicode 5.1, they are defined in Section 3.13
Default Case Operationsavailable at http://www.unicode.org/versions/Unicode5.1.0/. These are for context-sensitive casing.
The hash described above is returned for locale-independent casing, where at least one of the mappings has length longer than one. If
undef is returned, the code point may have mappings, but if so, all are length one, and are returned by "charinfo()". Note that when this function does return a value, it will be for the complete set of mappings for a code point, even those whose length is one.
If there are additional casing rules that apply only in certain locales, an additional key for each will be defined in the returned hash. Each such key will be its locale name, defined as a 2-letter ISO 3166 country code, possibly followed by a "_" and a 2-letter ISO language code (possibly followed by a "_" and a variant code). You can find the lists of all possible locales, see Locale::Country and Locale::Language. (In Unicode 6.0, the only locales returned by this function are
tr, and
Each locale key is a reference to a hash that has the form above, and gives the casing rules for that particular locale, which take precedence over the locale-independent ones when in that locale.
If the only casing for a code point is locale-dependent, then the returned hash will not have any of the base keys, like
upper, etc., but will contain only locale keys.
For more information about case mappings see http://www.unicode.org/unicode/reports/tr21/
use Unicode::UCD 'namedseq';
my $namedseq = namedseq("KATAKANA LETTER AINU P");
my @namedseq = namedseq("KATAKANA LETTER AINU P");
my %namedseq = namedseq();
If used with a single argument in a scalar context, returns the string consisting of the code points of the named sequence, or
undef if no named sequence by that name exists. If used with a single argument in a list context, it returns the list of the ordinals of the code points. If used with no arguments in a list context, returns a hash with the names of the named sequences as the keys and the named sequences as strings as the values. Otherwise, it returns
undef or an empty list depending on the context.
This function only operates on officially approved (not provisional) named sequences.
Note that as of Perl 5.14,
\N{KATAKANA LETTER AINU P} will insert the named sequence into double-quoted strings, and
charnames::string_vianame("KATAKANA LETTER AINU P") will return the same string this function does, but will also operate on character names that aren't named sequences, without you having to know which are which. See charnames.
use Unicode::UCD 'num';
my $val = num("123");
my $one_quarter = num("\N{VULGAR FRACTION 1/4}");
num returns the numeric value of the input Unicode string; or
undef if it doesn't think the entire string has a completely valid, safe numeric value.
If the string is just one character in length, the Unicode numeric value is returned if it has one, or
undef otherwise. Note that this need not be a whole number.
num("\N{TIBETAN DIGIT HALF ZERO}"), for example returns -0.5.
If the string is more than one character,
undef is returned unless all its characters are decimal digits (that is, they would match
\d+), from the same script. For example if you have an ASCII '0' and a Bengali '3', mixed together, they aren't considered a valid number, and
undef is returned. A further restriction is that the digits all have to be of the same form. A half-width digit mixed with a full-width one will return
undef. The Arabic script has two sets of digits;
num will return
undef unless all the digits in the string come from the same set.
num errs on the side of safety, and there may be valid strings of decimal digits that it doesn't recognize. Note that Unicode defines a number of "digit" characters that aren't "decimal digit" characters. "Decimal digits" have the property that they have a positional value, i.e., there is a units position, a 10's position, a 100's, etc, AND they are arranged in Unicode in blocks of 10 contiguous code points. The Chinese digits, for example, are not in such a contiguous block, and so Unicode doesn't view them as decimal digits, but merely digits, and so
\d will not match them. A single-character string containing one of these digits will have its decimal value returned by
num, but any longer string containing only these digits will return
Strings of multiple sub- and superscripts are not recognized as numbers. You can use either of the compatibility decompositions in Unicode::Normalize to change these into digits, and then call
num on the result.
use Unicode::UCD 'prop_aliases';
my ($short_name, $full_name, @other_names) = prop_aliases("space");
my $same_full_name = prop_aliases("Space"); # Scalar context
my ($same_short_name) = prop_aliases("Space"); # gets 0th element
print "The full name is $full_name\n";
print "The short name is $short_name\n";
print "The other aliases are: ", join(", ", @other_names), "\n";
The full name is White_Space
The short name is WSpace
The other aliases are: Space
Most Unicode properties have several synonymous names. Typically, there is at least a short name, convenient to type, and a long name that more fully describes the property, and hence is more easily understood.
If you know one name for a Unicode property, you can use
prop_aliases to find either the long name (when called in scalar context), or a list of all of the names, somewhat ordered so that the short name is in the 0th element, the long name in the next element, and any other synonyms are in the remaining elements, in no particular order.
The long name is returned in a form nicely capitalized, suitable for printing.
The input parameter name is loosely matched, which means that white space, hyphens, and underscores are ignored (except for the trailing underscore in the old_form grandfathered-in
"L_", which is better written as
"LC", and both of which mean
General_Category=Cased Letter).
If the name is unknown,
undef is returned (or an empty list in list context). Note that Perl typically recognizes property names in regular expressions with an optional
"Is_" (with or without the underscore) prefixed to them, such as
\p{isgc=punct}. This function does not recognize those in the input, returning
undef. Nor are they included in the output as possible synonyms.
prop_aliases does know about the Perl extensions to Unicode properties, such as
Any and
XPosixAlpha, and the single form equivalents to Unicode properties such as
In_Greek, and
Is_Greek. The final example demonstrates that the
"Is_" prefix is recognized for these extensions; it is needed to resolve ambiguities. For example,
prop_aliases('lc') returns the list
(lc, Lowercase_Mapping), but
prop_aliases('islc') returns
(Is_LC, Cased_Letter). This is because
islc is a Perl extension which is short for
General_Category=Cased Letter. The lists returned for the Perl extensions will not include the
"Is_" prefix (whether or not the input had it) unless needed to resolve ambiguities, as shown in the
"islc" example, where the returned list had one element containing
"Is_", and the other without.
It is also possible for the reverse to happen:
prop_aliases('isc') returns the list
(isc, ISO_Comment); whereas
prop_aliases('c') returns
(C, Other) (the latter being a Perl extension meaning
General_Category=Other. "Properties accessible through Unicode::UCD" in perluniprops lists the available forms, including which ones are discouraged from use.
Those discouraged forms are accepted as input to
prop_aliases, but are not returned in the lists.
prop_aliases('isL&') and
prop_aliases('isL_'), which are old synonyms for
"Is_LC" and should not be used in new code, are examples of this. These both return
(Is_LC, Cased_Letter). Thus this function allows you to take a discourarged form, and find its acceptable alternatives. The same goes with single-form Block property equivalences. Only the forms that begin with
"In_" are not discouraged; if you pass
prop_aliases a discouraged form, you will get back the equivalent ones that begin with
"In_". It will otherwise look like a new-style block name (see. "Old-style versus new-style block names").
prop_aliases does not know about any user-defined properties, and will return
undef if called with one of those. Likewise for Perl internal properties, with the exception of "Perl_Decimal_Digit" which it does know about (and which is documented below in "prop_invmap()").
use Unicode::UCD 'prop_value_aliases';
my ($short_name, $full_name, @other_names)
= prop_value_aliases("Gc", "Punct");
my $same_full_name = prop_value_aliases("Gc", "P"); # Scalar cntxt
my ($same_short_name) = prop_value_aliases("Gc", "P"); # gets 0th
# element
print "The full name is $full_name\n";
print "The short name is $short_name\n";
print "The other aliases are: ", join(", ", @other_names), "\n";
The full name is Punctuation
The short name is P
The other aliases are: Punct
Some Unicode properties have a restricted set of legal values. For example, all binary properties are restricted to just
true or
false; and there are only a few dozen possible General Categories.
For such properties, there are usually several synonyms for each possible value. For example, in binary properties, truth can be represented by any of the strings "Y", "Yes", "T", or "True"; and the General Category "Punctuation" by that string, or "Punct", or simply "P".
Like property names, there is typically at least a short name for each such property-value, and a long name. If you know any name of the property-value, you can use
prop_value_aliases() to get the long name (when called in scalar context), or a list of all the names, with the short name in the 0th element, the long name in the next element, and any other synonyms in the remaining elements, in no particular order, except that any all-numeric synonyms will be last.
The long name is returned in a form nicely capitalized, suitable for printing.
Case, white space, hyphens, and underscores are ignored in the input parameters (except for the trailing underscore in the old-form grandfathered-in general category property value
"L_", which is better written as
If either name is unknown,
undef is returned. Note that Perl typically recognizes property names in regular expressions with an optional
"Is_" (with or without the underscore) prefixed to them, such as
\p{isgc=punct}. This function does not recognize those in the property parameter, returning
If called with a property that doesn't have synonyms for its values, it returns the input value, possibly normalized with capitalization and underscores.
For the block property, new-style block names are returned (see "Old-style versus new-style block names").
To find the synonyms for single-forms, such as
\p{Any}, use "prop_aliases()" instead.
prop_value_aliases does not know about any user-defined properties, and will return
undef if called with one of those.
prop_invlist returns an inversion list (described below) that defines all the code points for the binary Unicode property (or "property=value" pair) given by the input parameter string:
use feature 'say';
use Unicode::UCD 'prop_invlist';
say join ", ", prop_invlist("Any");
0, 1114112
An empty list is returned if the input is unknown; the number of elements in the list is returned if called in scalar context.
perluniprops gives the list of properties that this function accepts, as well as all the possible forms for them (including with the optional "Is_" prefixes). (Except this function doesn't accept any Perl-internal properties, some of which are listed there.) This function uses the same loose or tighter matching rules for resolving the input property's name as is done for regular expressions. These are also specified in perluniprops. Examples of using the "property=value" form are:
say join ", ", prop_invlist("Script=Shavian");
66640, 66688
say join ", ", prop_invlist("ASCII_Hex_Digit=No");
0, 48, 58, 65, 71, 97, 103
say join ", ", prop_invlist("ASCII_Hex_Digit=Yes");
48, 58, 65, 71, 97, 103
Inversion lists are a compact way of specifying Unicode property-value definitions. The 0th item in the list is the lowest code point that has the property-value. The next item (item [1]) is the lowest code point beyond that one that does NOT have the property-value. And the next item beyond that ([2]) is the lowest code point beyond that one that does have the property-value, and so on. Put another way, each element in the list gives the beginning of a range that has the property-value (for even numbered elements), or doesn't have the property-value (for odd numbered elements). The name for this data structure stems from the fact that each element in the list toggles (or inverts) whether the corresponding range is or isn't on the list.
In the final example above, the first ASCII Hex digit is code point 48, the character "0", and all code points from it through 57 (a "9") are ASCII hex digits. Code points 58 through 64 aren't, but 65 (an "A") through 70 (an "F") are, as are 97 ("a") through 102 ("f"). 103 starts a range of code points that aren't ASCII hex digits. That range extends to infinity, which on your computer can be found in the variable
$Unicode::UCD::MAX_CP. (This variable is as close to infinity as Perl can get on your platform, and may be too high for some operations to work; you may wish to use a smaller number for your purposes.)
Note that the inversion lists returned by this function can possibly include non-Unicode code points, that is anything above 0x10FFFF. This is in contrast to Perl regular expression matches on those code points, in which a non-Unicode code point always fails to match. For example, both of these have the same result:
chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Fails.
chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Fails!
And both raise a warning that a Unicode property is being used on a non-Unicode code point. It is arguable as to which is the correct thing to do here. This function has chosen the way opposite to the Perl regular expression behavior. This allows you to easily flip to to the Perl regular expression way (for you to go in the other direction would be far harder). Simply add 0x110000 at the end of the non-empty returned list if it isn't already that value; and pop that value if it is; like:
my @list = prop_invlist("foo");
if (@list) {
if ($list[-1] == 0x110000) {
pop @list; # Defeat the turning on for above Unicode
else {
push @list, 0x110000; # Turn off for above Unicode
It is a simple matter to expand out an inversion list to a full list of all code points that have the property-value:
my @invlist = prop_invlist($property_name);
die "empty" unless @invlist;
my @full_list;
for (my $i = 0; $i < @invlist; $i += 2) {
my $upper = ($i + 1) < @invlist
? $invlist[$i+1] - 1 # In range
: $Unicode::UCD::MAX_CP; # To infinity. You may want
# to stop much much earlier;
# going this high may expose
# perl deficiencies with very
# large numbers.
for my $j ($invlist[$i] .. $upper) {
push @full_list, $j;
prop_invlist does not know about any user-defined nor Perl internal-only properties, and will return
undef if called with one of those.
use Unicode::UCD 'prop_invmap';
my ($list_ref, $map_ref, $format, $missing)
= prop_invmap("General Category");
prop_invmap is used to get the complete mapping definition for a property, in the form of an inversion map. An inversion map consists of two parallel arrays. One is an ordered list of code points that mark range beginnings, and the other gives the value (or mapping) that all code points in the corresponding range have.
prop_invmap is called with the name of the desired property. The name is loosely matched, meaning that differences in case, white-space, hyphens, and underscores are not meaningful (except for the trailing underscore in the old-form grandfathered-in property
"L_", which is better written as
"LC", or even better,
Many Unicode properties have more than one name (or alias).
prop_invmap understands all of these, including Perl extensions to them. Ambiguities are resolved as described above for "prop_aliases()". The Perl internal property "Perl_Decimal_Digit, described below, is also accepted.
undef is returned if the property name is unknown. See "Properties accessible through Unicode::UCD" in perluniprops for the properties acceptable as inputs to this function.
It is a fatal error to call this function except in list context.
In addition to the the two arrays that form the inversion map,
prop_invmap returns two other values; one is a scalar that gives some details as to the format of the entries of the map array; the other is used for specialized purposes, described at the end of this section.
This means that
prop_invmap returns a 4 element list. For example,
my ($blocks_ranges_ref, $blocks_maps_ref, $format, $default)
= prop_invmap("Block");
In this call, the two arrays will be populated as shown below (for Unicode 6.0):
Index @blocks_ranges @blocks_maps
0 0x0000 Basic Latin
1 0x0080 Latin-1 Supplement
2 0x0100 Latin Extended-A
3 0x0180 Latin Extended-B
4 0x0250 IPA Extensions
5 0x02B0 Spacing Modifier Letters
6 0x0300 Combining Diacritical Marks
7 0x0370 Greek and Coptic
8 0x0400 Cyrillic
233 0x2B820 No_Block
234 0x2F800 CJK Compatibility Ideographs Supplement
235 0x2FA20 No_Block
236 0xE0000 Tags
237 0xE0080 No_Block
238 0xE0100 Variation Selectors Supplement
239 0xE01F0 No_Block
240 0xF0000 Supplementary Private Use Area-A
241 0x100000 Supplementary Private Use Area-B
242 0x110000 No_Block
The first line (with Index [0]) means that the value for code point 0 is "Basic Latin". The entry "0x0080" in the @blocks_ranges column in the second line means that the value from the first line, "Basic Latin", extends to all code points in the range from 0 up to but not including 0x0080, that is, through 255. In other words, the code points from 0 to 255 are all in the "Basic Latin" block. Similarly, all code points in the range from 0x0080 up to (but not including) 0x0100 are in the block named "Latin-1 Supplement", etc. (Notice that the return is the old-style block names; see "Old-style versus new-style block names").
The final line (with Index [242]) means that the value for all code points above the legal Unicode maximum code point have the value "No_Block", which is the term Unicode uses for a non-existing block.
The arrays completely specify the mappings for all possible code points. The final element in an inversion map returned by this function will always be for the range that consists of all the code points that aren't legal Unicode, but that are expressible on the platform. (That is, it starts with code point 0x110000, the first code point above the legal Unicode maximum, and extends to infinity.) The value for that range will be the same that any typical unassigned code point has for the specified property. (Certain unassigned code points are not "typical"; for example the non-character code points, or those in blocks that are to be written right-to-left. The above-Unicode range's value is not based on these atypical code points.) It could be argued that, instead of treating these as unassigned Unicode code points, the value for this range should be
undef. If you wish, you can change the returned arrays accordingly.
The maps are almost always simple scalars that should be interpreted as-is. These values are those given in the Unicode-supplied data files, which may be inconsistent as to capitalization and as to which synonym for a property-value is given. The results may be normalized by using the "prop_value_aliases()" function.
There are exceptions to the simple scalar maps. Some properties have some elements in their map list that are themselves lists of scalars; and some special strings are returned that are not to be interpreted as-is. Element [2] (placed into
$format in the example above) of the returned four element list tells you if the map has any of these special elements, as follows:
means all the elements of the map array are simple scalars, with no special elements. Almost all properties are like this, like the
blockexample above.
means that some of the map array elements have the form given by
s, and the rest are lists of scalars. For example, here is a portion of the output of calling
prop_invmap() with the "Script Extensions" property:
@scripts_ranges @scripts_maps ... 0x0953 Deva 0x0964 [ Beng Deva Guru Orya ] 0x0966 Deva 0x0970 Common
Here, the code points 0x964 and 0x965 are used in the Bengali, Devanagari, Gurmukhi, and Oriya scripts.
means that all the elements of the map array are either rational numbers or the string
"NaN", meaning "Not a Number". A rational number is either an integer, or two integers separated by a solidus (
"/"). The second integer represents the denominator of the division implied by the solidus, and is guaranteed not to be 0. If you want to convert them to scalar numbers, you can use something like this:
my ($invlist_ref, $invmap_ref, $format) = prop_invmap($property); if ($format && $format eq "r") { map { $_ = eval $_ } @$invmap_ref; }
Here's some entries from the output of the property "Nv", which has format
@numerics_ranges @numerics_maps Note 0x00 "NaN" 0x30 0 DIGIT 0 0x31 1 0x32 2 ... 0x37 7 0x38 8 0x39 9 DIGIT 9 0x3A "NaN" 0xB2 2 SUPERSCRIPT 2 0xB3 3 SUPERSCRIPT 2 0xB4 "NaN" 0xB9 1 SUPERSCRIPT 1 0xBA "NaN" 0xBC 1/4 VULGAR FRACTION 1/4 0xBD 1/2 VULGAR FRACTION 1/2 0xBE 3/4 VULGAR FRACTION 3/4 0xBF "NaN" 0x660 0 ARABIC-INDIC DIGIT ZERO
is like
sin that all the map array elements are scalars, but some of them are the special string
"<code point>", meaning that the map of each code point in the corresponding range in the inversion list is the code point itself. For example, in:
my ($uppers_ranges_ref, $uppers_maps_ref, $format) = prop_invmap("Simple_Uppercase_Mapping");
the returned arrays look like this:
@$uppers_ranges_ref @$uppers_maps_ref Note 0 "<code point>" 97 65 'a' maps to 'A' 98 66 'b' => 'B' 99 67 'c' => 'C' ... 120 88 'x' => 'X' 121 89 'y' => 'Y' 122 90 'z' => 'Z' 123 "<code point>" 181 924 MICRO SIGN => Greek Cap MU 182 "<code point>" ...
The first line means that the uppercase of code point 0 is 0; the uppercase of code point 1 is 1; ... of code point 96 is 96. Without the
"<code_point>"notation, every code point would have to have an entry. This would mean that the arrays would each have more than a million entries to list just the legal Unicode code points!
means that some of the map array elements have the form given by
c, and the rest are ordered lists of code points. For example, in:
my ($uppers_ranges_ref, $uppers_maps_ref, $format) = prop_invmap("Uppercase_Mapping");
the returned arrays look like this:
@$uppers_ranges_ref @$uppers_maps_ref 0 "<code point>" 97 65 ... 122 90 123 "<code point>" 181 924 182 "<code point>" ... 0x0149 [ 0x02BC 0x004E ] 0x014A "<code point>" 0x014B 0x014A ...
This is the full Uppercase_Mapping property (as opposed to the Simple_Uppercase_Mapping given in the example for format
"c"). The only difference between the two in the ranges shown is that the code point at 0x0149 (LATIN SMALL LETTER N PRECEDED BY APOSTROPHE) maps to a string of two characters, 0x02BC (MODIFIER LETTER APOSTROPHE) followed by 0x004E (LATIN CAPITAL LETTER N).
means that some of the map array elements have the forms given by
cl, and the rest are the empty string. The property
NFKC_Casefoldhas this form. An example slice is:
@$ranges_ref @$maps_ref Note ... 0x00AA 0x0061 FEMININE ORDINAL INDICATOR => 'a' 0x00AB <code point> 0x00AD SOFT HYPHEN => "" 0x00AE <code point> 0x00AF [ 0x0020, 0x0304 ] MACRON => SPACE . COMBINING MACRON 0x00B0 <code point> ...
means the Name property. All the elements of the map array are simple scalars, but some of them contain special strings that require more work to get the actual name.
Entries such as:
CJK UNIFIED IDEOGRAPH-<code point>
mean that the name for the code point is "CJK UNIFIED IDEOGRAPH-" with the code point (expressed in hexadecimal) appended to it, like "CJK UNIFIED IDEOGRAPH-3403" (similarly for
CJK COMPATIBILITY IDEOGRAPH-<code point>).
Also, entries like
<hangul syllable>
means that the name is algorithmically calculated. This is easily done by the function "charnames::viacode(code)" in charnames.
Note that for control characters (
Gc=cc), Unicode's data files have the string "
<control>", but the real name of each of these characters is the empty string. This function returns that real name, the empty string.
means the Decomposition_Mapping property. This property is like
clproperties, except it has an additional entry type:
<hangul syllable>
for those code points whose decomposition is algorithmically calculated. (The
nformat has this same entry.) These can be generated via the function Unicode::Normalize::NFD().
Note that the mapping is the one that is specified in the Unicode data files, and to get the final decomposition, it may need to be applied recursively.
A binary search can be used to quickly find a code point in the inversion list, and hence its corresponding mapping.
The final element (index [3], assigned to
$default in the "block" example) in the four element list returned by this function may be useful for applications that wish to convert the returned inversion map data structure into some other, such as a hash. It gives the mapping that most code points map to under the property. If you establish the convention that any code point not explicitly listed in your data structure maps to this value, you can potentially make your data structure much smaller. As you construct your data structure from the one returned by this function, simply ignore those ranges that map to this value, generally called the "default" value. For example, to convert to the data structure searchable by "charinrange()", you can follow this recipe:
my ($list_ref, $map_ref, $format, $missing) = prop_invmap($property);
my @range_list;
for my $i (0 .. @$list_ref - 2) {
next if $map_ref->[$i] eq $missing;
push @range_list, [ $list_ref->[$i],
print charinrange(\@range_list, $code_point), "\n";
With this,
charinrange() will return
undef if its input code point maps to
$missing. You can avoid this by omitting the
next statement, and adding a line after the loop to handle the final element of the inversion map.
One internal Perl property is accessible by this function. "Perl_Decimal_Digit" returns an inversion map in which all the Unicode decimal digits map to their numeric values, and everything else to the empty string, like so:
@digits @values
0x0000 ""
0x0030 0
0x0031 1
0x0032 2
0x0033 3
0x0034 4
0x0035 5
0x0036 6
0x0037 7
0x0038 8
0x0039 9
0x003A ""
0x0660 0
0x0661 1
Note that the inversion maps returned for the
Case_Folding and
Simple_Case_Folding properties do not include the Turkic-locale mappings. Use "casefold()" for these.
Name_Alias property is potentially undergoing signficant revision by Unicode at the time of this writing. The format of the values returned for it may change substantially in future Unicode versions.
prop_invmap does not know about any user-defined properties, and will return
undef if called with one of those.
This returns the version of the Unicode Character Database, in other words, the version of the Unicode standard the database implements. The version is a string of numbers delimited by dots (
Blocks versus Scripts
The difference between a block and a script is that scripts are closer to the linguistic notion of a set of code points required to present languages, while block is more of an artifact of the Unicode code point numbering and separation into blocks of (mostly) 256 code points.
For example the Latin script is spread over several blocks, such as
Basic Latin,
Latin 1 Supplement,
Latin Extended-A, and
Latin Extended-B. On the other hand, the Latin script does not contain all the characters of the
Basic Latin block (also known as ASCII): it includes only the letters, and not, for example, the digits or the punctuation.
For blocks see http://www.unicode.org/Public/UNIDATA/Blocks.txt
For scripts see UTR #24: http://www.unicode.org/unicode/reports/tr24/
Matching Scripts and Blocks
Scripts are matched with the regular-expression construct
\p{...} (e.g.
\p{Tibetan} matches characters of the Tibetan script), while
\p{Blk=...} is used for blocks (e.g.
\p{Blk=Tibetan} matches any of the 256 code points in the Tibetan block).
Old-style versus new-style block names
Unicode publishes the names of blocks in two different styles, though the two are equivalent under Unicode's loose matching rules.
The original style uses blanks and hyphens in the block names (except for
No_Block), like so:
Miscellaneous Mathematical Symbols-B
The newer style replaces these with underscores, like this:
This newer style is consistent with the values of other Unicode properties. To preserve backward compatibility, all the functions in Unicode::UCD that return block names (except one) return the old-style ones. That one function, "prop_value_aliases()" can be used to convert from old-style to new-style:
my $new_style = prop_values_aliases("block", $old_style);
Perl also has single-form extensions that refer to blocks,
In_Cyrillic, meaning
Block=Cyrillic. These have always been written in the new style.
To convert from new-style to old-style, follow this recipe:
$old_style = charblock((prop_invlist("block=$new_style"))[0]);
(which finds the range of code points in the block using
prop_invlist, gets the lower end of the range (0th element) and then looks up the old name for its block using
Does not yet support EBCDIC platforms.
Jarkko Hietaniemi. Now maintained by perl5 porters.


text:
Word Scramble! Yes, Word Scramble has been added to SA....lol And you can win/lose points playing.
Rules are simple:
Cost 5 points to play.
You have 30 seconds to guess the right word. You win 1 point for every second left on the clock!
That's it! Enjoy!! I'll add the link to one of the navbars here in a minute. It's the WS link in the top navbar.
Here's the link!
Also, don't forget Sudoku that we have here also to help you pass the time....lol


text:
'Assault weapon' not easily definedBy TIM BUCKLAND
New Hampshire Union Leader
January 26. 2013 10:52PM
What is an assault weapon?
It turns out that simple, five-word question has no simple answer, despite the insistence of a New England College poll.
In an NEC poll released last week, 72 percent of respondents in New Hampshire said they would support a ban on assault weapons, but pollsters acknowledged that they did not specifically define what they meant by the term.
"It is a broad poll question, but we are confident people know and understand the definition of an assault weapon," NEC spokesman Scott Spradling said.
The Union Leader decided to ask people, including state political leaders, to define "assault weapon."
Here are their responses:
State Senate President Peter Bragdon, a Republican: "I don't think there's a definition. The feds have defined something, which I don't know, but from what I talk to from gun owners, there is no standard term called assault weapon. So I don't think people know what an assault weapon is, technically. They may have an idea, but there's no definition I know of."
Eva Blackman of Manchester: "It's those big machine guns."
State Democratic Party Chairman Ray Buckley: "It's generally a gun that's more for warfare than for hunting. It does multiple rounds per second. That's generally what I would think would be an assault weapon. It's not appropriate for hunting or defending one's home, but is designed for warfare or mass killings."
Andrew Moses of Manchester: "An assault weapon is something with more bullets. A bigger gun."
State Republican Party Chairman Jennifer Horn: "I don't think I could answer that question for somebody, because I would get into the conversation between the difference between an automatic an a semiautomatic. You could call any weapon an assault weapon. It just doesn't really mean anything until you start talking about the differences between automatic and semiautomatic."
Stephanie Labracque of Manchester: "I don't know."
Andrew Hemingway, a conservative activist who on Saturday lost an election to serve as chairman of the state Republican Party: "I think that it's defined in a number of different ways. I think President Obama has a definition of an assault weapon, which is probably a lot broader than the definition given by proponents and defenders of the Second Amendment. The actual definition of assault weapon? There isn't an actual, defined definition of it. It's more of a term that is used for a political position."
Tom Blackman of Manchester: "It's a weapon that shoots rapid fire."
U.S. Rep. Carol Shea-Porter, D-N.H.: "I support the definition in the Assault Weapons Ban Act of 2013."
From that bill, which was introduced by U.S. Sen. Dianne Feinstein, D-Calif.: "The term 'semiautomatic assault weapon' means any of the following, regardless of country of manufacture or caliber of ammunition accepted: A semiautomatic rifle that has the capacity to accept a detachable magazine and any 1 of the following: a pistol grip, a forward grip, a folding, telescoping, or detachable stock, a grenade launcher or rocket launcher, a barrel shroud (or) a threaded barrel."
The text of the bill, which contains a list of weapons that would be banned, is available at Feinstein's website: feinstein.senate.gov/public/index.cfm/assault-weapons.
The question was also posed on Friday and Saturday to the offices of Gov. Maggie Hassan, U.S. Sens. Kelly Ayotte and Jeanne Shaheen and U.S. Rep. Ann McLane Kuster. None of them responded.


text:
Executive Summary:
New DBAs get answers to basic Structured Query Language (SQL) questions. This month's column explores the difference between FILLFACTOR = 0 and FILLFACTOR = 100; ISNULL and NULLIF; a clustered index and a nonclustered index; % used as a wildcard and % used as an operator; and TRUNCATE and DELETE.
This month I've been hearing from new DBAs who've asked about the difference between FILLFACTOR = 0 and FILLFACTOR = 100 when creating or rebuilding an index and the difference between ISNULL and NULLIF (and how they each compare with CASE). You also want to know how % used as a wildcard differs from % used as an operator. I'll answer these top questions on the basics and give you some sample scripts. If you can't wait a month to catch up on SQL Server tips and information, check out my blog at www.sqlmag.com/go/SQLskills.
Q: What's the difference between using FILLFACTOR = 0 and FILLFACTOR = 100 when creating or rebuilding an index?
A: FILLFACTOR = 0 and FILLFACTOR = 100 are the same in all respects. FILLFACTOR, a percentage measurement, determines how much data is filled on the leaf level of each index page when an index is created or rebuilt. The minimum value for FILLFACTOR is 0, and the maximum value is 100. The default is FILLFACTOR = 0. Once modified from 0 to any other value, the FILLFACTOR value can't be set again. Setting FILLFACTOR to 100 has the same effect as setting it to the default of 0, because both FILLFACTOR = 0 and FILLFACTOR = 100 tell SQL Server to completely fill the leaf page. No space is unused. Using a value between 1 and 99 always leaves a percentage of the leaf page space unused. For example, FILLFACTOR = 80 leaves 20 percent of the space unused.
Q: What's the difference between NULLIF and ISNULL?
A: The difference between NULLIF and ISNULL is that NULLIF returns NULL, whereas ISNULL replaces NULL. NULLIF checks for certain parameters and returns NULL if the parameters are equal; otherwise it returns the first parameter. Listing 1 contains a NULLIF script that returns NULL for TestEqualNULLIF and 0 for TestNotEqualNULLIF. ISNULL checks for the value of a parameter and replaces NULL with another value if the parameter's value is NULL. Listing 2 contains an ISNULL script that returns 1 for TestNULLValue and 10 for TestNotNULLValue.
Q: What's the typical usage of NULLIF and ISNULL?
A: Use NULLIF to compare two values, and use ISNULL to compare a value with NULL. You can use CASE instead of NULLIF or ISNULL. However, using NULLIF or ISNULL reduces the amount of T-SQL script you need to write. Only a negligible performance difference exists between using NULLIF or ISNULL, or using CASE. Listing 3 demonstrates NULLIF and ISNULL, comparing each with an equivalent CASE statement. (Notice how much more code CASE requires.) Run the script in Listing 3 two times with two different values. The first time you run the script, set @expression2 to 0, and the second time set @expression2 to 1.
Q: What's the difference between % used as an operator and % used as a wildcard?
A: When % is used as an operator, the modulo returns the remainder of a division operation. Using % as a wildcard character matches any length of the string or number in a WHERE clause. Listing 4 contains a query that uses % as modulo and as wildcard.


text:
Mobile devices can so easily fall into the wrong hands. I know—I've lost my share of Windows Mobile-based smart-phones and Pocket PC Phone Edition devices. When such a device falls into the wrong hands, so can a lot of corporate information—even the device owner's domain credentials, since most users choose to have the Microsoft ActiveSync client remember their username and password. But help is available in the form of Exchange Server 2003 Service Pack 2 (SP2) and the Messaging and Security Feature Pack (MSFP) for Windows Mobile 5.0.
SP2 and MSFP address some of the fundamental security needs of corporations that use mobile devices by giving you the ability to lock down your far-flung fleet of mobile devices and perform remote wipes. I'll show you how to set up SP2 and configure MSFP on your Exchange server, then walk you through the process of locking down your mobile devices and performing remote wipes on them.
2 Key Abilities
With SP2 and MSFP, you get two new capabilities to help mitigate the security risk of a lost or stolen mobile device. First, you can lock down devices by enforcing the use of a device PIN or password to prevent unauthorized access. You can even configure requirements for the password, such as minimum length and character composition. To prevent endless guessing of a device's PIN, you can specify how many consecutive attempts the device should allow before it wipes all data. Second, upon receiving a report of a lost or stolen device, you can issue a remote wipe command to the device and have it delete all information.
This centralized control of a few critical functions on mobile devices is similar to the centralized control Group Policy provides over your PCs. These new capabilities are likely just the beginning of centralized device-fleet-management features from Microsoft. (However, if you need sophisticated device-fleet management now, check out Good Technology's product line at http://www.good.com. In my opinion, Good Technology offers the best comprehensive management environment for a heterogeneous mix of mobile devices, and its products far outpace Microsoft's current offerings.)
Although I discuss Windows Mobile devices here (which require MSFP to take advantage of SP2's mobility features), some Exchange ActiveSync (EAS)-compliant devices that don't run Windows Mobile can also carry out remote wipe and password policy instructions from the Exchange server. For example, a growing number of non-Windows Mobile devices—such as Symbian OS-based smartphones and some Sony Ericsson, Motorola, and Nokia phones—use DataViz RoadSync, a third-party EAS client, which supports SP2's Direct Push and remote wipe mobility features.
Installing SP2
I'll assume you already have Exchange Server 2003 SP1 with Outlook Web Access (OWA) installed. Before installing SP2, you might need to load one or two hotfixes. If you've installed the security update for Microsoft security bulletin MS05-019 or Windows Server 2003 SP1, you should also install hotfix 898060. If you use or intend to implement Sender ID, you should also install hotfix 905214. (For more information about these hotfixes, see the release notes for SP2 at http://download.microsoft.com/download/f/b/5/fb5c54af-fe5c-48e9-be97-f9e8207325ab/ex_2003_sp2_relnotes.htm.)
After you install the necessary hotfixes, it's time to install SP2, which you can download at http://www.microsoft.com/downloads/details.aspx?familyid=535bef85-3096-45f8-aa4360f1f58b3v40&displaylang=en. Microsoft recommends performing a full system backup before installing SP2. Although the installation goes very quickly and doesn't require a reboot, access to Exchange is temporarily interrupted while the services are stopped and restarted, so you'll probably want to do the installation during nonpeak hours.
Lock Down
After installing SP2, you're ready to specify policies regarding PIN or password usage and lock down your fleet's mobile devices. From the Microsoft Management Console (MMC) System Manager snap-in, open the properties dialog box for Global Settings\Mobile Services, which Figure 1 shows.
You'll notice two new elements. The Enable Direct Push over HTTP(s) check box lets you enable or disable Direct Push technology over HTTP or HTTP Secure (HTTPS). Direct Push is a new feature of SP2 and MSFP, and it's Microsoft's answer to Research In Motion's (RIM's) BlackBerry devices, which can receive real-time email updates. However, Direct Push is also important to security, because it lets you immediately reach out to a lost or stolen device and erase your data before a bad guy can exploit it. (I cover the remote-device-wipe feature a little later.)
The other new element is the Device Security button, which, when clicked, displays the Device Security Settings dialog box that Figure 2 shows. To centrally mandate a device password, select the Enforce password on device check box, which activates the other settings and lets you select or clear them depending on your needs.
As Figure 2 shows, I've specified that a device must have a password of at least four characters and that the device be wiped after eight consecutive failed attempts to enter the password. The device will lock after a five-minute period of inactivity.
Be reasonable with the requirements you configure in Device Security Settings. Remember that users need quick access to their devices—if you're too strict, you'll foster uncooperative users. If your users' devices are also mobile phones, they'll be happy to know that with most devices, as far as I know, users can answer incoming calls without first unlocking the device. However, the device remains locked during the call until the user enters a password. Also, regardless of the physical buttons on the device, Windows Mobile 5.0 displays an on-screen numeric keypad when prompting for a PIN. Many organizations will determine that a four-digit PIN is sufficient to guard the device, provided it's configured to wipe after a reasonable number of failed attempts. I believe a four-digit PIN combined with automatic wipe provides the right balance of security and usability.
If you support devices that aren't enabled for MSFP, you need to select the Allow access to devices that do not fully support password settings check box to apply the settings to all devices in your fleet. Since there are always special situations, Exchange also lets you specify exceptions. When you click Exceptions, Exchange System Manager (ESM) displays the Device Security Exception List dialog box that Figure 3 shows. Here you can add users whose devices are exempt from the requirements configured in the Device Security Settings dialog box. You make exceptions for users, not specific devices; for example, if an exempt user has two devices, both devices will be made exempt.
Remote Wipe
After installing SP2, you need to install the Exchange Server ActiveSync Web Administration tool before you can use the remote wipe feature. The Web Administration tool is a browser-based tool that provides the remote administration and remote wipe feature for all mobile devices running Windows Mobile 5.0 and MSFP, as well as any device that supports third-party EAS clients. You can download the tool at http://www.microsoft.com/downloads/details.aspx?familyid=e685 1d23-d145-4dbf-a2cc-e0b4c6301453&displaylang=en.
When you open the downloaded file, it prompts you for a folder to which to extract files. After extraction, open the folder and double-click MobileAdmin.msi to create a new folder called MobileAdmin under the server's default Web site. To access the Web Administration tool, open a browser and enter
where mail is the name of your Exchange server.
After authenticating, you'll see the Mobile Device Settings page of the Mobile Admin Web Form, which Figure 4 shows. Click Remote Wipe to display the Remote Device Wipe page similar to that which Figure 5 shows. To find a device, you must enter the mailbox name or SMTP address of a user who synchronizes with Exchange from one or more devices. EAS tracks each device from which a user synchronizes, and the Mobile Admin Form uses this information to display a list of devices associated with the specified mailbox.
As the Remote Device Wipe page shows, a Pocket PC is associated with my account. The page displays the date and time of the last synchronization and offers two actions: Wipe and Delete. If I click Delete, Mobile Admin clears the association between the Pocket PC and my account. If I subsequently synchronize again using that device, EAS will re-create the association. The Delete feature lets you perform housekeeping when a device is no longer used.
Let's say my Pocket PC has been stolen. When I click Wipe, the tool issues a remote wipe command to the Pocket PC. Figure 6 shows the status of my Pocket PC after I initiate a wipe. If the device is currently on and connected via the long-lived HTTP connection (a port 443 TCP connection that doesn't time out) used by MSFP's Direct Push technology, the device will erase all its data within seconds. Otherwise, the wipe won't take effect until the next time the device connects to the Exchange server.
For what it's worth, I tried issuing a remote wipe command to a Pocket PC that didn't have MSFP loaded. The device didn't wipe its data, of course, but the synchronization did fail and issued support code 0x85010013. So, although devices that aren't MSFP-enabled can't carry out remote wipe commands, you can at least disable continued synchronization for that device if you lose control of it.
The Web Administration tool tracks the status of the remote wipe command, so that you can return to the Remote Device Wipe screen and check for completion of the command. If the user recovers the device before the wipe command is carried out, you can cancel the command by returning to the Remote Device Wipe page and clicking Cancel Wipe.
There's no guarantee that your Windows Mobile device will support remote wipe or a centrally mandated password policy because those features are part of the optional MSFP. Support for MSFP depends on the device manufacturer—and sometimes on the carrier. Before buying a Windows Mobile device, make sure it comes with MSFP or that the feature pack is available from the carrier or manufacturer. (Microsoft offers a buyer's guide of Windows Mobile 5.0 devices at http://www.microsoft.com/windowsmobile/devices/default.mspx.)
EAS support in mobile devices isn't limited to Windows Mobile devices. Manufacturers such as Nokia and Motorola and ISVs have licensed EAS, and DataViz makes EAS clients for a variety of phones based on Palm OS, Symbian, and Java Mobile Information Device Profile (MIDP). Before you buy, read the specifications or manual to make sure you understand whether the third-party EAS-compliant device or client software you're considering supports remote wipe and mandated password policy. Also, be aware that some devices that support HTTPS-protected EAS and Direct Push are limited to a finite Certification Authority (CA), which means the device refuses to connect to your Exchange server unless you purchase a digital security certificate from one of the commercial CAs that the device supports, such as VeriSign or its subsidiary, thawte.
Some mobile devices let you store email attachments on a removable flash memory card to conserve internal memory. Doing so carries a big risk, however, because attackers can easily remove Secure Digital (SD) and other such memory cards—possibly before theft is reported or before your remote wipe command is carried out. Moreover, some of your organization's most sensitive data is likely to be found in attachments. EAS with MSFP is apparently supposed to disable the ability to store attachments on the device's removable storage, but if you want to use that feature, I recommend testing specific devices and software to make sure it works correctly.
A Good Step Forward
How secure does MSFP make the data and credentials on your mobile devices? Some analysts, such as Gartner, complain that Microsoft hasn't done enough with encryption to combat more sophisticated attackers who crack open a device and attempt to extract data from its memory. The Trusted Computing Group's Mobile Phone Work Group subgroup is working on mobile-device security, and I expect mobile devices to become more secure in the future. (For more information, see https://www.trustedcomputinggroup.org/groups/mobile.)
If your biggest concern is the theft of user domain credentials, you might consider implementing client certificates to control access to EAS. Enrolling Windows Mobile devices for client certificates is much easier than in the past, thanks to the new Enroller application on the device Start menu, which lets you request a client certificate from your Windows Server CA. At some point, we'll probably see biometric access controls on devices, and tamper-proof chips that contain an encryption key will protect data. For the time being, however, SP2 and MSFP take you a good step forward in mitigating the biggest risks associated with mobile devices.


text:
U.S. banking regulators agreed to ease requirements for some of the smallest lenders in a new set of capital standards designed to prevent a repeat of the 2008 crisis that almost destroyed the world's financial system.
The changes came in the latest version of rules released today by the Federal Reserve, a year after they were first drafted and a week after European counterparts finished their own review. The Fed votes on the 972-page proposal later today, with the Federal Deposit Insurance Corp. and Office of the Comptroller of the Currency scheduled to follow by July 9.
The U.S., along with 26 other members of the Basel Committee on Banking Supervision, must enact local regulations to carry out a 2010 revision of how minimum capital levels are set for the world's banks. Those funds serve as a buffer against losses that might cause a global lender to collapse and bring down the entire financial system -- an improbable scenario for U.S. community banks with relatively few assets.
"Community and regional banks don't pose systemic risks when they fail," said Coryann Stefansson, who heads the financial services regulatory practice at PricewaterhouseCoopers LLP. "So it's easier to soften the rules on them without undermining the commitment to Basel or tougher capital rules."
The rules published today narrow the definition of what counts as capital, in line with Basel's revisions after the 2008 crisis. They also double the minimum ratio for capital and assets and reclassify derivatives and mortgage-based securities as more risky than in previous versions.
Second Standard
For the biggest lenders, it also includes a capital standard that also includes a capital standard that doesn't adjust for the risks of the banks' assets, though an expected increase in that minimum wasn't ready to be included in this version, according to people familiar with the discussions.
"This framework requires banking organizations to hold more and higher-quality capital, which acts as a financial cushion to absorb losses, while reducing the incentive for firms to take excessive risks," Fed Chairman Ben S. Bernanke said in prepared remarks. "Banking organizations will be better able to withstand periods of financial stress, thus contributing to the overall health of the U.S. economy."
Governor Daniel Tarullo, the Fed official in charge of financial regulation and bank oversight, said the capital rules revealed today are "a milestone in our post-crisis efforts to make the financial system safer."


text:
SACRAMENTO, Calif. (AP) The Sacramento Kings exercised the 2013-14 contract options of center DeMarcus Cousins and guard Jimmer Fredette.
Kings President of Basketball Operations Geoff Petrie announced the move Wednesday, saying the team is looking forward to watching the two players grow.
Cousins is entering his third NBA season after being the fifth pick in the NBA draft in 2010. He averaged 18.1 points and a team-high 11.0 rebounds per game last season.
Fredette averaged 7.6 points per game as a rookie out of BYU last season.


text:
The battle between The Times-Picayune and Advocate extends to publishing legal notices.
On an endangered species of transportation
Finding originality and spirituality in St. Patrick's Day and St. Joseph's Day celebrations.
Errol Laborde and Arthur Hardy share their thoughts on the 2014 Carnival season.
The upstart paper dethrones the reigning king.
Errol Laborde holds a Ph.D. in political science from the University of New Orleans and is the editor-in-chief of Renaissance Publishing. In that capacity he serves as editor/associate publisher of New Orleans Magazine and editor/publisher of Louisiana Life magazine.
Errol is also a producer and a regular panelist on Informed Sources, a weekly news discussion program broadcast on public television station WYES-TV, Channel 12. Errol is a three-time winner of the Alex Waller Award, the highest award given in print journalism by the Press Club of New Orleans. He also received the National and City Regional Magazine Association Award for Best Column for his New Orleans Magazine column, beating out 76 city magazines across the country. In 2013, Errol received the award for the "Best News Affiliated Blog," awarded by the Press Club of New Orleans.
Errol's most recent books are Krewe: The Early Carnival from Comus to Zulu and Marched the Day God: A History of the Rex Organization. In his free time he enjoys playing tennis and traveling with his wife, Peggy, to anywhere they can get away to, but some of his favorite spots are the Caribbean and historic locations around Louisiana. You can reach Errol at (504) 830-7235 or firstname.lastname@example.com.