text:
In 2002, the author of Misshitsu, also known as "Honey Room," was tried for obscenity in the first manga obscenity trial in Japan's history.1 Throughout the twentieth century, Japan censored works in the media of literature, film, and photography as obscene. However prior to 2002, no manga author was ever tried for obscenity. In Professor Kirsten Cather's analysis, she cites the Misshitsu case as "the natural conclusion to the preceding obscenity trials in the second half of the twentieth century" for the "new artistic medium" of manga.2 However, I argue that this is an inaccurate analysis. Within postwar Japan alone, the first obscenity trial for literature was in 1951,3 the first obscenity trial for film was in 1965,4 and the first obscenity trial for photography was in 1976.5 Yet the first obscenity trial for manga did not come for another two and a half decades. This is despite the fact that emaki, Japanese picture scrolls that were the precursor to manga, have existed since the 12th century C.E.6 Rhe first film did not debut until 1878.7
Why wasn't any manga tried for obscenity until 2002? I will depart from Cather's analysis by showing three distinct qualities of the manga industry that answer this question. I will show that together, the manga industry's self-censorship, its adaptation to subvert limited obscenity laws, and the medium's perceived illegitimacy by the Japanese population delayed a manga obscenity trial until 2002, not the supposed modernity of manga itself. I will also explain the other side of the primary question: if no manga author was ever tried for obscenity before 2002, why was a manga author tried for obscenity in 2002? To answer this second question, I will explore the liberalization in obscenity law, market forces, and public opinion that lead to the 2002 "Honey Room" trial.
Before discussing the factors that prevented manga obscenity trials in early postwar Japan, one must first understand manga as a medium, especially as it relates to obscenity. Thus, I will begin by discussing the artistic tools of manga, as well as the legal background to the Misshitsu trial. In his book, "Understanding Comics: The Invisible Art," Scott McCloud analyzes the artistic grammar of manga.8 He begins by explaining why characters in manga are often depicted more simply.9 He argues that characters are simplified in manga so that the reader may better relate to these characters. He notes that in real-life conversation, people often observe specific details of the person to which they are talking. However, when one visualizes his or her own visage, he or she "essentializes" his or her features. That is to say that rather than remembering every detail of one's own appearance, one is aware of a more simplified image: two eyes, a nose, a mouth, and possibly facial hair. Thus, in comics, a more detailed image stresses the "otherness" of a character, while a simplified image allows the reader to identify with characters. This is why manga often simplify the protagonists' visual appearance. The visual grammar of comics allows the reader to insert himself into the narrative and further involve himself in the story rather than see the characters as an "other."
McCloud also discusses how manga artists use the space between frames and the arrangement of frames on the page to convey meaning and engage the reader's imagination.10 McCloud explains that comic artists have used stylized lines, panel borders, and panel layouts to depict motion, emotion, and the passage of time.11 Although the images are static, these visual elements allow the reader to imagine a moving storyline. Additionally, while a static image may not necessarily convey time or motion, the reader fills in the spaces or "gutters" between the panels with his imagination. Although the comic only shows individual snapshots of a story, the reader constructs a narrative from these distinct images in his mind. This is what McCloud calls "closure."12 The spaces between panels in comics force the reader to imagine both spatial motion and the passage of time. Closure engages the reader in the story because the images are not a story in and of themselves. Instead, the reader must create a story in the gutter between these images. This gives the otherwise static images a filmic quality in which the reader moves his eyes across the images to construct a continuous series of events. Although McCloud discusses many other aspects of comics as an art form, these two characteristics, simplified images and closure, are the most relevant to obscenity. These characteristics make manga one of the most engaging media. As discussed below in the legal background to the Misshitsu trial, a more engaging medium like manga is usually more likely to be judged obscene.
The judges in the Misshitsu trial were not manga theory experts, but the case centered on a discussion of manga's obscenity as a medium.13 This discussion included the principles of visual grammar discussed above. The judges had the challenge of applying obscenity laws to manga as a hybrid medium because manga contains not only images, but words as well. In the late 1970s and early 1980s, Japanese courts tried the author of a work from a different hybrid medium for obscenity: Oshima Nagisa for his screenplay In the Realm of the Senses.14 This screenplay contained both pictures and a prose description, and is thus quite similar to a manga, which also includes both images and words. After a lengthy legal battle, the judges ruled that "static, textual media was inherently innocuous and kinetic, visual media was inherently obscene."15 The judges determined that work within a given medium was not only obscene because of its explicit visual components but also because of the implicit visual components that it conjures in the reader's imagination. Because both the words and pictures in the screenplay were static, they did not push the reader's imagination towards obscenity.
This is where manga departs from a screenplay. The words and pictures of manga are not static. Not only does manga contain both pictures and text, but manga uses chat bubbles and onomatopoeia that engage the reader both aurally and visually. The non-linear layout of panels forces the reader to remain mentally engaged in the manga. In addition, Japanese readers scan manga at an average of three to four seconds per page.16 This quick reading rate grants manga an inherently filmic quality that further complicates its legal classification as a medium. The judges in the Misshitsu trial noted that while the aforementioned aspects of manga made narrative and visual elements of manga more realistic, its hand-drawn images made the manga less realistic. However, these unrealistic images included large and detailed genitalia that the judges ruled as "irredeemably obscene."17
The judges discussed not only the artistry of manga, but also the medium's place in Japanese culture. In Japan, art that would otherwise be obscene has been ruled not obscene because its artistic or political value was declared a mitigating factor.18 In the Misshitsu trial, however, the manga was viewed only as a market-driven commodity created for profit. The publisher himself admitted that he created the manga without a moral or philosophical intent but rather with the intent of creating erotica and gaining profits.19 The judges thus addressed manga as if it were a "children's" medium without potential artistic or political value. The judges saw manga as a children's medium despite the fact that "Honey Room" was labeled as an adult manga. In part, manga was still seen as a children's medium in this case because Misshitsu's author was indicted because a sixteen-year-old held a copy of the comic.20 In addition, manga has historically been perceived as a child's medium, an issue that will be discussed later in greater depth. Although much of the courtroom discussion circulated on the manga's impact on children, an obscenity case is not about children. Obscenity applies to adults and children equally, thus children could not be the focus of this case. While many manga had been convicted or censored under youth regulations before, the impact of the manga on children is irrelevant to this case because obscenity applies to adults as well as children.21
As the artistic and legal background of obscenity in manga has now been addressed, I will return to the central question: how did manga avoid obscenity indictment in Japan before 2002? The first reason is self-censorship. Manga artists, editors, and publishers censored their own possibly obscene work before it was ever published. Self-censorship was an economic imperative for the manga industry to avoid the potential monetary damages of a trial and the resulting stigma. In her book Adult Manga, Sharon Kinsella writes about the manga industry and the market forces that drive the art form.22 She writes that manga officially began self-regulating as early as 1963, when the Japan Publishers' Association created the Publishing Ethics Committee.23 The committee decided which manga were potentially "harmful" or "indecent." These terms stemmed directly from national censorship legislation such as the 1964 Indecency Act and Youth Ordinance, local censorship legislation, and criteria from feminist and women's groups that worked to censor manga.24 Such manga would be put on a list of harmful and indecent comics that were subject to a 300,000 yen fine, as well as the indirect financial costs of a trial, including legal costs and bad publicity.25 Self-censorship was simply a means for manga companies to survive.
Most self-censored manga were not published because they were overly sexual. These included erotic boys' love-comedy manga, pornographic adult and "ladies'" manga, and manga depicting sexualized underage girls, known as Lolicom comics.26 Sexual comics were the most likely comics to be labeled as indecent. Once the ethics committee deemed a manga article or manga series potentially harmful or indecent, stores and publishers took several approaches to avoid the stigma and monetary loss of an indictment. Publishers wrapped potentially harmful manga in plastic sleeves and labeled them as "adult manga" to keep children from accidentally browsing through these comics. Some manga stores would put adult manga in special sections, while many more refused to sell adult manga all together. Certain series were discontinued and others were censored by the government under this legislation. The most common tactic, however, was self-censorship before the manga was ever published.27
Although many potentially obscene manga were never published, other manga editors worked through loopholes in obscenity legislation. This is the second reason that manga avoided an obscenity trial. Although many manga still had erotic or pornographic intent, artists adapted their comics to legal loopholes so that they could avoid an obscenity indictment. Japanese postwar obscenity law specifically prohibited the explicit depiction of genitalia and pubic hair.28 However, other sexual depictions were not necessarily censored. Breasts and buttocks, voyeurism, bestiality, child pornography, and sadomasochism were not considered obscene, and were even common in Japanese media.29 Rather than prohibit sexual images in media, obscenity laws simply diverted and reshaped such images. The medium of manga was no exception. Even the most explicit and erotic manga could avoid obscenity indictments by fetishizing sexuality.
Erotic manga artists creatively avoided explicit depiction of genitalia using a variety of visual techniques. Artists covered genitalia and pubic hair with black or white boxes, word bubbles, or shading.30 Alternatively, some manga covered obscene areas by pixelating or blurring the pubis.31 Because children do not have pubic hair, obscenity laws indirectly encouraged this genre of pornography. Alternatively, females would sometimes be shaved of their pubic hair in manga to avoid indictment while still revealing the pubic area.32 Erotic stories often involved sadomasochism, bondage, and anal sex play while avoiding more realistic or "normal" sexual depictions because these were not banned by law.33
The visual techniques of manga also encourage voyeuristic and escapist sexual depictions. Children's comics as well as adult comics commonly place male characters as voyeurs. The characters will commonly look either at the underwear of female characters or at their exposed bodies.34 As previously discussed, characters in manga are often depicted simplistically so that the reader can identify with those characters. In addition, the space between panels as well as the arrangement of the panels forces the reader to mentally involve himself in the story. Thus voyeuristic protagonists paired with the visual grammar of manga place the reader himself into a voyeuristic role. These voyeuristic scenes do not require any explicitly sexual drawings to arouse the viewer. In fact, many depictions of voyeurism in manga do not lead to any sexual relations at all.35 It is no wonder, then, why manga artists may have incorporated voyeurism rather than explicit sexual acts to avoid obscenity charges.
While many manga were self-censored by the artists and publishers, and many others adapted to escape specific obscenity restrictions, certainly some arguably obscene manga were published before 2002. However, because manga was also perceived as a less "adult" medium, it was less likely to be indicted for obscenity. This is the third and possibly most subtle reason that the first manga obscenity trial did not come until 2002. To be clear, postwar manga were commonly censored. As previously discussed, however, the manga were almost solely charged with indecency, and they were most commonly charged under youth ordinances. The 1964 Indecency Act that was the basis for such censorship cases states that "indecent materials may not be sold to minors under 18 years of age."36 The Youth Ordinance also regulated imagery that was deemed harmful to children.37 In addition, the majority of anti-manga protest organizations were mothers' organizations or organizations concerned with the well-being of youths. The most prominent groups included the National Assembly for Youth Development (NAYD), the National Youth League, the Young Women's Christian Association (YWCA), the Boy Scouts' Association, and the Youth Volunteers.38
Most censorship, then, was made in the interest of children rather than adults. Manga was censored to preserve young people's innocence towards sexuality, violence, and general tastelessness. Manga was perceived as a medium for children, so censorship kept manga out of the hands of children with indecency charges. This logic, however, did not necessarily carry over to adults. Manga was not indicted for obscenity because censorship based on obscenity does not only have to be deemed harmful to children. The manga must be deemed harmful to adults as well, as the judges indicated in the Misshitsu case. Few if any organizations pushed for the censorship of manga for adults because manga was not perceived as an adult medium. Because of this perception, even when a group attempted to censor a manga, the question of obscenity, censorship for adults, seemed irrelevant. Now that I have discussed the factors that prevented a manga obscenity trial through most of the 20th century, I will shift here to the second question: what changes prompted a manga obscenity trial in the early 21st century?
In the late 1980s and early 1990s the Japanese stopped perceiving manga as a children's medium. In 1988 and 1989, printer's assistant Miyazaki Tsutomu violently murdered four girls. When investigating Miyazaki's room, reporters discovered stacks of manga and anime.39 This discovery radically shifted the public's perception of manga. Manga were no longer seen as a medium for children, but rather a medium for otaku. Although the term for otaku originally referred to a socially awkward and introverted "nerd," the Miyazaki murders changed its meaning. Now, otaku was a term for "dangerous, psychologically-disturbed perverts."40 The tragedy became known as the otaku murders. Although the term otaku is not mutually exclusive with children, these violent murders moved the focus on manga from children to the dangers to society as a whole. Manga could only be seen as obscene once manga was socially perceived as a medium for adults.
At the same time as the otaku murders, manga saw its peak in readership. In the mid-1990s, over 20 percent of all publishing revenue in Japan was attributed to manga.41 Large manga magazines like Jump sold around 6.5 million copies a week. However, because readers often share their manga, Kinsella argues that as much as one sixth of the Japanese population may have read such a manga magazine.42 Unfortunately, these numbers are difficult to approximate because many classmates, coworkers, and even strangers share manga or read manga without buying them. Even though such approximation is difficult, it is certain that manga had powerful cultural influence in 1990s Japan.43 Because manga was cheap and accessible for commuters at train kiosks, book shops and convenience stores, manga permeated throughout the Japanese working class.44 Not only did manga draw national attention because of its perceived danger towards youths, but manga's impact on Japanese culture was at an all-time high because of its peak readership. The new cultural power of manga ignited fear of the potential societal harms, including those of obscenity.
Together the fear of dangerous manga and the high readership of manga sparked a second manga censorship movement in the early 1990s. This time, however, the Manga Publishers' Union, among other organizations, pushed against the censorship.45 The union appealed for free expression and argued that manga should be seen as an art form equal to any other.46 Manga artists in the Society for the Protection of the Freedom of Expression in Manga and the organization Manga Japan aimed to protect manga from censorship.47 These movements found limited success but in 1991, some obscenity laws became less rigid. In particular, an outpour of public opinion pressed for the liberalization of laws banning pubic hair as obscene. These and other obscenity criteria became slightly looser and vaguer over the next few years.48
Even after the Japanese government liberalized manga censorship laws in the mid-1990s, however, manga circulation slowed and profits decreased. Some attribute the fall in manga readership to the rise of video-games and other electronic media.49 By the late 1990s, Japanese comics were in a similar position to Japanese film in the early 1970s. In this period, film censorship law had liberalized and the film industry had fallen into economic crisis.50 The Nikkatsu film studio created pornographic films in an attempt to survive financially in difficult economic times. In what is now referred to as the "Nikkatsu Roman Porn Trial", the artists behind four such films were indicted for obscenity. The defendant's lawyers argued that the artists behind these films should not be held liable for obscenity because pornographic films were necessary for the industry to compete economically. Like in the Misshitsu trial, these films were not created for art or politics, but were creates as "dirt for money's sake."51 However, unlike the Misshitsu trial, in which the judges decided that the manga should be punished for its perceived greed,52 the judges in the Nikkatsu trial decided that the financial motive was a valid mitigating factor for obscenity.53 This is likely because the judges saw film as a more legitimate medium to represent Japanese culture in foreign markets than was manga.
By the turn of the millennium, manga was a prominent part of Japanese culture. However, because of the otaku panic and the newly enlivened manga censorship movement, society perceived this manga as dangerous. This was the social environment that bred Misshitsu. At the same time, obscenity laws had loosened and manga publishers and editors needed to generate new readership to increase their profits. This was the economic environment that bred Misshitsu. Financial needs and looser obscenity regulations now outweighed the motivations for self-censorship and adaptation while Japanese society began to take manga more seriously as a medium. It was at exactly this time that a concerned father discovered an anthology of erotic manga in his teenage son's room.54 This father sent a letter of complaint to his local representative, highlighting the story from "Honey Room" that he found most offensive. Through what Cather describes as "largely a result of a series of coincidences," Misshitsu became the first manga to be indicted for obscenity.55
Cather's initial reasoning of manga's first obscenity trial is compelling. A wave of new media is likely to be followed by a wave of new obscenity laws. Indeed, the new media of video games and the internet has prompted many new discussions on free expression and censorship.56 Manga, however, is not a new medium. Its arrival into Japanese culture did not affect its postwar obscenity status. Instead, various economic and social forces both prevented a manga obscenity trial in early postwar manga and changed to trigger the early 21st century obscenity trial. These are the forces that have determined the role of manga in Japan for centuries, and these are the forces that will determine manga's future as a medium both within Japan and across the globe.
Kirsten Cather, The Art of Censorship in Postwar Japan, chap. 8, page 221, (Honolulu: University of Hawai'i Press, 2012, accessed May 10, 2013, http://muse.jhu.edu/.
Ibid., chap. 1.
Wendy Strauch-Nelson, "Emaki: Japanese Picture Scroll," Art Education 61, no. 3 (2008): 25-32, http://search.proquest.com/docview/199329025?accountid=10422.
"The First Movies Ever Made," St. Charles Public Library, last modified July 9, 2012, http://www.stcharleslibrary.org/wordpress/movies/tag/the-horse-in-motion/.
Scott McCloud, Understanding Comics The Invisible Art. (New York: HarperCollins, 1993).
Ibid., 28-45.
Ibid., 94-137.
Cather The Art of Censorship in Postwar Japan, chap. 8.
Cather, Kirsten. "A Thousand Words: The Powers and Dangers of Text and Image." positions: east asia cultures critique 18, no. 3 (2010): 695-725. http://muse.jhu.edu/ (accessed May 10, 2013).
Cather The Art of Censorship in Postwar Japan, 260-261.
Ibid., 255-257.
Sharon Kinsella, Adult Manga: Culture and Power in Contemporary Japanese Society, Honolulu: University of Hawai'i Press, 2000.
Ibid., 141-145
Anne Allison, Permitted and Prohibited Desires: Mothers, Comics, and Censorship in Japan, Boulder, Colo: WestviewPress, 1996, 149.
Ibid., 151, 171
Kinsella Adult Manga: Culture and Power in Contemporary Japanese Society, 140.
Allison Permitted and Prohibited Desires: Mothers, Comics, and Censorship in Japan, 153.
Kinsella Adult Manga: Culture and Power in Contemporary Japanese Society., 44.
Allison, Anne. Permitted and prohibited desires: mothers, comics, and censorship in Japan. Boulder, Colo: WestviewPress, 1996.
Cather, Kirsten. The Art of Censorship in Postwar Japan. Honolulu: University of Hawai'i Press, 2012. Accessed May 10, 2013. http://muse.jhu.edu/.
Kinsella, Sharon. Adult Manga: Culture and Power in Contemporary Japanese Society. Honolulu: University of Hawai'i Press, 2000.
McCloud, Scott. Understanding Comics The Invisible Art. New York: HarperCollins, 1993.
St. Charles Public Library. "The First Movies Ever Made." Last modified July 9, 2012. http://www.stcharleslibrary.org/wordpress/movies/tag/the-horse-in-motion/.
Strauch-Nelson, Wendy. "Emaki: Japanese Picture Scrolls." Art Education 61, no. 3 (2008): 25-32. http://search.proquest.com/docview/199329025?accountid=10422.


Alexa Video Skill integration of Kodi.
This differs from other Kodi Alexa Skill implementation in that you don't have to utter invocation name. You can simply say "Alexa, play Ironman"
It is also easier to get it up and running, as it doesn't require to have any servers running, and is as easy, as installing the Addon on your Kodi instance.
I can't seem to find it in the skills page.
(2018-01-25, 02:47)cabbresson Wrote: I can't seem to find it in the skills page.
Since it's still in beta, I have to manually add peoples Alexa connected emails for them to see the skill.
This looks interesting, how can I get signed up in order to try it out?
(2018-01-25, 14:24)hslansky Wrote: This looks interesting, how can I get signed up in order to try it out?
Hi, sorry for some reason, I still can't reply to your PM.
But just follow the Readme on the Github, and then I have to manually add your Amazon connected email to skill beta testing.
Thanks, I've completed the first two steps and will PM you my Amazon email address.
One question: My Kodi instance keeps connecting and immediately disconnecting to/from Kodi Connect. Is this normal?
That usually means that you've entered incorrect credentials in Kodi Connect addon.
You should enter email (as registered on Kodi Connect server, atm still case sensitive), and a secret that was autogenerated when you added a Device on that page.
(2018-01-25, 14:30)tkislan Wrote: Hi, sorry for some reason, I still can't reply to your PM.
Didn't see any place in Kodi Connect add-on to enter the secret, only email and password.
(2018-01-25, 15:01)hslansky Wrote: Thanks, I've completed the first two steps and will PM you my Amazon email address.
NVM, figured it out. Kodi Connect settings have entries for userid and password, should be useriid and secret. Connects fine now, just need the skill to test this out.
Yeah I am just waiting on the Skill also this would be a great skill thought about this development for awhile. Just need to read on how the skills are created.
I actually run 5 Kodi setups on a living room wall with 5 tvs So this would be a huge plus for controlling them. Kind of excited to check this out.
Thanks to the developer for all the hard work I am sure this took.
Hi there, sent you my email address in a PM. Please let me when you have added me, as of right now I cannot see the skill.
(2018-01-26, 14:26)hslansky Wrote: Hi there, sent you my email address in a PM. Please let me when you have added me, as of right now I cannot see the skill.
Hi, I've already added you (for some reason, I can't reply to any PMs).
And is your Amazon accounts content set to either US, UK, or DE? Because currently it only works for those countries.
Yes, it is set to US. Do I need to do anything to add the skill or does it just show up? I assume it should be in the my skills section.


text:
Doyle Kent Butler, 67
Doyle Kent Butler, 67, of Ellwood City passed away on Sunday, April 23, 2017 at the VNA Hospice in Butler.
Doyle was born on January 20, 1950 in Charleston, West Virginia to the late Doyle E. and Doris Taylor Butler. He is a member of the Riverside High School class of 1968, and was certified as a diesel mechanic by the Diesel Mechanic School in New Castle. He enlisted with the U.S. Army on September 26, 1969 and served until his discharge on March 24, 1972. He was awarded the National Defense Service Medal. Doyle worked at the Babcock & Wilcox Steel Mill for 13 years, and then as a truck driver for TBJ Trucking Co.. Most recently he was working with his son-in-law Randal for Graham's Renovations. He enjoyed going to Turkey shoots with his friend Chuck Bingle, fishing, vacationing at Hatteras Island, North Carolina, and most of all spending time with his grandchildren and great-grandchildren.
He is survived by his wife Cookie Rough Butler whom he married on April 6, 1991, his daughter, Michelle (Randal) Graham of North Sewickley Twp., his sons, Kirk Butler and his partner Johnathan Valentine of Carlisle, Pa, Mathew (Kelly) Butler of Chippewa Twp., and Jake Butler of Ellwood City, his 15 grandchildren and 4 great-grandchildren, his sister, Sharon (Rich) Hajec of Jeffersonville, Indiana, his mother-in-law Hildegard Rough of North Sewickley Twp., his step-daughter Christa McAnallen, his step-son Michael (Ashley) McAnallen, his first wife Marsha Chesko, and several nieces and nephews.
He was preceded in death by his parents, and his sister Kathy Declynn.
A Celebration of Life Service will be held by the family at a later date. The funeral arrangements have been entrusted to the Samuel Teolis Funeral Home, Inc. and Cremation Services.

redpajama_set_name: RedPajamaCommonCrawl


The Boston team had chosen the date of Friday 10/26. People brought food for the potluck, we ordered an absurd amount of alcohol, and most importantly, COSTUMES!
And then, as the hour approached, an email let us know that the water in the building, which had been off all morning, wasn't going to come back and that the party would be rescheduled.
Devastation set in and I may or may not have cried…that is, until I turned on the faucet in the kitchen and we did in fact have water!
Shout out to Jeff Tully, Sr. Director, Creative Services, for responding to the company-wide e-mail with the simple, nearly Biblical message of "We have water." It was too little too late though—we lost a lot of good people to the lure of working from home.
With a little encouragement from Kevin Flynn, VP & Director of Medical Services—who proclaimed with fists in the air, "I'LL STAY! I'LL PARTY!"—I knew that precisioneffect Halloween would be saved. And was it ever!
Below is a glimpse of some of the characters that showed up for the party beginning with our first-place costume winner, Elton John (Ross Barber, Project Manager). Second place was tied between Chewbacca (Dave Boyd, Director, Studio Services) and a Voodoo Witch (me! Alexa Mancini, Business Development Operations Manager).
Thank you to all who braved the harsh elements of having perfectly good running water and plenty of alcohol and food to go around.


text:
Congressman McCarthy Announces Introduction of Legislation to Protect Central Valley Economy from Regulatory Overreach
Congressman Kevin McCarthy today announced the introduction of H.R. 1582, legislation to ensure that the Central Valley can continue efforts to clean its air in a commonsense way that encourages job creation and economic growth. The Commonsense Ozone Regulation Act repeals a $29 million fine being levied on the residents of the Central Valley for violation of an air quality standard that has been revoked by the Environmental Protection Agency (EPA). It also postpones the implementation of new, stricter ozone standards until a Local Advisory Committee can study compliance feasibility. The bill is cosponsored by Congressman Devin Nunes (CA-21), Congressman Jeff Denham (CA-19) and Congressman Darrell Issa (CA-49).
"Right now, EPA is fining Valley residents for an air standard it already revoked, and now, is set to impose new standards that will result in a de facto ban on new businesses in the Valley. My bill allows Central Valley residents to inject commonsense into one-size-fits-all Washington regulations that destroy jobs and penalize our communities for circumstances beyond our control," said Congressman McCarthy. "Central Valley residents and businesses are making great strides toward cleaning the air, but with unemployment in the Central Valley in double-digits, we need to take a commonsense approach that also encourages economic growth. That's exactly what The Commonsense Ozone Regulation Act does."
Currently, residents in the Central Valley are being charged a $29 million fine for an ozone standard that EPA revoked in 2005. This old 1-Hour Ozone Standard was replaced with the current 8-Hour Ozone Standard, which the Central Valley is working to comply with while still paying the fine for the 1-hour standard. Now, EPA is moving the goalposts and proposing a new, tighter 8-Hour Ozone Standard, which, according to local air regulators, would be nearly impossible for the Valley to meet.
"Once again, extreme environmental regulations are impeding economic growth in the Central Valley," said Representative Denham. "With families and farmers in the 19th district suffering from unemployment levels just below 20%, now is not the time to impose new regulations which will destroy chances for new job creation in the Valley. This bill includes common sense solutions that allow the Valley to continue on a path towards cleaner air while also allowing businesses to grow and drive our economic recovery."
Neither the 1-Hour Ozone Standard or the proposed new 8-Hour Ozone Standard take into account the Central Valley's topography, weather, natural ozone background levels, foreign sources of pollution and traffic passing through the region, which create an environment ripe for ozone formation. Central Valley residents have no control over these things, but are being held to account for them by the EPA. H.R. 1582 would ensure these local factors are taken into account with the creation of the local advisory committee.
"The EPA needs a reality check. We have grave economic conditions throughout the Central Valley and the federal government is about to make them worse," said Representative Nunes. "It makes no sense that the agency would fine our communities under a standard which has been replaced, while at the same time moving the goal posts to make compliance with the new standard more difficult. This bill is needed to allow air quality improvements to continue without killing jobs."
"The EPA intends to make standards harsher, making it increasingly hard for job creators to comply with these new and constantly changing regulations," said Representative Issa. "This bill gives local districts a chance to meet requirements in a way that works for their community without unnecessary damage to the local economy."
H.R. 1582 takes a commonsense two-fold approach to protect the Central Valley economy and continue to clean up the air. Specifically, the legislation:
Repeals the $29 million fine that is being levied on the Central Valley; and
Creates a Local Advisory Committee to study the feasibility of complying with new EPA ozone standards.
The Local Advisory Committee would be composed of a representative of the local agriculture industry, air pollution control board, energy industry, health care industry, manufacturing and processing industry, and transportation industry, as well as a local governments and environmental justice representative.The committee would have five years to study and report findings to Congress. Congress would then have six months to review the report and act. During this time, EPA would not be able to implement new 8-Hour Ozone Standards, but the Valley would still be subject to the current 8-Hour Ozone Standard.


text:
Q: Nuxt vuex state menuList:undefined in component guy. I'm novice programmer.
I have question for nuxt use vuex get data for api.
so data call in vue value null but in dev tool vue has data.
How to use getters in nuxt.
This image from dev tool.

In getters and state chachange: menuList has array data but in component not data.
This image from component

Component MenuList> computed> menuList: undefined.
This my menu_list.vue code.
computed: {
    menuList () {
      // eslint-disable-next-line no-console
      return this.$store.getters.getMenuList
    }
  },
  beforeCreated () {
    // eslint-disable-next-line no-console
    console.log(this.$store.state)
    this.$store.dispatch('chachang/fetchMenu')
  },
  created () {
    // eslint-disable-next-line no-console
    console.log(this.$store.state)
    this.$store.dispatch('chachang/fetchMenu')
  }

This vuex code.
Chachang/state.js
export default () => ({
  menuList: []
})

Chachang/actions.js
export default {
  async fetchMenu ({ commit }) {
    const response = await this.$axios.get('https://hlkittipan.github.io/rock-paper-scissors/menu.json')
    commit('SET_MENU', response.data)
  }
}

Chachang/mutations.js
export default {
  SET_MENU (state, menu) {
    state.menuList = menu
  }
}

Chachang/getters.js
export default {
  getMenuList: (state) => {
    return state.menuList
  }
}

This store/index.js
import chachangActions from './chachang/actions'
import chachangStates from './chachang/state'
import chachangGetters from './chachang/getters'
import chachangMutations from './chachang/mutations'

export const state = () => ({
  ...chachangStates.state,
})

export const mutations = {
  ...chachangMutations.mutations,
}

export const actions = {
  ...chachangActions.actions
}

export const getters = {
  ...chachangGetters.getters
}

A: I will advice you to use mapActions and mapGetters that are imported from vuex.
import { mapGetters, mapActions } from 'vuex'
export default{
...
   methods:{
      ...mapActions('chachang',[ 'fetchMenu' ])
   },
   mounted(){
      this.fetchMenu() // better to use fetchData instead
   }
   computed:{
      ...mapGetters('chachang', [ 'menuList' ])
   }

..
}

A: Try this.
  async beforeMount () {
        const data = await this.$store.dispatch('chachang/fetchMenu')
        // eslint-disable-next-line no-console
        console.log(data)
      },computed: {
        menuList () {
          // eslint-disable-next-line no-console
          return this.$store.getters['chachang/getMenuList']
        }
      },

redpajama_set_name: RedPajamaStackExchange


In this second installment of Eric C. Anderson's New Caliphate trilogy (Dunn Books), soldiers, spies and statesmen converge as the world braces for an overflow of terror – a new U.S. president is about to be inaugurated and ISIS is attacking on multiple fronts.
As expected, you also get the expensive toys: a Rolex Daytona 6263 Oyster Albino ("only four were ever made") and a 1969 Mercedes 280SE Cabriolet, upgraded to a 6.5-liter V-8 with turbo-charging. And the personal weapons: a Yavus 16 ("not quite the stopping power of a .45 but still accomplished desired results").
And the high-tech stuff, in this case how to crash the Internet.
But what you don't expect from a thriller, and what Anubis delivers, is even more impressive. Anderson is smart, observant and quite literate.
In short, in Anubis, you're in the hands of a pro; Anderson's pages are crisp, bracing and a lot of fun. At one point, he writes, "The coming train wreck had left the station." Don't let Anubis get away from you.


Value = quality divide by price. So… does the United States have high quality and low price? Unfortunately, no. Every year, I look forward to the OECD annual health report and the newest version was released in June. The OECD is the Organization for Economic Cooperation and Development. It consists of most of the world's industrialized countries and from it we can get a scorecard of how the United States is doing compared to other countries. For this post, I've chosen 5 OECD member countries to compare to the U.S. for simplicity: Canada, France, Ireland, Japan, and the U.K.; however, you can just as easily choose just about any combination of OECD and get similar results.
Since last year, not much has changed and by the metrics used in the report, Americans continue to have poor value in healthcare and in fact, the value that we get is among the lowest in the world. Let's start with a look at our cost of health care as a percentage of our gross domestic product. Americans spend far more than any other country on healthcare. Currently, we spend 16.9% of our GDP on healthcare. That is 50% more than the next OECD country, Switzerland, which spends 11.5% of it's GDP on health care. The U.S.'s cost of health care continues to keep going up: in 2000, we only spent 12.5% of our GDP on health care.
One reason why health care costs can be expensive is that there are a lot of physicians. But as it turns out, the number of physicians per capita is in line with or less than other OECD countries. The causes of the high cost is more related to suboptimal management of chronic medical conditions such as asthma, COPD, and diabetes. Americans are the most obese among the OECD countries with 29.5% of the U.S. population reporting that they are obese (the next closest is Latvia at 25.7%). With obesity comes additional health costs. We also do a lot of testing. Only Estonia does more CT scans per capita than the U.S. and only Turkey does more MRIs per capita than the U.S.
Americans could still have good value if our health care quality is superior to other countries. However, by many measures, it is not. Our infant mortality rate of 6 deaths per 1,000 live births is the third highest of all reporting OECD countries; only Mexico and Turkey have higher infant mortality rates. Our traffic injuries per million population is the highest of all reporting OECD countries. Our average life expectancy for both men and women is lower than the OECD average. Currently, the female life expectancy at birth in the U.S. is 81.2 years. The only OECD countries with a shorter life expectancy are Hungary, Latvia, Mexico, the Slovak Republic, and Turkey. The average life expectancy in the U.S for a male born today is 76.4 years, also one of the shortest among OECD countries.
How does the United States compare to other countries for health insurance coverage? Well, of the 34 countries with insurance data in the OECD, the only country with a lower percentage of the population covered by either government or private insurance was Greece. Thus, the U.S. was the second worse in the OECD. Thus access to healthcare in the U.S. is lower than nearly every industrialized nation.
"Life expectancy in the United States is lower than in most other OECD countries for several reasons, including poorer health-related behaviors and the highly fragmented nature of the US health system.
The proportion of adults who smoke in the United States is among the lowest in OECD countries, but alcohol consumption is rising and obesity rate is the highest.
If you were to design an effective and efficient health care system from scratch, no one would design a system anything like what we have in the U.S. today, regardless of one's political party affiliation. There are some great things about American health including the quality of our hospitals and our healthcare professionals. For a hospital medical director, it is up to us to maintain the high quality of acute care medicine and work to improve the quality of health of patients before and after they come into our hospitals. For every American, finding ways to reduce the cost of our healthcare is imperative if we are to remain competitive in world economic markets. It is up to us to decide how we catch up to the rest of the world while preserving those aspects of health care that we presently do better than anyone else.


Haitians need help, and the clothing line UNDRCRWN is heeding the call with the UNDRCRWN Assist Haiti Tee. People and organizations from around the world have banded together to help the small island nation of Haiti, which was struck by a devastating earthquake.
The UNDRCRWN Assist Haiti Tee goes for $20 and all proceeds of the shirt go to Wyclef Jean's Yele Haiti organization. A lot of people want to help but need to see something out of it. Well now you get an awesome shirt for giving. So there's no excuse not to help right?


text:
November 24, 2012 7:42PM ET
'Gangnam Style' Becomes the Most-Watched YouTube Video Ever
K-Pop star beats out Justin Bieber's 'Baby'
Miriam Coleman
Miriam Coleman's Most Recent Stories
Eddie Vedder Slams Tennessee 'Bathroom Bill' at Bonnaroo
Obama Calls Orlando Nightclub Shooting 'Act of Terror and Act of Hate'
Pantera Calls for Better Artist Protection After Christina Grimmie Shooting
Psy performs during the iHeartRadio Music Festival at the MGM Grand Garden Arena on September 21th, 2012 in Las Vegas, Nevada.
Isaac Brekken/Getty
Korean pop sensation Psy's "Gangnam Style" clip has broken the record for the most-watched YouTube video of all time. The video earned the distinction by garnering approximately 805 million views as of noon on Saturday, according to YouTube's Trends blog.
In just over four months since it was posted in July, "Gangnam Style" has surpassed the views of Justin Bieber's "Baby," which previously nabbed the record five months after its February 2010 release and now stands at some 803 million views.
While searches for "Gangnam Style" spiked in South Korea at the time it was first posted, the satire of wealthy Seoul culture began to peak in North America and Brazil in September before spiking more broadly across the world in October.
"It's been a massive hit at a global level unlike anything we've ever seen before," the YouTube post notes. "Each day, 'Gangnam Style' is still being watched between 7 and 10 million times."
The video's viral success has surely been helped by its pioneering sexy horse dance, which has now been performed by everyone from Britney Spears to MC Hammer; Madonna even brought Psy onstage with her at Madison Square Garden to perform the song and its dance earlier this month.
In This Article: Psy


text:
Expat workers abused in Jordan: HRW
The New York-based Human Rights Watch (HRW) and the Jordanian legal aid centre, Tamkeen, said many of the country's 70,000 domestic workers from Sri Lanka, Indonesia and the Philippines are subjected to beatings and their passports are confiscated by their employers, rendering them unable to leave.
Some have also been deprived of their salaries, despite legal milestones in Jordan over the past three years to protect workers rights.
The two rights groups urged Jordan to enforce the country's laws guaranteeing regular salary payments, a maximum 10-hour work day and a weekly day of rest to curtail abuse by employers and recruitment agencies.
"Our main message to Jordan is you need the political will to treat domestic workers as any other worker. Now you have given them rights, you need to protect them like any other worker," Human Rights Watch's Jordan researcher Christoph Wilcke told reporters.
Wilcke suggested that if Jordanians who abuse migrants face prison and hefty fines, this could change how they treat domestic workers.
The Jordanian Labor Ministry has just five inspectors. Tamkeen's director Linda Al-Kalash said the inspectors have not exercised their right to probe abuse claims. She also said that abuse cases are difficult to report to police in instances where the worker cannot leave the house to make the complaint.
Jordan has voted for, but has yet to ratify, the International Labor Organization's Convention on Domestic Work adopted in June.
It obliges governments to ensure decent working conditions for domestic workers. (Arab News)
Source: Daily Mirror – 28.09.2011


Panasonic's Intelligent Systems Solutions integrate performance and quality, ensuring the security you need.
Equipped with a powerful 22x zoom lens with three manual rings and the industry's first high-resolution OLED viewfinder. Easy configuration via LAN, Wi-Fi or LTE/4G/3G.
HIT solar cell modules minimize the impact on the environment in the future. This product provides industry-leading performance and value using state-of-the-art manufacturing techniques.
Panasonic Communications Systems offer a wide range of solutions to meet the needs of all kinds of businesses regardless of size or scale.
From outside sales, to healthcare to public safety, Panasonic provides the powerful and extremely secure mobile computing solution critical for enterprise and government.


Vengo Labs is reimagining how brands connect with consumers by bridging the gap between digital and real world experiences, through our growing network of mini, interactive digital vending machines that combine DOOH media with product samples and retail in gyms, hotels, colleges, offices and beyond.
Our digital out-of-home media sales team is expanding. We are seeking an upbeat, energetic and self-motivated sales exec. If you've got 5-7 years digital sales experience calling on Fortune 500 advertisers and digital agencies, including at least 1-2 years of DOOH, we want to talk to you. If you are looking to build your career in sales, this job is for you! You should feel comfortable working in a competitive, high energy, fast-paced environment. The ideal candidate must be enthusiastic, hardworking, know how to close and have the desire to win. In this role, you will call on Fortune 500 advertisers and Tier 1 DOOH agencies, both direct and programmatic, and should come with relationships in this area.
Please email your resume to work@vengolabs.com and let us know why you're the right person for the job.
Vengo Labs has redefined the concept of vending through its mini, interactive, and digital vending machines that serve not only consumer-packaged goods but also digital advertisements. The machines create a seamless user experience by combining the convenience of online shopping with immediate access to products of traditional brick-and-mortar retail by blending technology with fluid design. Accepting cashless payments and providing product information, the units are strategically installed in locations where people need them the most and throughout college campuses, gyms, and hotels.
The Full Stack Software Engineer is primarily responsible for the ongoing design, development and operation of our Ruby on Rails management platform and API. You'll be an integral part of efforts to shape, develop and manage our capabilities, implement and manage customer and product solutions, leveraging creative capabilities, data, and infrastructure across various owned and operated properties.
Drive new features through full the development cycle from requirements all the way through release and maintenance.


Season grade: Above-average. The Browns' strong finish generates a lot of excitement for the future, and that begins and ends with the quarterback. General manager John Dorsey nailed it when he made Baker Mayfield the first overall pick of the 2018 draft. Mayfield played with far more savvy than many veterans, and revived the Browns' offense with a record-setting season when he set the mark for most TD passes by a rookie. It took a midseason coaching change to bring things together, but when the Browns jelled they played like a team that should compete for a playoff spot in 2019.
Season in review: There were two elements to 2019. The first centered on coach Hue Jackson, offensive coordinator Todd Haley and quarterback Tyrod Taylor. They were going to guide the Browns. But Jackson won just two of the first eight games, Haley did not work out and Taylor started three games before losing his job to Mayfield, who took firm hold of it the second he stepped on the field. When the Browns fell to 2-5-1, Jackson and Haley were fired, and defensive coordinator Gregg Williams was named interim coach with Freddie Kitchens offensive coordinator. The entire season changed. Mayfield used more quick drops and found synergy with Kitchens. Williams made everything competitive, pitting starters against starters in practice. Mayfield talked of a reset, and the Browns responded by playing Kansas City well in a loss, then reeling off five wins in the last seven games. The Browns finally flipped the script on the losing culture, and buoyed by Mayfield, rookie running back Nick Chubb, Dorsey and an aggressive defense that includes young talent like Denzel Ward and Myles Garrett, they point to 2019 with optimism and high expectations.
He said it: "When I woke up this morning, I was feeling pretty dangerous." -- Browns quarterback Baker Mayfield, after the Browns' win over Atlanta, uttering a phrase that was his rallying cry at Oklahoma and which became the Browns' in 2018.
Who's the coach? Dorsey's task a year ago was to identify and find a quarterback. Having checked off that task, Dorsey now must find the coach who can guide the quarterback. This hire will be every bit as important as finding the quarterback, because this hire will guide Mayfield's long-term future.
Who calls plays? Kitchens was little-known and much-questioned when he took over playcalling duties. But he stepped into the job like he'd done it all his life. Kitchens used different formations and creativity to jump start the offense. He aligned with Mayfield, and relied on his players to tell him what they liked and what would work. His impact was immense. Keeping him as the playcaller would seem wise, but if the Browns hire an offensive coach, that new coach may well want to call the plays himself.
How will Dorsey use all that salary cap room? The Browns are projected to have close to $80 million in salary cap room in 2019, an enormous amount of space that will again allow Dorsey to add veterans to the roster. He will need to save some of that space for draft picks and future contract extensions -- Joe Schobert's is one deal that is up after next season -- but he still will have tremendous flexibility to bolster certain positions. Among them: Receiver, offensive line depth, linebacker and secondary depth. Dorsey was a whirlwind last offseason; he has the ability to be just as busy this one.


text:
Australia / Israel Review
Home » Asia Watch: In the balance
Asia Watch: In the balance
May 5, 2020 | Michael Shannon
The coronavirus pandemic is adding an extra layer of hardship to impoverished southern Thailand, already struggling to contain the disproportionate growth of infections, yet the lockdown has brought about a rare cessation of hostilities in the insurgency-stricken region.
Ripple effects from the viral outbreak have hit the region's fishing and rubber farming industries, and the closure of the Thai-Malaysia border trapped nearly 100,000 Thai workers on the wrong side. The border provinces are already among the country's most impoverished, with an average household income of 15,000 to 20,000 baht (A$720 to A$965) per month, compared with 45,500 baht (A$2,170) in Bangkok.
Confirmed infections in the southernmost provinces account for 11% of cases recorded nationwide since January, although the mostly Muslim, Malay-speaking region comprises just 3.5% of Thailand's total population.
Meanwhile, the office that oversees Muslim affairs has ordered mosques closed nationwide and banned activities associated with Ramadan, which began in late April, including food bazaars, invitations to break the daily fast with friends and colleagues, and large groupings for evening prayers.
Thai authorities already have to walk a fine line, enforcing public health measures while avoiding offending religious sensibilities, but appear to have been blindsided by the disastrous timing of the massive Islamic revivalist gatherings held by Tablighi Jamaat.
As mentioned in last month's column, hundreds of followers of the India-based missionary group tested positive for the coronavirus after attending gatherings in Malaysia, India and Pakistan, despite warnings from medical personnel and fellow Muslims to observe social distancing. Other followers who travelled to Sulawesi in Indonesia to attend another gathering, which was eventually cancelled, also caught the virus.
Around 340 Thai Tablighi Jamaat followers who attended the Malaysian event or had travelled for the Indonesian gathering have tested positive for COVID-19 since returning home. This cluster included 170 residents of the Thai deep south. Most of those infected did not display any symptoms upon their return, but steadily streamed into hospitals in the weeks that followed.
On March 17, only four cases had been detected in the southern border region, but that number had jumped to more than 280 by mid-April.
Containing the virus in the Muslim-majority, Malay-speaking far south is a task complicated by the ongoing separatist insurgency that has claimed more than 7,000 lives over the past 16 years. Yet, the insidious spread of COVID-19 through the region has achieved what many years of counter-insurgency operations could not – a ceasefire.
On April 3, the Barisan Revolusi Nasional (National Revolutionary Front, or BRN) which has spearheaded the separatist revolt, announced it was willing, at least temporarily, to put down its arms on humanitarian grounds and facilitate the response to a threat it described as the "principal enemy of the human race", so long as the Thai military refrained from attacking its forces.
The declaration by BRN came two months after its military wing and the Thai government announced that they had opened direct talks facilitated by Malaysia, but the path since then has hardly been smooth.
Thai security forces have continued targeted raids on insurgent safe houses, leading to clashes, bombings and arrests. BRN leaders have complained that these operations – reportedly based on improved operational intelligence – are at odds with Bangkok's stated goal of advancing peace.
Larger sweeps through mountains and jungles where BRN fighters hide out have also taken a toll. In February, a running battle in the mountains of Narathiwat saw six fighters surrounded and killed in the largest single loss to BRN's military wing since 2013.
One of the largest operations to date unfolded in mid-March when security forces closed in on a group of rebel fighters camped in marshland close to Yala city. After dragging on for nine days, the operation left four rebels dead along with one Thai soldier killed and six others wounded.
The BRN struck back with a massive car-bomb attack on March 17 on the headquarters of the Southern Border Provinces Administration Centre (SBPAC) in Yala city which injured some 25 people but miraculously caused no fatalities. The ceasefire announcement followed soon afterwards.
The Thai Government has not yet given an official response to the announcement, although a spokesman for the military's southern regional command indicated that security forces would carry on with enforcing laws "to keep internal peace, regardless of [a] ceasefire."
Mutual suspicion between the two camps remains high. Hopes that the pandemic pause could create an opening for a lasting peace appear slim.
Tags: Asia, coronavirus, Thailand
Behind the News – May 2020
A Sheikh's Travels
Jan 30, 2023 | Australia/Israel Review
Media Microscope: Views from the Mount
The Mission of Gen. Herzl Halevi
EDITIONS BY YEAR


text:
Cladochaeta sclerstyla är en tvåvingeart som beskrevs av David Grimaldi och Nguyen 1999. Cladochaeta sclerstyla ingår i släktet Cladochaeta och familjen daggflugor.

Artens utbredningsområde är Panama. Inga underarter finns listade i Catalogue of Life.

Källor

Daggflugor
sclerstyla

redpajama_set_name: RedPajamaWikipedia


text:
Q: JAXB (JAX-WS): empty tag when value is null I have soap web service. When I perform request to it with null parameter, on server I receive not null parameter.
There is an empty tag in request: <SomeValue></SomeValue>, so this interpreting like not null but empty object, and I don't know why, because according to JSR 222 (I'm using java 1.6), null value is mapping to soap message by jaxb not like an empty tag, but like no tag at all.
In wsdl is marked that this param can be null.
This parameter is represented by class:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SomeValue")
public class SomeValue {

    @XmlElement(name = "list", nillable = true)
    protected List<SomeElement> list;

    public List<SomeElement> getList() {
        if (list == null) {
            list = new ArrayList<SomeElement>();
        }
        return this.list;
    }

}

A: I'm thinking that your empty element values resolve to some translation of an empty value and that null is only resolved by omitting that element in the request altogether.


text:
Author : ABDULHALİK BAKIR -Ebru Emine OĞUZ
Number of pages : 1-35
Korea is a peninsular country, locates at the north eastern corner of Asia, ruled by numerous dynasties throughout her history. China to the west and Russia to the north Korea has two major neighbours; also at the east and south facing with the Japan islands. Old Joseon, the first established Korean state had significant continuing effects in the history of the country and the collapse of that state by Han Dynasty China was a turning point. After that invasion, while four Chinese administrative regions were established in Korea which led to spread the Chinese culture that is still felt in the country; particularly Confucianism left a great impress in Korea from trade to industry and also social life to education. In Korea, the lack of an advanced monetary system and instead of it using all kinds of goods in tax collection and trading caused so many difficulties in transporting them. Relating to its geographical location largest tides of the world in that region not only prevented the improvement of maritime but also caused shipwrecks. Although all of them had shown a negative image, regions that the warehouses were established in, at the banks of the sea and river, developed in the economical sense and ceramics industry. Furthermore the ceramics were recovered from shipwrecks helped us to obtain important information about the ceramics of that period. In 1370's the introduction of cotton seed to the county by a Korean intellectual, who visited South China, led the production of thread that would revolutionize Korea's clothing. Silk production was always encouraged by the dynasties in Korea where fabric of silk was considered sacred. In Korea, commercial relations with the outside world. The sword production also took a crucial place, but through the teachings of Confucianism, in other words, despite her strong neighbours, its (Confucianism) refusing tolerate the war made the sword masters to leave the country that was caused a stagnation in sword production. Our subject in this study, preparing by using mainly foreign sources is Korea's improvement during the historical process, also her geographical location and conditions; and her being shaped by means of the adoption of Chinese culture after Chinese invasion in medieval era.
Dynasty, Confucianism, seladon, ceramics, silk
@article{2019,title={},abstractNode={Korea is a peninsular country, locates at the north eastern corner of Asia, ruled by numerous dynasties throughout her history. China to the west and Russia to the north Korea has two major neighbours; also at the east and south facing with the Japan islands. Old Joseon, the first established Korean state had significant continuing effects in the history of the country and the collapse of that state by Han Dynasty China was a turning point. After that invasion, while four Chinese administrative regions were established in Korea which led to spread the Chinese culture that is still felt in the country; particularly Confucianism left a great impress in Korea from trade to industry and also social life to education. In Korea, the lack of an advanced monetary system and instead of it using all kinds of goods in tax collection and trading caused so many difficulties in transporting them. Relating to its geographical location largest tides of the world in that region not only prevented the improvement of maritime but also caused shipwrecks. Although all of them had shown a negative image, regions that the warehouses were established in, at the banks of the sea and river, developed in the economical sense and ceramics industry. Furthermore the ceramics were recovered from shipwrecks helped us to obtain important information about the ceramics of that period. In 1370's the introduction of cotton seed to the county by a Korean intellectual, who visited South China, led the production of thread that would revolutionize Korea's clothing. Silk production was always encouraged by the dynasties in Korea where fabric of silk was considered sacred. In Korea, commercial relations with the outside world. The sword production also took a crucial place, but through the teachings of Confucianism, in other words, despite her strong neighbours, its (Confucianism) refusing tolerate the war made the sword masters to leave the country that was caused a stagnation in sword production. Our subject in this study, preparing by using mainly foreign sources is Korea's improvement during the historical process, also her geographical location and conditions; and her being shaped by means of the adoption of Chinese culture after Chinese invasion in medieval era. },author={ABDULHALİK BAKIR-Ebru Emine OĞUZ},year={2019},journal={Cappadocia Journal of History and Social Sciences}}
ABDULHALİK BAKIR-Ebru Emine OĞUZ . 2019 . . Cappadocia Journal of History and Social Sciences.DOI:10.29228/cahij.39263
ABDULHALİK BAKIR-Ebru Emine OĞUZ.(2019)..Cappadocia Journal of History and Social Sciences
ABDULHALİK BAKIR-Ebru Emine OĞUZ,"" , Cappadocia Journal of History and Social Sciences (2019)
ABDULHALİK BAKIR-Ebru Emine OĞUZ . 2019 . . Cappadocia Journal of History and Social Sciences . 2019. DOI:10.29228/cahij.39263
ABDULHALİK BAKIR-Ebru Emine OĞUZ .. Cappadocia Journal of History and Social Sciences (2019)
ABDULHALİK BAKIR-Ebru Emine OĞUZ. (2019) . Cappadocia Journal of History and Social Sciences
ABDULHALİK BAKIR-Ebru Emine OĞUZ . . Cappadocia Journal of History and Social Sciences . 2019 doi:10.29228/cahij.39263
ABDULHALİK BAKIR-Ebru Emine OĞUZ."",Cappadocia Journal of History and Social Sciences(2019)
Read: 3,574
Download: 1,271
See in Different Languages


text:
/*
 * ModeShape (http://www.modeshape.org)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.modeshape.jcr.query.validate;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.jcr.PropertyType;
import javax.jcr.Value;
import javax.jcr.query.qom.Literal;
import org.modeshape.common.collection.Problems;
import org.modeshape.common.i18n.I18n;
import org.modeshape.common.text.Jsr283Encoder;
import org.modeshape.jcr.GraphI18n;
import org.modeshape.jcr.api.query.qom.Operator;
import org.modeshape.jcr.query.PseudoColumns;
import org.modeshape.jcr.query.QueryContext;
import org.modeshape.jcr.query.model.AllNodes;
import org.modeshape.jcr.query.model.ArithmeticOperand;
import org.modeshape.jcr.query.model.Cast;
import org.modeshape.jcr.query.model.ChildCount;
import org.modeshape.jcr.query.model.ChildNode;
import org.modeshape.jcr.query.model.ChildNodeJoinCondition;
import org.modeshape.jcr.query.model.Column;
import org.modeshape.jcr.query.model.Comparison;
import org.modeshape.jcr.query.model.DescendantNode;
import org.modeshape.jcr.query.model.DescendantNodeJoinCondition;
import org.modeshape.jcr.query.model.DynamicOperand;
import org.modeshape.jcr.query.model.EquiJoinCondition;
import org.modeshape.jcr.query.model.FullTextSearch;
import org.modeshape.jcr.query.model.FullTextSearchScore;
import org.modeshape.jcr.query.model.Length;
import org.modeshape.jcr.query.model.LowerCase;
import org.modeshape.jcr.query.model.NamedSelector;
import org.modeshape.jcr.query.model.NodeDepth;
import org.modeshape.jcr.query.model.NodeLocalName;
import org.modeshape.jcr.query.model.NodeName;
import org.modeshape.jcr.query.model.NodePath;
import org.modeshape.jcr.query.model.Ordering;
import org.modeshape.jcr.query.model.PropertyExistence;
import org.modeshape.jcr.query.model.PropertyValue;
import org.modeshape.jcr.query.model.Query;
import org.modeshape.jcr.query.model.ReferenceValue;
import org.modeshape.jcr.query.model.SameNode;
import org.modeshape.jcr.query.model.SameNodeJoinCondition;
import org.modeshape.jcr.query.model.SelectorName;
import org.modeshape.jcr.query.model.StaticOperand;
import org.modeshape.jcr.query.model.Subquery;
import org.modeshape.jcr.query.model.TypeSystem;
import org.modeshape.jcr.query.model.UpperCase;
import org.modeshape.jcr.query.model.Visitable;
import org.modeshape.jcr.query.model.Visitor;
import org.modeshape.jcr.query.model.Visitors;
import org.modeshape.jcr.query.model.Visitors.AbstractVisitor;
import org.modeshape.jcr.query.validate.Schemata.Table;
import org.modeshape.jcr.value.Name;
import org.modeshape.jcr.value.Path;
import org.modeshape.jcr.value.ValueFormatException;

/**
 * A {@link Visitor} implementation that validates a query's used of a {@link Schemata} and records any problems as errors.
 */
public class Validator extends AbstractVisitor {

    private final QueryContext context;
    private final Problems problems;
    private final Map<SelectorName, Table> selectorsByNameOrAlias;
    private final Map<SelectorName, Table> selectorsByName;
    private final Map<String, Schemata.Column> columnsByAlias;
    private final boolean validateColumnExistence;

    /**
     * @param context the query context
     * @param selectorsByName the {@link Table tables} by their name or alias, as defined by the selectors
     */
    public Validator( QueryContext context,
                      Map<SelectorName, Table> selectorsByName ) {
        this.context = context;
        this.problems = this.context.getProblems();
        this.selectorsByNameOrAlias = selectorsByName;
        this.selectorsByName = new HashMap<SelectorName, Table>();
        for (Table table : selectorsByName.values()) {
            this.selectorsByName.put(table.getName(), table);
        }
        this.columnsByAlias = new HashMap<String, Schemata.Column>();
        this.validateColumnExistence = context.getHints().validateColumnExistance;
    }

    @Override
    public void visit( AllNodes obj ) {
        // this table doesn't have to be in the list of selected tables
        verifyTable(obj.name());
    }

    @Override
    public void visit( ArithmeticOperand obj ) {
        verifyArithmeticOperand(obj.getLeft());
        verifyArithmeticOperand(obj.getRight());
    }

    protected void verifyArithmeticOperand( DynamicOperand operand ) {
        // The left and right operands must have LONG or DOUBLE types ...
        if (operand instanceof NodeDepth) {
            // good to go
        } else if (operand instanceof ChildCount) {
            // good to go
        } else if (operand instanceof Length) {
            // good to go
        } else if (operand instanceof ArithmeticOperand) {
            // good to go
        } else if (operand instanceof FullTextSearchScore) {
            // good to go
        } else if (operand instanceof PropertyValue) {
            PropertyValue value = (PropertyValue)operand;
            SelectorName selector = value.selectorName();
            String propertyName = value.getPropertyName();
            Schemata.Column column = verify(selector, propertyName, this.validateColumnExistence);
            if (column != null) {
                // Check the type ...
                String columnType = column.getPropertyTypeName();
                TypeSystem types = context.getTypeSystem();
                String longType = types.getLongFactory().getTypeName();
                String doubleType = types.getDoubleFactory().getTypeName();
                if (longType.equals(types.getCompatibleType(columnType, longType))) {
                    // Then the column type is long or can be converted to long ...
                } else if (doubleType.equals(types.getCompatibleType(columnType, doubleType))) {
                    // Then the column type is double or can be converted to double ...
                } else {
                    I18n msg = GraphI18n.columnTypeCannotBeUsedInArithmeticOperation;
                    problems.addError(msg, selector, propertyName, columnType);
                }
            }
        } else {
            I18n msg = GraphI18n.dynamicOperandCannotBeUsedInArithmeticOperation;
            problems.addError(msg, operand);
        }
    }

    @Override
    public void visit( ChildCount obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( ChildNode obj ) {
        verify(obj.selectorName());
        verifyPath(obj.getParentPath());
    }

    @Override
    public void visit( ChildNodeJoinCondition obj ) {
        verify(obj.parentSelectorName());
        verify(obj.childSelectorName());
    }

    @Override
    public void visit( Column obj ) {
        verify(obj.selectorName(), obj.getPropertyName(), this.validateColumnExistence); // don't care about the alias
    }

    @Override
    public void visit( Comparison obj ) {
        // The dynamic operand itself will be visited by the validator as it walks the comparison object.
        verifyComparison(obj.getOperand1(), obj.operator(), obj.getOperand2());
    }

    @Override
    public void visit( DescendantNode obj ) {
        verify(obj.selectorName());
        verifyPath(obj.getAncestorPath());
    }

    @Override
    public void visit( DescendantNodeJoinCondition obj ) {
        verify(obj.ancestorSelectorName());
        verify(obj.descendantSelectorName());
    }

    @Override
    public void visit( EquiJoinCondition obj ) {
        verify(obj.selector1Name(), obj.getProperty1Name(), this.validateColumnExistence);
        verify(obj.selector2Name(), obj.getProperty2Name(), this.validateColumnExistence);
    }

    @Override
    public void visit( FullTextSearch obj ) {
        SelectorName selectorName = obj.selectorName();
        if (obj.getPropertyName() != null) {
            Schemata.Column column = verify(selectorName, obj.getPropertyName(), this.validateColumnExistence);
            if (column != null) {
                // Make sure the column is full-text searchable ...
                if (!column.isFullTextSearchable()) {
                    problems.addError(GraphI18n.columnIsNotFullTextSearchable, column.getName(), selectorName);
                }
            }
        } else {
            Table table = verify(selectorName);
            // Don't need to check if the selector is the '__ALLNODES__' selector ...
            if (table != null && !AllNodes.ALL_NODES_NAME.equals(table.getName())) {
                // Make sure there is at least one column on the table that is full-text searchable ...
                boolean searchable = false;
                for (Schemata.Column column : table.getColumns()) {
                    if (column.isFullTextSearchable()) {
                        searchable = true;
                        break;
                    }
                }
                if (!searchable) {
                    problems.addError(GraphI18n.tableIsNotFullTextSearchable, selectorName);
                }
            }
        }
    }

    @Override
    public void visit( FullTextSearchScore obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( Length obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( LowerCase obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( NamedSelector obj ) {
        verify(obj.aliasOrName());
    }

    @Override
    public void visit( NodeDepth obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( NodeLocalName obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( NodeName obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( NodePath obj ) {
        verify(obj.selectorName());
    }

    @Override
    public void visit( Ordering obj ) {
        verifyOrdering(obj.getOperand());
    }

    @Override
    public void visit( PropertyExistence obj ) {
        verify(obj.selectorName(), obj.getPropertyName(), this.validateColumnExistence);
    }

    @Override
    public void visit( PropertyValue obj ) {
        verify(obj.selectorName(), obj.getPropertyName(), this.validateColumnExistence);
    }

    @Override
    public void visit( ReferenceValue obj ) {
        String propName = obj.getPropertyName();
        if (propName != null) {
            verify(obj.selectorName(), propName, this.validateColumnExistence);
        } else {
            verify(obj.selectorName());
        }
    }

    @Override
    public void visit( Query obj ) {
        // Collect the map of columns by alias for this query ...
        this.columnsByAlias.clear();
        for (Column column : obj.columns()) {
            // Find the schemata column ...
            Table table = tableWithNameOrAlias(column.selectorName());
            if (table != null) {
                Schemata.Column tableColumn = table.getColumn(column.getPropertyName());
                if (tableColumn != null) {
                    this.columnsByAlias.put(column.getColumnName(), tableColumn);
                }
            }
        }
        super.visit(obj);
    }

    @Override
    public void visit( Subquery subquery ) {
        // Don't validate subqueries; this is done as a separate step ...
    }

    @Override
    public void visit( SameNode obj ) {
        verify(obj.selectorName());
        verifyPath(obj.getPath());
    }

    @Override
    public void visit( SameNodeJoinCondition obj ) {
        verify(obj.selector1Name());
        verify(obj.selector2Name());
    }

    protected String readable( Visitable visitable ) {
        return Visitors.readable(visitable, context.getExecutionContext());
    }

    protected void verifyOrdering( DynamicOperand operand ) {
        if (operand instanceof PropertyValue) {
            PropertyValue propValue = (PropertyValue)operand;
            verifyOrdering(propValue.selectorName(), propValue.getPropertyName());
        } else if (operand instanceof ReferenceValue) {
            ReferenceValue value = (ReferenceValue)operand;
            verifyOrdering(value.selectorName(), value.getPropertyName());
        } else if (operand instanceof Length) {
            Length length = (Length)operand;
            verifyOrdering(length.getPropertyValue());
        } else if (operand instanceof LowerCase) {
            verifyOrdering(((LowerCase)operand).getOperand());
        } else if (operand instanceof UpperCase) {
            verifyOrdering(((UpperCase)operand).getOperand());
            // } else if (operand instanceof NodeDepth) {
            // NodeDepth depth = (NodeDepth)operand;
            // verifyOrdering(depth.selectorName(), "mode:depth");
            // } else if (operand instanceof NodePath) {
            // NodePath depth = (NodePath)operand;
            // verifyOrdering(depth.selectorName(), "jcr:path");
            // } else if (operand instanceof NodeLocalName) {
            // NodeLocalName depth = (NodeLocalName)operand;
            // verifyOrdering(depth.selectorName(), "mode:localName");
            // } else if (operand instanceof NodeName) {
            // NodeName depth = (NodeName)operand;
            // verifyOrdering(depth.selectorName(), "jcr:name");
        } else if (operand instanceof ArithmeticOperand) {
            // The LEFT and RIGHT dynamic operands must both work with this operator ...
            ArithmeticOperand arith = (ArithmeticOperand)operand;
            verifyOrdering(arith.getLeft());
            verifyOrdering(arith.getRight());
        } else if (operand instanceof Cast) {
            verifyOrdering(((Cast)operand).getOperand());
        }
    }

    protected void verifyOrdering( SelectorName selectorName,
                                   String propertyName ) {
        Schemata.Column column = verify(selectorName, propertyName, false);
        if (column != null && !column.isOrderable()) {
            problems.addError(GraphI18n.columnInTableIsNotOrderable, propertyName, selectorName.getString());
        }
    }

    @SuppressWarnings( "fallthrough" )
    protected void verifyComparison( DynamicOperand operand,
                                     Operator op,
                                     StaticOperand rhs ) {
        if (operand instanceof PropertyValue) {
            PropertyValue propValue = (PropertyValue)operand;
            verifyOperator(propValue.selectorName(), propValue.getPropertyName(), op);
        } else if (operand instanceof NodeName) {
            // Verify that the rhs is convertable to a name ...
            if (rhs instanceof Literal) {
                boolean fail = false;
                // The literal value must be a NAME or URI ...
                Literal literal = (Literal)rhs;
                Value value = literal.getLiteralValue();
                try {
                    String str = value.getString();
                    switch (value.getType()) {
                        case PropertyType.PATH:
                            Path path = context.getExecutionContext().getValueFactories().getPathFactory().create(str);
                            if (path.size() != 1 || path.isAbsolute()) {
                                fail = true;
                                break;
                            } // else continue with the regular processing ...
                        case PropertyType.STRING:
                        case PropertyType.URI:
                        case PropertyType.NAME:
                        case PropertyType.BINARY:
                            try {
                                if (str.startsWith("./") && str.length() > 2) {
                                    // Then it is a URI, and per 3.6.4.9 the './' prefix should be removed ...
                                    str = str.substring(2);
                                }
                                // LIKE operator can have encodeable characters, but others cannot ...
                                if (op != Operator.LIKE) {
                                    // It needs to be convertable to a name ...
                                    Name name = context.getExecutionContext().getValueFactories().getNameFactory().create(str);
                                    if (Jsr283Encoder.containsEncodeableCharacters(name.getLocalName())) {
                                        fail = true;
                                    }
                                }
                            } catch (ValueFormatException e) {
                                // nope ...
                                fail = true;
                            } catch (IllegalArgumentException e) {
                                // nope ...
                                fail = true;
                            }
                            break;
                        default:
                            fail = true;
                            break;
                    }
                } catch (javax.jcr.RepositoryException e) {
                    // nope ...
                    fail = true;
                }
                if (fail) {
                    problems.addError(GraphI18n.nameOperandRequiresNameLiteralType, readable(operand), op.symbol(), readable(rhs));
                }
            }
        } else if (operand instanceof ReferenceValue) {
            ReferenceValue value = (ReferenceValue)operand;
            verifyOperator(value.selectorName(), value.getPropertyName(), op);
        } else if (operand instanceof Length) {
            Length length = (Length)operand;
            verifyComparison(length.getPropertyValue(), op, rhs);
            // Verify that the rhs is a long or convertable to a long ...
            if (rhs instanceof Literal) {
                try {
                    ((Literal)rhs).getLiteralValue().getLong();
                } catch (javax.jcr.RepositoryException e) {
                    // nope ...
                    problems.addError(GraphI18n.lengthOperandRequiresLongLiteralType,
                                      readable(operand),
                                      op.symbol(),
                                      readable(rhs));
                }
            }
        } else if (operand instanceof LowerCase) {
            verifyComparison(((LowerCase)operand).getOperand(), op, rhs);
        } else if (operand instanceof UpperCase) {
            verifyComparison(((UpperCase)operand).getOperand(), op, rhs);
            // } else if (operand instanceof NodeDepth) {
            // NodeDepth depth = (NodeDepth)operand;
            // verifyOperator(depth.selectorName(), "mode:depth", op);
            // } else if (operand instanceof NodePath) {
            // NodePath depth = (NodePath)operand;
            // verifyOperator(depth.selectorName(), "jcr:path", op);
            // } else if (operand instanceof NodeLocalName) {
            // NodeLocalName depth = (NodeLocalName)operand;
            // verifyOperator(depth.selectorName(), "mode:localName", op);
            // } else if (operand instanceof NodeName) {
            // NodeName depth = (NodeName)operand;
            // verifyOperator(depth.selectorName(), "jcr:name", op);
        } else if (operand instanceof ArithmeticOperand) {
            // The LEFT and RIGHT dynamic operands must both work with this operator ...
            ArithmeticOperand arith = (ArithmeticOperand)operand;
            verifyComparison(arith.getLeft(), op, rhs);
            verifyComparison(arith.getRight(), op, rhs);
        } else if (operand instanceof Cast) {
            verifyComparison(((Cast)operand).getOperand(), op, rhs);
        }
    }

    protected void verifyOperator( SelectorName selectorName,
                                   String propertyName,
                                   Operator op ) {
        Schemata.Column column = verify(selectorName, propertyName, false);
        if (column != null) {
            if (!column.getOperators().contains(op)) {
                StringBuilder sb = new StringBuilder();
                boolean first = true;
                for (Operator allowed : column.getOperators()) {
                    if (first) first = false;
                    else sb.append(", ");
                    sb.append(allowed.symbol());
                }
                problems.addError(GraphI18n.operatorIsNotValidAgainstColumnInTable,
                                  op.symbol(),
                                  propertyName,
                                  selectorName.getString(),
                                  sb);
            }
        }
    }

    protected Table tableWithNameOrAlias( SelectorName tableName ) {
        Table table = selectorsByNameOrAlias.get(tableName);
        if (table == null) {
            // Try looking up the table by it's real name (if an alias were used) ...
            table = selectorsByName.get(tableName);
        }
        return table; // may be null
    }

    protected Table verify( SelectorName selectorName ) {
        Table table = tableWithNameOrAlias(selectorName);
        if (table == null) {
            problems.addError(GraphI18n.tableDoesNotExist, selectorName.name());
        }
        return table; // may be null
    }

    protected Table verifyTable( SelectorName tableName ) {
        Table table = tableWithNameOrAlias(tableName);
        if (table == null) {
            problems.addError(GraphI18n.tableDoesNotExist, tableName.name());
        }
        return table; // may be null
    }

    protected void verifyPath( String pathStr ) {
        try {
            Path path = context.getExecutionContext().getValueFactories().getPathFactory().create(pathStr);
            if (!path.isAbsolute()) {
                problems.addError(GraphI18n.pathIsNotAbsolute, pathStr);
            }
        } catch (IllegalArgumentException e) {
            problems.addError(GraphI18n.pathIsNotValid, pathStr);
        } catch (ValueFormatException e) {
            problems.addError(GraphI18n.pathIsNotValid, pathStr);
        }
    }

    protected Schemata.Column verify( SelectorName selectorName,
                                      String propertyName,
                                      boolean columnIsRequired ) {
        Table table = tableWithNameOrAlias(selectorName);
        if (table == null) {
            StringBuilder existingSelectors = new StringBuilder();
            boolean first = true;
            for (SelectorName sel : selectorsByNameOrAlias.keySet()) {
                if (first) first = false;
                else existingSelectors.append(", ");
                existingSelectors.append("'").append(sel.getString()).append("'");
            }
            problems.addError(GraphI18n.tableDoesNotExistButMatchesAnotherTable, selectorName.name(), existingSelectors);
            return null;
        }
        Schemata.Column column = table.getColumn(propertyName);
        if (column == null) {
            // Maybe the supplied property name is really an alias ...
            column = this.columnsByAlias.get(propertyName);
            boolean propertyNameIsWildcard = propertyName == null || "*".equals(propertyName);
            if (column == null && !propertyNameIsWildcard && !PseudoColumns.contains(propertyName, true)) {
                if (!table.hasExtraColumns() && columnIsRequired) {
                    problems.addError(GraphI18n.columnDoesNotExistOnTable, propertyName, selectorName.name());
                    checkVariationsOfPropertyName(selectorName, propertyName, table, problems);
                } else {
                    if (!checkVariationsOfPropertyName(selectorName, propertyName, table, problems)) {
                        problems.addWarning(GraphI18n.columnDoesNotExistOnTableAndMayBeResidual, propertyName,
                                            selectorName.name());
                    }
                }
            }
        }
        return column; // may be null
    }

    protected boolean checkVariationsOfPropertyName( SelectorName selector,
                                                     String propertyName,
                                                     Table actualTable,
                                                     Problems problems ) {
        Set<String> vars = new HashSet<String>();
        vars.add(propertyName);

        // Now add some common misspellings ...
        vars.add(propertyName.replace('.', ':')); // period instead of colon
        vars.add(propertyName.replace('_', ':')); // underscore instead of colon
        if ("jcr:mixinType".equalsIgnoreCase(propertyName) || "jcr.mixinType".equalsIgnoreCase(propertyName)) {
            vars.add("jcr:mixinTypes");
        }
        if ("jcr:uid".equalsIgnoreCase(propertyName) || "jcr:uuuid".equalsIgnoreCase(propertyName)) {
            vars.add("jcr:uuid");
        }

        // Look to see if any of these variations can be found on any of the selectors ...
        boolean found = false;
        for (SelectorName selectorName : selectorsByNameOrAlias.keySet()) {
            Table table = tableWithNameOrAlias(selectorName);
            for (String var : vars) {
                if (table != null && table.getColumn(var) != null) {
                    if (table == actualTable) {
                        problems.addWarning(GraphI18n.columnDoesNotExistOnTableAndMayBeTypo, propertyName, selector.name(), var);
                        found = true;
                    } else {
                        problems.addWarning(GraphI18n.columnDoesNotExistOnTableAndMayBeWrongSelector,
                                            propertyName,
                                            selector.name(),
                                            var,
                                            selectorName.name());
                        found = true;
                    }
                }
            }
        }
        return found;
    }
}

redpajama_set_name: RedPajamaGithub


We face the sadness which grief brings on a daily basis. It is with great pride that we are able to give support to those in need.
We help families by providing services, which help them remember the lives of the loved ones they have lost.
We remember the families who have lost loved ones; with prayers, hugs and gestures on kindness.