text:
Wedgwood in Seattle History
Valarie's blog, exploring stories of Seattle neighborhoods
← Houses in Wedgwood: from Craftsman to Balch
The Holiday Season in Wedgwood →
The Wedgwood That Never Was: Charles H. Baker's Land Investment
Posted on December 17, 2012	by Wedgwood in Seattle History
Charles H. Baker is a little-known early Seattleite though his legacy affects every person living in Seattle today. Baker conceived of and built the electrical generating plant at Snoqualmie Falls, completed in 1899, which continues to operate today.
Charles Baker never lived in Wedgwood but he owned land and filed two plats in 1889 and 1890, along with a group of land speculators and investors. It is ironic that although Baker was one of the earliest land owners in Wedgwood, Wedgwood was one of the last neighborhoods of Seattle to get electricity (about 1923.)
Wedgwood might have been developed earlier if it had not been for the unfavorable economic conditions of the 1890s in Seattle.
Capt. DeWitt C. Kenyon in Civil War uniform. Courtesy of http://www.findagrave.com/
In the 1880s some parts of Wedgwood were the homestead claims of Civil War veterans who came out West from other states. One Civil War veteran, Capt. DeWitt C. Kenyon of Michigan, spent about fourteen years in Seattle before retiring to California. Capt. Kenyon had 160 acres of land, made up of four forty-acre squares. One of the forty-acre squares was south of NE 75th Street and included the present site of Eckstein Middle School. The other three-fourths of Capt. Kenyon's land was from NE 75th to 80th Streets, 30th to 45th Avenues NE.
When Capt. Kenyon moved to California he left his property to be sold by an agent appointed attorney-in-fact. On February 29, 1888, the entire 160 acres was sold for $2550 to Charles H. Baker and a consortium of real estate investors.
Snoqualmie Falls is located about 40 miles east of Seattle.
Charles H. Baker was only 23 years old and not yet married when he arrived in Seattle in 1887. He had a civil engineering degree from Cornell University in New York and he obtained work in Seattle as a surveyor for the Seattle, Lake Shore & Eastern Railroad. (The SLS&E was organized by Judge Thomas Burke and Daniel Gilman, and today's Burke-Gilman Trail follows the old railroad line.)
Snoqualmie Falls, located almost forty miles east of Seattle in the foothills of the Cascade Mountains, was already known to early Seattleites as a scenic site. The SLS&E organizers wanted Baker to lay out an extension of the railroad route to pass close by the Falls which they envisioned as a picnic destination. Baker, however, had other ideas. When he saw the Falls he immediately thought of the potential for generating hydroelectric power. He called Snoqualmie "the wasting waterfall" because its power was as yet unharnessed. He began to make plans to put the waterfall to work to bring electricity to the cities of Seattle and Tacoma.
Representatives of Thomas Edison, inventor of electric lights in 1882, came to Seattle on March 22, 1886, about a year before Baker arrived. After giving a convincing exhibition of how electric lights worked, representatives and local businessmen formed the Seattle Electric Company. They obtained a franchise from the Seattle City Council for electric streetlights. On March 31, 1889, the first electric streetcars began running in Seattle. After Seattle's Great Fire of June 6, 1889, the streetcars still ran, which greatly increased public confidence in the new technology of electricity. At that time, electricity was used only in downtown Seattle for lights and the new streetcar system; electricity was not yet used in private homes.
Edward C. Kilbourne was vitally involved in early development in Seattle, including streetcar lines. Photo from Bagley's History of Seattle, 1916.
After 1889 many different investors wanted to build streetcar lines in Seattle so that the lines would go out to areas which they wanted to develop. After the Great Fire, Edward C. Kilbourne received the City of Seattle's franchise to restore the damaged electric power grid. Since Kilbourne was one of the developers of the Fremont neighborhood, after the Fire he began extending an electric streetcar line out Westlake Avenue along the western edge of Lake Union and north into Fremont.
From Fremont, streetcar lines were eventually built going west to Ballard and east to Wallingford. These suburbs had begun increasing in population even before the Great Fire of June 1889. There had been other fires before that one, and people understandably wanted to move farther away from the frequent-fire-zone of the downtown Seattle core. This is how Fremont originally became The Center of the Universe: you had to travel by streetcar through Fremont to get to anywhere in north Seattle. Later the Interurban rail line also went through Fremont on its way to Everett. This history is commemorated by the Waiting for the Interurban statue at N. 34th Street and Fremont Ave N.
Edward Corliss Kilbourne was the nephew of Corliss P. Stone, one of Seattle's earliest mayors, and Kilbourne had named one of Fremont's streets for his hometown of Aurora, Illinois. From Fremont, Kilbourne kept on moving in a northeasterly direction to develop more streetcar lines to more of his investment properties in north Seattle.
In 1883 a group, the Lake Washington Improvement Co., had been formed to promote the building of a ship canal to connect Lake Union out to Puget Sound. Corliss P. Stone was a member of that group and 1883 was the year that his nephew came to Seattle.
Fremont's early developers coordinated with developers of Green Lake and Woodland Park to extend streetcar lines. A streetcar to Guy Phinney's private zoo, shown here in 1891. Photo courtesy of Seattle Municipal Archives Item 30713.
Investors like Kilbourne and others kept advancing out to the north/northeast of downtown Seattle because they believed a canal and bridges would soon be built, which would enhance the property values in north Seattle. Guy Phinney, who had a private zoo, persuaded Kilbourne to extend the streetcar line to bring tourists to his estate, which became today's Woodland Park Zoo. Next Kilbourne entered into a partnership with William D. Wood, developer of Green Lake (and also a member of Lake Washington Improvement Co.) By the 1890s Green Lake was a popular residential neighborhood with an electric trolley line encircling the lake, and Kilbourne built his own house there.
In 1888 Charles H. Baker married and brought his new wife, Gladys, to live in Seattle. In January 1889 the couple filed a plat for some of the land Baker had previously bought (former Kenyon homestead claim) in what is now Wedgwood. The land on the east side of 35th Ave NE, from 35th to 45th Avenues NE, NE 75th to 80th Streets, was given the name Oneida Gardens. A year later, in January 1890 the couple named the land to the west, from 30th to 35th Avenues NE, the State Park plat.
To file a plat means to have land surveyed to show where streets should go, and divide up the land into residential lots. Filing a plat usually means that the owner intends to offer lots for sale. When landowners file a plat, they give it a name, but they do not have to give the reason for the name they choose. We know that Gladys Baker was from Oneida, NY, so that is the likely origin of the plat name Oneida Gardens. We know that Charles Baker attended Cornell University in Ithaca, NY, and in 1885, during the time that Baker was at college, Niagara Falls was made the first state park in the USA. My guess is that the State Park plat name which the Bakers chose was a reference to that event.
An Argus magazine cartoon version of William D. Wood, circa 1900, shows him riding his streetcars out to his residential development properties.
Another possible reason for the State Park plat name might have been to attract buyers to the Baker's plat as a scenic, park-like area. Just as the SLS&E railroad organizers thought of bringing picnickers to Snoqualmie Falls, some of Seattle's earliest streetcar lines had parks or public picnic grounds at the end of the lines near residential developments. One of the Baker's co-investors, William D. Wood, was one of the biggest land developers in north Seattle and was responsible for the creation of Green Lake as a residential neighborhood. Wood was also a heavy investor in streetcar lines because he knew that transportation would make it possible for people to live in an attractive, tranquil area such as Green Lake and commute by streetcar to places of employment.
William D. Wood, along with his father-in-law John Wallingford, were the namers of the Maple Leaf neighborhood because of their plat name, Maple Leaf Addition to Green Lake Tract. That enormous tract stretches from 5th Ave NE to 25th Ave NE, so it includes some of present-day Wedgwood from NE 85th to 95th Streets on Wedgwood's western border. Charles Baker was one of the co-investors in that plat, filed in March 1888 before he was married, when Baker was newly arrived in Seattle. This shows that Baker became involved with other land investors early on and probably he hoped to learn from Wood and others about where to buy land for future development. Baker may have thought that his Oneida Gardens and State Park plats would become the next "streetcar suburbs" like the ones that William Wood was developing.
It is likely that Baker thought that lot sales from his land investments in Oneida Gardens and State Park would generate income to finance his dream of building a hydroelectric plant. Baker seemed to make all of his plans around his goal, and he didn't intend to work for other people while working toward his dreams. He left the employ of the SLS&E railroad and started his own construction company. He was hired by Seattle pioneer David Denny to build an electric streetcar line to the University District.
Perhaps Baker thought that the University District streetcar line would eventually extend to his Oneida Gardens and State Park plats and he would be able to sell lots at a profit as William Wood was doing at Green Lake. But the economic crash called the Panic of 1893 caused Charles Baker's plans to collapse, because the streetcar project went bankrupt. David Denny was unable to pay him and Baker was left owing money to subcontractors.
The Wedgewood Estates apartments on NE 75th Street was originally called Oneida Gardens when the complex was built in 1949. Oneida Gardens was the plat name and it fell into disuse after the name Wedgwood characterized the neighborhood.
As it turned out, Baker's land investment in (the future) Wedgwood neighborhood was unprofitable, because the land was remote and unreachable. Wedgwood was a failure as a streetcar suburb, because the streetcars never got there. If Charles Baker's plans had succeeded, perhaps the neighborhood would now be called Oneida. Instead, the neighborhood did not acquire an identity and a definite name until the Wedgwood housing developments were built by Albert Balch in the World-War-Two period of the 1940s and 1950s.
Seattle had been growing in the late 1880s and the Great Fire of June 6, 1889 only increased the development boom. There was unbounded enthusiasm that Seattle would be reborn out of the Fire and would rise to greatness. To get a sense of the optimism of real estate developers of that era, we can look at statistics on the number of plats that were filed. Plats indicate that the owner expects to sell lots for people to build houses and live in the subdivision, such as Baker's Oneida Gardens and State Park plats filed in 1889-1890.
On two other plats in Wedgwood, Pontiac and Manhattan Heights filed by Joseph Doheny in 1890, Charles Baker was listed as the engineer who did the surveying to lay out the lot plans. It had taken 34 years (1853 to 1887) for developers to create 168 subdivisions in all of King County, with most filed in the vicinity of Seattle. In just three years from 1889 to 1891, more than 400 new subdivisions were filed. (Statistics from page 12, Early Neighborhood Historic Resources Survey Report, see source list.)
Robert R. Spencer was a banker and early car enthusiast in Seattle.
There are a number of plats in Wedgwood which were filed during these boom years of 1889 to 1891, such as Mary J. Chandler's, which, like Baker's, was ultimately unsuccessful because few lots were sold.
King County Tax Assessors records show that most of the Baker's Oneida Gardens plat was bought out by a banker, Robert R. Spencer (depicted at right in one of the Argus magazine cartoons of 1906, see source list.)
One of the earliest purchasers of lots in Baker's State Park Addition was Frank Vickers Cook. Cook bought lots in (the future) Wedgwood on December 15, 1891 and held the property until 1946.
As of 1901 Charles Baker still owned some lots in the State Park plat but King County foreclosed for delinquent property taxes and sold the lots at auction. The same was true of Joseph Doheny's Pontiac and Manhattan Heights plats; they were sold for back taxes. Tax assessors records for this time period around 1900 show that almost no one lived in what would later become the Wedgwood neighborhood. It was too remote and no roads had yet been built.
In 1893, after the financial collapse of the streetcar project, Charles Baker took a job at Merchants National Bank in Seattle. According to his own account, during the next five years at his desk at the bank Baker spent much of his time working on designs for a power plant at Snoqualmie Falls. Charles had come from a wealthy family but wanted to come out to Seattle and prove himself by making his own way. He had not succeeded, but because he did have a good relationship with his father, Charles decided to go home and ask for money to build the Snoqualmie Falls power plant.
Power station with three Tesla AC generators at Niagara Falls, November 16, 1896. Courtesy of TeslaSociety.com
Charles' father, William Taylor Baker, was a businessman in Chicago and was active in community affairs. He had been president of a world's fair in Chicago called the World's Columbian Exposition of 1893. At that world's fair George Westinghouse had introduced alternating electrical current, which was better than Edison's direct current because it could be transmitted over long distances. Using this technology the Niagara Falls power plant soon lit up Buffalo, NY, which was 26 miles away from Niagara, attracting large numbers of new businesses which needed power sources.
In Charles Baker's meeting with his father, William Taylor Baker readily agreed to finance his son's efforts to build a power plant at Snoqualmie Falls to supply Seattle and Tacoma. With his father's good name and good credit standing on the project, Charles Baker would be able to order equipment and hire workers.
Charles Baker shown in an Argus magazine cartoon, sitting on Snoqualmie Falls and holding the electric lines of a streetcar.
By 1898 Charles Baker had bought up all the land around Snoqualmie Falls and he began working on the world's first power plant to be constructed underground, bored through solid rock next to and underneath the Falls. In sixteen months the plant was completed and on July 31, 1899, a powerhouse at Third & S. Main Streets in Seattle received the electricity which had been generated 38 miles away.
But while Baker had been working so hard on the power plant, a Boston-based national cartel, Stone & Webster, was organizing to take control of the Seattle Electric Company. In those days there was not any municipal ownership of utilities in Seattle, and private companies fought for dominance. By the time Baker applied to the City of Seattle for a license to operate an electric company in 1899, he had been locked out of the market. Stone & Webster had bought the favor of Seattle City Council to make franchise restrictions.
Things continued to get worse for Charles Baker. City directory listings of different residences for each of them, show that Charles and his wife Gladys had separated due to the strain of Baker's obsession with the power plant. Then on October 6, 1903, Charles' father died unexpectedly at his home in Chicago. William Taylor Baker left no will and there was no written agreement as to ownership of the operations at Snoqualmie Falls. The estate administrator wouldn't recognize Charles' claim to a "handshake" agreement with his father that they would share ownership equally. On paper, WT Baker's estate was technically the 100% owner of the generating plant at Snoqualmie Falls. Ever-watchful of an opportunity, Stone & Webster went to Chicago and offered cash to buy out the ownership, and by 1904 Charles Baker was forced out of his own power plant.
In 1904 Charles Baker left Seattle, moved to Florida and had a successful career there as an engineer for railroads. His wife Gladys and their three children continued to live in Seattle and they were active in the community. Mrs. Baker was one of the founding members of St. Mark's Episcopal Church and of the Arboretum Foundation. She died in Seattle at age 82 in 1948.
Struggles over municipal ownership of resources such as water, electricity, parks, ports and transit began with the Populist Movement in Washington State in the 1890s. There were decades of struggle with privately-owned suppliers of water and electricity. To make water and electricity available to the public at reasonable rates, in 1902 the City of Seattle built a hydroelectric plant on the Cedar River, which was the USA's first municipally owned hydroelectric project (info source: history records of Seattle City Light.)
Port District legislation was passed by the Washington State Legislature in 1911; prior to that time the Seattle waterfront was controlled by railroads. It was not until 1934 that the Stone & Webster electric utilities monopoly was finally broken by New Deal anti-trust legislation under President Franklin D. Roosevelt. Finally in 1951 City Light was able to buy out the rest of the private electric ownership in and around Seattle. Seattle is known today as having one of the lowest-cost electric rates in the USA, thanks to the foresight of City fathers and decades of struggle to gain municipal ownership of resources.
Capitol Hill streetcars: for a study in contrasts of how different neighborhoods of Seattle developed, read this history of the apartments and commercial growth around streetcar lines of Seattle's Capitol Hill. In contrast to Capitol Hill and other close-in neighborhoods, Wedgwood had no streetcars or apartments. In the early 1900s Wedgwood had few stores, and it became an automobile neighborhood early on, due to lack of population density and the distance needed to travel to places of employment.
Early Neighborhood Historic Resources Survey Report and Context Statement by Greg Lange and Thomas Veith, 2005 (revised 2009.) The report is listed as "Residential structures constructed prior to 1906" under context statements, Seattle Department of Neighborhoods historic preservation page.
HistoryLink essay topics: City Light; Edward Corliss Kilbourne; Electric trolley lines; Green Lake; Maple Leaf; Municipal Ownership Movement; Snoqualmie Falls; William D. Wood.
Men Behind the Seattle Spirit – The Argus Cartoons. H. A. Chadwick, editor, 1906. Seattle Room, Seattle Public Library/Central, R.B.0 Ar38M. Cartoon depictions of Charles H. Baker, Robert R. Spencer and William D. Wood.
The Power of Snoqualmie Falls (2008): Available as a DVD from the Seattle Public Library, or online at this link.
Title Abstract: record of sale of land from DeWitt C. Kenyon to the investors group of Charles H. Baker, C.C. Calkins, W.J. Jennings, M. Stixrud, Wm D. Wood. Richard Osborn, attorney-in-fact, February 29, 1888. Original document at the Puget Sound Regional Archives, Bellevue, WA.
THANK YOU to Seattle historian and property research expert Greg Lange for all his help with research and references.
About Wedgwood in Seattle History
Valarie is a volunteer writer of neighborhood history in Seattle.
View all posts by Wedgwood in Seattle History →
This entry was posted in name of the neighborhood, Plat names and tagged early land owners in Wedgwood, electricity in Seattle, Seattle early land developers, streetcars. Bookmark the permalink.
1 Response to The Wedgwood That Never Was: Charles H. Baker's Land Investment
I must admit that I had previously thought that "Center of The Universe" was a joke. Thank you for educating me.
What would you like to know about Seattle neighborhoods? Cancel reply
The Busy Growing Years of Our Lady of the Lake Parish in Seattle
How Birds Survive the Cold: Feathers + Food = Warmth
Festive Wedgwood in December 2019
An Immigrant in Wedgwood: Gerda's Story
Archives Select Month January 2020 (2) December 2019 (2) November 2019 (2) October 2019 (3) September 2019 (2) August 2019 (2) July 2019 (2) June 2019 (2) May 2019 (1) April 2019 (1) March 2019 (3) February 2019 (3) January 2019 (4) December 2018 (2) November 2018 (2) October 2018 (2) September 2018 (2) August 2018 (2) July 2018 (2) June 2018 (3) May 2018 (2) April 2018 (4) March 2018 (2) February 2018 (1) January 2018 (1) December 2017 (3) November 2017 (3) October 2017 (4) September 2017 (2) August 2017 (1) July 2017 (2) June 2017 (2) May 2017 (2) April 2017 (1) March 2017 (1) February 2017 (2) January 2017 (6) December 2016 (2) November 2016 (3) October 2016 (4) September 2016 (3) August 2016 (3) July 2016 (3) June 2016 (5) May 2016 (3) April 2016 (2) February 2016 (5) January 2016 (4) December 2015 (3) November 2015 (3) October 2015 (3) September 2015 (4) August 2015 (3) July 2015 (2) June 2015 (2) May 2015 (4) April 2015 (3) March 2015 (5) February 2015 (6) January 2015 (4) December 2014 (5) November 2014 (3) October 2014 (3) September 2014 (4) August 2014 (1) July 2014 (4) April 2014 (1) March 2014 (1) February 2014 (3) January 2014 (3) December 2013 (5) November 2013 (4) October 2013 (3) September 2013 (4) August 2013 (4) July 2013 (3) June 2013 (4) May 2013 (5) April 2013 (5) March 2013 (6) February 2013 (7) January 2013 (9) December 2012 (4) November 2012 (5) October 2012 (5) September 2012 (4) August 2012 (4) July 2012 (5) June 2012 (5) May 2012 (9) April 2012 (9) March 2012 (9) February 2012 (10) January 2012 (4)
Categories Select Category 2808 NE 82nd Street (1) 3056 NE 87th Street (1) 3202 NE 75th Street (2) 3239 NE 87th Street (1) 7321 35th Ave NE (5) 7528 35th Ave NE (2) 7545 45th Ave NE (1) 8234 28th Ave NE (3) 8916 42nd Ave NE (1) 8921 25th Pl NE (1) 9428 25th Ave NE (2) apartments (8) Architecture (32) Balch (28) Big Green House (5) boundaries (22) businesses (44) churches (10) community club (old) (17) community council (present time) (4) Controversies (15) Dahl Playfield (2) Events and holidays (39) Faith (1) farms (8) Fire Station (1) Fremont neighborhood in Seattle (28) gas stations (7) gateposts (1) ginseng farm (4) Houses (34) Hunter's Tree Farm (6) Immigrant heritage (24) Land records and surveys (25) Library exhibit (1) Maple Creek ravine (7) Meadowbrook neighborhood (25) name of the neighborhood (37) Nature and wildlife (51) Neighborhood features (48) parks (5) Picardo Farm (4) Plat names (42) research resources (10) School histories (18) Seattle History (8) Shearwater (8) snow (1) streets (11) taverns (6) Thornton Creek (12) trees (14) Wedgwood Rock (7)
BirdWeb
Bridge list
Docomomo WEWA
Future of 35th Ave NE
Geology Writer
Historic Preservation/Dept. of Neighborhoods
Historic Seattle
HistoryLink
King County Land Use Survey
Labor Archives of Washington State
Living New Deal
Map Vault — King County
Naval Air Station Seattle (Sand Point) Historic District
Parcel Viewer
Paul Dorpat
Public Artwork in Seattle Parks
Puget Sound Regional Archives
Rob Ketcherside
Ryther
Seattle Annexation Map
Seattle City Clerk's Neighborhood Map Atlas
Seattle City Directories
Seattle Civil Rights & Labor History Project
Seattle Facts Quick Information Page
Seattle Historical Photograph Collection
Seattle Pothole Repair Map
Seattle Public Utilities Water and Sewer Maps
Seattle School Histories
Seattle Side Sewer Card Research
Seattle Street Directional Designations
Seattle Street Renaming Searchable Table
Seattle's Freeway Revolt: a directory of resources
Shoreline Historical Museum
Special Collections, UW Library
Steep Streets in Seattle
Union Bay Watch
Washington Digital Archives
Washington Digital Newspapers
Washington Place Names Database
Washington State Historic Map Collection
Copyright Wedgwood in Seattle History, 2012-2020. Unauthorized use and/or duplication of this material without express and written permission from this blog's author is strictly prohibited. Excerpts and links may be used, provided that full and clear credit is given to Wedgwood in Seattle History with appropriate and specific direction to the original content.


text:
Budget 2017- APRA's new powers, and hot spots for banks
12 May 2017 | Australia, Brisbane, Melbourne, Perth, Sydney
Legal Briefings – By Tony Coburn, Hong-Viet Nguyen and Nicola Greenberg
Under the Banking Executive Accountability Regime announced in the 2017-18 Budget on 9 May 2017, all senior banking executives will have to be registered with the Australian Prudential Regulation Authority (APRA). But what is APRA looking for, and how will it wield its new powers? This article examines the momentum leading to the Banking Executive Accountability Regime and key indicators of how, and when the regime may be enforced.
It is clear that regulators and politicians have their eyes firmly on remuneration arrangements and creating positive culture from the top down . The new powers given to APRA under the Banking Executive Accountability Regime (BEAR) begin with a power to change remuneration policies, followed by a power to ban executives and impose penalties of up to $200 million for misconduct.
APRA will follow a well-trodden path by linking remuneration practices with misconduct and poor consumer outcomes. The most recent authority regarding this approach is the final report on the Retail Banking Remuneration Review, released on 19 April 2017 (Sedgwick Review). The 14 recommendations set out in this review seek to drive cultural change and transform remuneration structures in the banking sector, and therefore close the perceived "trust gap" in the banking industry. It is likely that these will inform the behaviour, structure and focus of the new BEAR.1
In the discussion below we anticipate some of what lies ahead for Australia's banks, by examining the outcomes of the Sedgwick Review, and the broader context of banking culture, misconduct and remuneration.
Overview of the Sedgwick Review - what is APRA guided by?
The recommendations made by Stephen Sedgwick in the April 2017 review seek to shift bank culture and transform remuneration models relating to the sale of retail banking products, including basic banking products, non-cash payment products, general insurance products, consumer credit insurance, consumer lending and small business lending.
The review builds on reforms introduced under the Future of Financial Advice (FOFA)2 reforms and the Life Insurance Framework3 reforms, and the changes proposed by the Australian Securities & Investments Commission (ASIC) in respect of flex commissions.4
Individuals and organisations anticipating scrutiny by APRA should consider how their own business models stack up in light of the Sedgwick Review's key focus areas. In anticipation of review by APRA, entities can use the Sedgwick Review focus areas to conduct a mini self-health-check. To do so, an entity should consider how many of the following 'Sedgwick criteria' its business model currently satisfies:
a complete ban on volume based remuneration;
variable rewards based on overall performance, that ultimately amount to a relatively small proportion of fixed pay;
customer measures that are genuinely customer-centric;
a culture that identifies potentially high-risk behaviours, known as behavioural gateways;
an internal audit process that involves a thorough examination of workplace culture, particularly programs or structures that show a bias towards sales in preference to ethical behaviour; and
Board and Chief Executive oversight of audits, and the implementation of any recommendations arising from them.
In the coming weeks, APRA will no doubt draft its own 'health indicators', which are likely to be based on the focus areas outlined above. However, these cultural indicators should come as no surprise to anyone who has been following ASIC releases and recent media regarding bank culture. While the Sedgwick Review provided the most comprehensive round-up of key cultural indicators, and was the first publication to provide specific recommendations, there is plenty of further information available regarding indicators of banking culture. We have distilled the Sedgwick Review's focusses, and recent ASIC comments regarding banking culture into four cultural 'hot spots' for the financial services industry.
What are the four 'hot spots' and how can an organisation address them?
1. 'Tone from the top'
The new powers conferred on APRA are the first to directly identify executives as individuals who may drive culture and strongly influence misconduct. In addition to monitoring the executives themselves, APRA may impose penalties on banks that fail to appropriately monitor the suitability of their executives to hold senior positions. This is consistent with the Sedgwick Review recommendations for regular reporting obligations on boards to set the standards for appropriate culture and behaviour. Additionally, ASIC has frequently referred to the board and senior management's role in setting the bar for behaviour, and having oversight of cultural issues within a corporation.5
The Sedgwick Review does not stop at board level when referring to 'tone from the top'. It makes specific reference to manager behaviour in applying discretionary rewards and performance feedback. In doing so, it highlights the actions of the manager, not simply the structure of the reward program as a contributing factor to cultural misconduct. A 2016 review of risk governance, culture and behaviour in banks found a correlation between seniority, and propensity to engage in risk-taking behaviour.6 It is clear that APRA will not look at executive behaviour in a vacuum. Rather it will look at it as a way to influence and, if necessary, police the culture of an entire organisation. When examining the executives to be enrolled with APRA, organisations should consider how these individuals set the tone and represent the entity's response to poor culture and misconduct.
But in the 2017-18 Budget address the Commonwealth Government seems to be planning to go much further than requiring a bank to take steps to manage these cultural issues. Under the BEAR arrangements, APRA will have the power to intervene in business decisions of banks even in human resources questions such as selection of senior executives and directors. APRA will not only have the power to disqualify senior executives for conduct breaches, it will have to approve each appointment of a senior executive or board member of a bank. And it will have the power to intervene in pay decisions made by Boards. This is a big step beyond APRA's current role of prescribing standards such as governance standards to be applied by an ADI in the management of its own business.7
2. Correlation between ethical behaviour and positive outcomes for consumers
Businesses targeted by the reforms will have to self-assess culture and propensity for misconduct. To do so effectively, those businesses will need to consider and assess the link between culture and positive consumer outcomes. The Sedgwick Review connects positive consumer outcomes with internal behaviour requirements at financial institutions. In particular, it highlights the need to minimise (or eliminate) any conscious or unconscious bias towards sales over consumer outcomes and ethics. Greg Medcraft, the ASIC Chairman, referred to this as a 'win-win' in a 2015 speech, and argued that good culture and positive consumer outcomes go hand in hand:
"At the centre of what industry can do is creating a 'customer first' culture. We care about culture because there is often a strong connection between poor culture and poor conduct. We consider it to be a key risk area with respect to our role as a conduct regulator, as it often is a red flag to a broader regulatory problem."8
Financial institutions anticipating increased regulatory scrutiny should build these conclusions into cultural review processes. Instead of conducting separate reviews of consumer outcomes and ethical behaviour, the two should be examined together, to identify any trends or biases which indicate a poor culture and a bias towards sales over consumer outcomes and ethics.
3. Broader identification of incentives and remuneration, beyond obvious incentive structures
The Budget's most significant change for banking executives will be reflected in their bonus structures. The new regime requires deferral of at least 60 per cent of chief executive bonuses and 40 per cent of other senior executives' bonuses for a minimum of four years. This approach is consistent with the argument that although a financial institution may make broad statements about cultural values, the true measure of what the financial institution values is indicated by the type of employee behaviour that the financial institution rewards. In addition to deferral of bonuses, APRA is to be given powers to alter the structure of formal remuneration processes.
However, organisations should look further than formal bonuses and remuneration to study the effect of incentives on culture. The Sedgwick Review requires financial institutions to assess both their structured reward practices, and informal rewards. In particular, it requires financial institutions to consider discretionary rewards provided by senior management. The broad view encompassing remuneration, key performance indicators (KPIs) and informal incentives is designed to point out inconsistencies in an organisation's culture that are not visible at board or management level. Cathie Armour, Commissioner at ASIC, identified the KPIs imposed on junior staffers as a contributing factor in assessing culture across a corporation:
"Part of this is having leaders with a vision for the corporation that focuses on the long-term objective of creating a sustainable business. Often this means incorporating broader community interests into your strategic objectives but, frequently, at the factory [sic] floor level, the key KPIs are quantitative ones that don't take these other factors into account."9
The Sedgwick Review requires financial institutions to conduct an examination of cultural drivers at all levels, including the behaviour of managers when conducting performance reviews with junior staff. Leaders should be aware that although APRA's oversight is primarily on executives, the bans and fines for misconduct which may be pursued by APRA will probably address issues exacerbated by informal cultural drivers. Accordingly, if misconduct continues to be rewarded through informal incentives, it may not be enough to remove all formal volume-based remuneration. This means that organisations will need to take a holistic view when re examining remuneration arrangements (both monetary and non monetary).
4. Appropriate protections for whistleblowers
A new dispute resolution scheme will be established and will be known as the Australian Financial Complaints Authority (AFCA). It will replace the Financial Ombudsman Service, the Credit and Investment Ombudsman and the Superannuation Complaints Tribunal. This indicates that the Australian Government wishes to better equip consumers with the ability to report misconduct in financial services by providing a 'one stop shop'.
Although not mentioned in the Budget or associated documents, we think that APRA will probably consider whether any additional measures are required to protect internal whistleblowers. We say this for the following reasons:
Whistleblower disclosures are highly valued by the Australian regulators, and considered a 'protected disclosure' under the Corporations Act 2001 (Cth).
There has been increased regulatory review of this area over the past two years. In 2016 ASIC invited 30,000 companies to participate in a research project regarding whistleblowing in the corporate sector. This project, 'Whistling While They Work 2' was carried out in partnership between the Australian Parliament and Griffith University, and has been described as Australia's largest whistleblowing research project.10 Representatives of this study recently gave evidence to the first hearings of the Joint Parliamentary Committee inquiry into whistleblower protections in the corporate, public and not-for-profit sectors. Additionally, in December 2016 the Australian Government committed to new national whistleblowing laws by June 2018.
It is likely that whistleblowers will first attempt to report misconduct through internal channels, rather than directly to the regulator. These individuals must also be provided sufficient protection to encourage them to come forward. To allow for this, the Sedgwick Review requires boards and chief executives to ensure that 'effective, safe channels' are available to staff who wish to report misconduct.
Introduction of a new accountability regime, complaints authority and increased powers for APRA indicate that significant change is ahead in the banking industry. The effectiveness of these changes will depend on the details of how they are implemented. However, the issues to be addressed are not new. With benefit of the information that has already been published, banks can prepare for the proposed changes.
As we wait for further information regarding the Budget changes, leaders in the financial services industry will be considering how their own businesses may be viewed by APRA in light of the Sedgwick Review's recommendations. In particular, we recommend an analysis of how the four 'hot-spots' (discussed above) can be addressed, and what steps can be taken now to become 'AFCA ready'.
To enact this regime, APRA have appointed Ms Jane O'Doherty. Ms O'Doherty leads a newly combined team comprising Governance, Operational and Insurance risk specialists, with a mandate to lead APRA's work in relation to culture and remuneration practices in the financial services industry.
Corporations Amendment (Future of Financial Advice) Act 2010 (Cth).
Corporations Amendment (Life Insurance Remuneration Arrangements) Act 2016 (Cth).
ASIC Consultation Paper 279: Flex commission arrangements in the car finance industry.
See, for example Corporate and personal liability for "culture" in corporations? (John HC Colvin and James Argent (2016) 34 C&SLJ 30) regarding proposed amendments to the Australian Securities and Investments Commission Act 2001 (Cth) and Corporations Act 2001 (Cth) to give ASIC more power in regard to corporate culture, and Evidence to Senate Standing Committees on Economics (Parliament of Australia, Canberra, 3 June 2015) 6 (Greg Medcraft)
Risk Governance, Structure Culture and Behaviour in Banks: A View from the Inside (Elizabeth Sheedy, Barbara Griffin 6 Feb 2016) conducted an assessment of risk culture in three large banks in Australia and four large banks in Canada. All seven appear in the top 50 banks world-wide by market capitalisation and assets.
For an interesting elaboration on this topic, see an editorial entitled "APRA's now a bank co-manager" by Professor Rodney Maddock of the Australian Centre for Financial Studies in the Monash Business School published in the ausytralian Financial Review, Thursday 11 May 2017, at page 62.
Putting the customer first: Creating a win–win. A speech by Greg Medcraft, Chairman, Australian Securities and Investments Commission, CFA Australia Investment Conference (Sydney, Australia), 13 October 2015
Viewpoint: A cultural matter, A recent roundtable discussion saw industry leaders debate the question: What defines corporate culture? Domini Stuart reports. Australian Institute of Company Directors, 01 September 2016
Whistling While They Work 2, the world's leading research into public interest whistleblowing.
Financial Services Regulatory
Tony Coburn
Consultant, Sydney
Tony, a full-time consultant, is the head of the Australian Banking Regulatory team.
Tony.Coburn@hsf.com

redpajama_set_name: RedPajamaCommonCrawl


Internet Marketing Tips That Can Increase Your Earnings!
Your time is now! This article will help answer any questions you may have about how to get started. The following article provides important tips that can benefit any online marketing career.
When deciding which internet marketing program to work with, be sure to look into how the company keeps track of orders made via means other than their website. If email or phone orders are not linked back to your ID as an affiliate, you could lose substantial amounts of commission.
To reap the highest rewards from your affiliate programs, keep only the affiliates that show the best performance. Make sure you thoroughly review your affiliates performance. You only have so much time and attention for affiliates; you should replace poor performers with ones that offer you higher profits.
TIP! When you have earned decent profits, try asking for more profits from your programs. If you are making consistent sales and using great marketing methods, the company will do what it can to make you happy.
Many affiliate marketers put too much emphasis on becoming "super" affiliates. They end up spreading their efforts too thin, with an overload of products and promotions that end up being much less than effective in the highly competitive affiliate market. It's important to have a niche, and focus only on that niche in order to be successful at internet marketing. Find out what works best for you.
If you require quick access to your money you should opt for an affiliate company that offers a variety of payment options. Some programs offer different payment options such as PayPal and AlertPay. Others only mail a check when sales reach a given amount.
TIP! Always look for the affiliate services that give you the products and services that you need. Joining several different affiliate network will provide you a collective source of income.
Consider carefully the products you place in your links while setting them up. It is more efficient to find a formula to select affiliate links in order to ensure profitability.
Affiliate websites are not all equal. Many of these websites are neither attractive nor user-friendly. If the affiliate site is difficult or badly designed an effective affiliate marketer will learn how to overcome those short comings and increase their profits. This can actually build trust between buyer and seller if done correctly.
Keep your target audience and your internet marketing goals in mind when you choose your affiliate partners. This increases traffic, but also helps to communicate with your clients.
TIP! Marketing the most popular affiliate products on the Internet may not be the best idea. You want to support quality products; remember that popularity does not necessarily equate to quality.
Do business with those affiliate companies that provide resource support to their affiliates. Affiliate companies may seem dumber than they really are. Affiliate marketers do extensive research about market trends with customers. Well established companies will share that information with it's affiliates, so they can use it to improve their campaigns.
Choosing a company with a high conversion rate is the best way to utilize an affiliate program. Your goal should be around one percent.
TIP! Great advice for making the most of your affiliate marketing efforts is to locate companies that are producing products on a continuous basis. For repeat business with a reputable company, try to locate one that has several products which will keep your commissions going.
In order to be successful with affiliate promotion you have to be familiar with your audience. You want your message to resonate with your readers. Identify the things that drive people to your website. What do your customers look for when they visit your site?
Use your marketing articles to entice the audience that will be interested in the products sold by your affiliate partners. You can sell cheap products in large volumes by offering low-click-through options. Costlier items require substantial, targeted initiatives, capable of drawing serious potential buyers.
Instead of pop-up ads, move to pop-under ads. Most browsers block the pop-up ads, so your prospects may never see them anyway. Statistically, advertising that will appear behind the content has a much higher click through rate and sale rate than pop-up advertising.
TIP! If an affiliate company doesn't offer good commissions or has a bad reputation, steer clear. Any affiliate company that gives less than a 20% commission isn't worth your time.
It is important that you believe in the products that you are promoting. Providing good recommendations helps promote confidence in your business because people see you as knowledgeable. By promoting products that prove to be useful to your customers, they will trust your opinion more and are more likely to return. Promoting products that cost less than those of the competition can earn you business, as well.
Always be honest with your audience in order to do well in internet marketing. People aren't going to become loyal customers if you aren't honest with them. If readers can't trust the content on your website, they will avoid clicking your links.
TIP! When an internet surfer visits a sports-centric website, their mindset is set on sports. Keep your affiliate links sports related, otherwise they probably won't click on it.
Marketing affiliate products is a legitimate business, so those who do it should present themselves and their programs as professionally as possible. The links need to be subtle. Take care to convey the message to customers that you are a company "affiliated" with the merchandise.
Disclose to your readers whether or not you earn money when your site's visitors buy from affiliates. You will lose the trust of your readers if you attempt to hide or obfuscate your affiliate links. Customers appreciate honesty, and you can increase the likelihood that they will return–and click on your links–by working to gain their trust.
Give your potential buyers a lot of information about your product, like screen shots and user reviews. Customers will buy something from you if you provide them with helpful information and answer their questions.
TIP! Carefully research any products that you are considering linking to before you actually do so. Once you discover the optimal placement of your affiliate links, you will see increases in profits.
Give yourself a goal to meet during each business day. This can help me keep track of the tasks that remain for me to complete.
At this point, you should be far more confident about affiliate marketing. Even if you previously thought you were prepared, you are now even better off now. The tips given here have given you some great advice you can use to start with affiliate marking on your website today.


The promise of 5G networks portends major shifts in backhaul technology. With the advent of small cells, Internet of Things (IoT) and other factors, the backhaul will need to support large volumes of latency-sensitive traffic and have flexibility to create more automated deployments. And it needs to be free of hardware constraints. Therefore, the software-defined network (SDN) has a role in bringing this paradigm shift.
Most large service providers have talked about using FWA to diversify their offerings and compete with fixed line providers. FWA represents the top use case for 5G at least in the near term and mobility use cases will undoubtedly emerge shortly thereafter. In the developing world, fixed access for enterprises is now starting to take off using PTP and/or PTMP access links and 5G could meet the bandwidth demand and provide more economical solutions.
MTC are predicted to play a large role in 5G networks. With the increasing demand for connectivity of industrial IoT devices, transportation-related equipment like self-driving and autonomous vehicles, and health and medical devices, MTC is expected to put new demands on the 5G transport network. MTN is expected to increase the numbers of connections and place new security and latency requirements on the transport networks.
With the continued evolution of the radio access network (RAN) to support high density, high capacity, low latency, and more peer to peer communications, 5G is likely to transform the RAN architectures to a more dense, street-level topology with distributed intelligence and evolved fronthaul/backhaul interfaces. Based on the RAN evolution, new demands on the microwave transport network will emerge so products can seamlessly fit into deployment scenarios and be deployed at scale.
The current approach for transport networks is not sustainable – so we've outlined five key areas for change depicted in the below diagram.
Building on capacity innovations for 3G and 4G networks, 5G is expected to continue the trend of more capacity demands on the backhaul. Main drivers include 3D and 4K video, security and surveillance, and big data applications. The good news is wireless transport well meets the capacity need for 4G networks and is expected to scale to support 5G applications as well.
Critical IoT communications, augmented reality, self-driving cars, gaming applications combined with RAN architecture evolution and peer-to-peer communications, creates requirement for tighter control over latency in 5G networks – some applications require latency in the order of 3-5ms end to end which is a large departure from the ways networks are built and maintained today.
Beyond the sheer capacity and latency numbers, the ability with which the network can control these performance variables will be key to the future network. Networks will need to adapt and dynamically manage latency in ways not possible today – such as optimized low-queuing routes and moving content closer to the network edge.
Any rollout of new innovation will need to build on and leverage current network infrastructure. Large networks cannot be ripped out and replaced overnight so new technologies that can cost effectively migrate from today's installations will be required.
Rising OPEX is choking operators' ability to grow today. And its not just management and service delivery – it's the OPEX associated with a complex microwave and fiber lifecycle including designing, purchasing, deploying, managing, optimizing transport networks. Increasing energy consumption costs also need to be addressed and will likely grow with 5G. Increasing site density, traffic and subscriber growth, combined with higher requirements on network performance, makes these challenges considerably worse.
With the densification of the mobile RAN, emergence of FWA, and rollout of MTC use cases, 5G will surely bring a higher level of density to the access network – with a potential to drive up costs. This evolution cannot be met in a cost-effective manner without lower cost wireless transport options that are designed to be deployed at street level. Simplification of wireless transport solutions via automation will be essential if 5G networks are to be successfully deployed in the volume levels required.
More recently, operators have moved beyond offering simple data capacity for mobile applications. And in some markets, they have begun to take place of wired networks for real-time rich media like two-way video conferencing and 4K HDTV. In others, wireless carriers have no fixed line competitors and carry these data-intensive applications to subscribers and enterprise customers in a greenfield market. As a result, operators are building more service-delivery intelligence (IP/MPLS today) into their transport networks. With 5G, the need to up the game in terms of service delivery will be paramount.
To do this, operators will need to address standardization in transport networks. Additionally, 5G networks will require open control layer to standardize operations across technology (fiber and microwave), domains (access/metro/core) and across vendors.
SDN will be an essential aspect of simplifying service deliver in complex multi-domain, multi-technology transport networks. Part of a broader solution to automate the microwave lifecycle, SDN concepts can be implemented today – giving time for networks to learn and grow towards 5G. SDN will enable multi-vendor, best of breed networks allowing innovation to flourish in each part of the network.
If we think security and reliability are problems in networks today, wait five years. It's critical that 5G wireless transport solutions be delivered in a secure environment and solutions must leverage latest security and reliability capabilities to ensure operator networks and data is protected and services are always on.
Solutions must continue to evolve encryption capabilities for 5G and follow industry standard security best practices to provide encrypted connections from infrastructure devices to private or public cloud environments. Data replication and backup are must haves and are inherent with prominent cloud providers today on which some of the most critical networks already depend. With the overwhelming number of security alerts and cybersecurity staffing shortages, new solutions will be needed to identify threats faster and more accurately.
Industrial and public safety use cases for the 5G networks emerge, transport networks cannot sacrifice reliability to achieve capacity, latency and cost objectives. Network and node level redundancy schemes will need to evolve to improve on today's reliability in an automated and cost reduced network for 99.999% reliability and close to 100% coverage.
Due to latency and capacity requirements, CPRI is not going to be a viable option for 5G transport. Fiber cannot and will not be everywhere and the industry needs a wireless transport option for fronthaul/midhaul applications to support 5G. While evolutions in various standards look promising (eCPRI, IEEE 1914, 802.1cm, TSN, etc.), more time is needed to determine how viable these will be in allowing ubiquitous wireless options for 5G transport. One thing for sure, X-Haul needs to evolve so that wireless transport is an option – otherwise deployment scenarios for 5G will be limited.
On top of this is the lurking issue of RAN vendor proprietary. These interfaces need to be open and standardized to enable a single integrated and common, unified transport solution (X-Haul) across fronthaul, midhaul, and backhaul portions of the networks.
Regardless what happens to the fronthaul interface, to support 5G, transport networks need to transform – with growth in traffic, subscribers, and network infrastructure we cannot sustain current levels of complexity and cost. Whatever 5G turns out to be, new demands will be placed on virtually every aspect of the wireless transport networks. We believe simplification of wireless transport through automation is not only possible but an absolutely necessary if 5G transport networks are to become reality at the performance, reliability, and latency required.
To build a transport network with enough flexibility to support all 5G use cases and meet all the performance requirements, network operators need to start making the right technology choices now. Using a combination of flexible high performance hardware, unique software tools and applications, and rich data-centric services portfolio, Aviat will continue its recent innovations to drastically simplify networks through lifecycle automation to enable the 5G promise for our customers.


text:
// ==========================================================================
//                 SeqAn - The Library for Sequence Analysis
// ==========================================================================
// Copyright (c) 2006-2010, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of Knut Reinert or the FU Berlin nor the names of
//       its contributors may be used to endorse or promote products derived
//       from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
// DAMAGE.
//
// ==========================================================================
// Author: Enrico Siragusa <enrico.siragusa@fu-berlin.de>
// ==========================================================================
// This file contains basic type definitions.
// ==========================================================================

#ifndef SEQAN_EXTRAS_MASAI_STORE_H_
#define SEQAN_EXTRAS_MASAI_STORE_H_

#include <seqan/basic.h>
#include <seqan/sequence.h>
#include <seqan/seq_io.h>
#include "store/store_io.h"
#include "tags.h"

using namespace seqan;

// ============================================================================
// Types
// ============================================================================

// ----------------------------------------------------------------------------
// Fragment Store Configuration
// ----------------------------------------------------------------------------

struct FragStoreConfig
{
    typedef String<Dna5Q>           TReadSeq;
    typedef String<Dna5>            TContigSeq;

    typedef double                  TMean;
    typedef double                  TStd;
    typedef signed char             TMappingQuality;

    typedef void                    TReadStoreElementSpec;
    typedef Owner<ConcatDirect<> >  TReadSeqStoreSpec;
    typedef Alloc<>                 TReadNameSpec;
    typedef Owner<ConcatDirect<> >  TReadNameStoreSpec;
    typedef void                    TMatePairStoreElementSpec;
    typedef void                    TLibraryStoreElementSpec;
    typedef void                    TContigStoreElementSpec;
    typedef void                    TContigFileSpec;
    typedef void                    TAlignedReadStoreElementSpec;
    typedef Owner<ConcatDirect<> >  TAlignedReadTagStoreSpec;
    typedef void                    TAnnotationStoreElementSpec;
};

// ----------------------------------------------------------------------------
// Contigs Type
// ----------------------------------------------------------------------------

typedef StringSet<FragStoreConfig::TContigSeq, Dependent<> >                TContigs;

namespace seqan
{
    template <>
    struct Size<FragStoreConfig::TContigSeq>
    {
        typedef unsigned int            Type;
    };

    // NOTE(esiragusa): Genome can be at most 2^32 bp in total
    template <>
    struct StringSetLimits<TContigs>
    {
        typedef String<unsigned int>    Type;
    };
}

// ----------------------------------------------------------------------------
// Fragment Store Type
// ----------------------------------------------------------------------------

typedef FragmentStore<void, FragStoreConfig>            TFragmentStore;

// ----------------------------------------------------------------------------
// Fragment Store Contig Types
// ----------------------------------------------------------------------------

typedef TFragmentStore::TContigStore                    TContigStore;
typedef Size<TContigStore>::Type                        TContigStoreSize;
typedef Value<TContigStore>::Type                       TContigStoreElement;
typedef TFragmentStore::TContigSeq                      TContigSeq;
typedef Size<TContigSeq>::Type                          TContigSeqSize;
typedef Segment<TContigSeq, InfixSegment>               TContigInfix;

// ----------------------------------------------------------------------------
// Fragment Store Reads Types
// ----------------------------------------------------------------------------

typedef TFragmentStore::TReadStore                      TReadStore;
typedef Value<TReadStore>::Type                         TReadStoreElement;
typedef TFragmentStore::TReadNameStore                  TReadNameStore;
typedef TFragmentStore::TReadSeqStore                   TReadSeqStore;
typedef Size<TReadSeqStore>::Type                       TReadSeqStoreSize;
typedef Value<TReadSeqStore>::Type const                TReadSeq;
typedef Size<TReadSeq>::Type                            TReadSeqSize;

// ----------------------------------------------------------------------------
// Fragment Store Mapped Reads Types
// ----------------------------------------------------------------------------

typedef TFragmentStore::TAlignedReadStore               TAlignedReadStore;
typedef Value<TAlignedReadStore>::Type                  TAlignedReadStoreElement;
typedef TFragmentStore::TAlignQualityStore              TAlignQualityStore;
typedef Value<TAlignQualityStore>::Type                 TAlignQualityStoreElement;
typedef TFragmentStore::TAlignedReadTagStore            TAlignedReadTagStore;
typedef Value<TAlignedReadTagStore>::Type               TAlignedReadTagStoreElement;

// ============================================================================
// Tags, Classes, Enums
// ============================================================================

// ----------------------------------------------------------------------------
// Class Genome
// ----------------------------------------------------------------------------

template <typename TSpec = void>
struct Genome
{
    TFragmentStore          & _store;
    TContigs                contigs;

    Genome(TFragmentStore & store) :
        _store(store)
    {}
};

// ----------------------------------------------------------------------------
// Class ReadsConfig
// ----------------------------------------------------------------------------

template <typename TUseReadStore_       = True,
          typename TUseReadNameStore_   = True,
          typename TForward_            = True,
          typename TReverse_            = True>
struct ReadsConfig
{
    typedef TUseReadStore_      TUseReadStore;
    typedef TUseReadNameStore_  TUseReadNameStore;
    typedef TForward_           TForward;
    typedef TReverse_           TReverse;
};

// ----------------------------------------------------------------------------
// Class Reads
// ----------------------------------------------------------------------------

template <typename TSpec = void, typename TConfig = ReadsConfig<> >
struct Reads
{
    Holder<TFragmentStore>          _store;
    unsigned                        _avgSeqLengthEstimate;
    unsigned                        _avgNameLengthEstimate;
    unsigned                        _countEstimate;
    unsigned                        readsCount;

    Reads() :
        _store(),
        _avgSeqLengthEstimate(0),
        _avgNameLengthEstimate(0),
        _countEstimate(0),
        readsCount(0)
    {}

    Reads(TFragmentStore & store) :
        _store(store),
        _avgSeqLengthEstimate(0),
        _avgNameLengthEstimate(0),
        _countEstimate(0),
        readsCount(0)
    {}
};

// ----------------------------------------------------------------------------
// Class ReadsLoader
// ----------------------------------------------------------------------------

template <typename TSpec = void, typename TConfig = ReadsConfig<> >
struct ReadsLoader
{
    // TODO(esiragusa): Use MMap FileReader. Support compressed streams.
    typedef std::fstream                            TStream;
    typedef RecordReader<TStream, SinglePass<> >    TRecordReader;
    typedef Reads<TSpec, TConfig>                   TReads;

    TStream                                 _file;
    unsigned long                           _fileSize;
    AutoSeqStreamFormat                     _fileFormat;
    std::SEQAN_AUTO_PTR_NAME<TRecordReader> _reader;
    Holder<TReads>                          reads;

    ReadsLoader(TReads & reads) :
        _fileSize(0),
        reads(reads)
    {}
};

// ============================================================================
// Functions
// ============================================================================

// ----------------------------------------------------------------------------
// Function load()                                                     [Genome]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TString>
bool load(Genome<TSpec> & genome, TString const & genomeFile)
{
    // TODO(esiragusa): Use record reader instead of loadContigs() from FragmentStore.
    if (!loadContigs(genome._store, genomeFile))
        return false;

    reserve(genome.contigs, length(genome._store.contigStore));
    for (unsigned contigId = 0; contigId < length(genome._store.contigStore); ++contigId)
    {
        shrinkToFit(genome._store.contigStore[contigId].seq);
        appendValue(genome.contigs, genome._store.contigStore[contigId].seq);
    }

    return true;
}

// ----------------------------------------------------------------------------
// Function reverse()                                                  [Genome]
// ----------------------------------------------------------------------------

template <typename TSpec>
void reverse(Genome<TSpec> & genome)
{
    for (unsigned contigId = 0; contigId < length(genome._store.contigStore); ++contigId)
        reverse(genome._store.contigStore[contigId].seq);
}

// ----------------------------------------------------------------------------
// Function clear()                                                    [Genome]
// ----------------------------------------------------------------------------

template <typename TSpec>
void clear(Genome<TSpec> & genome)
{
    clear(genome.contigs);
    clearContigs(genome._store);
}

// ----------------------------------------------------------------------------
// Function reserve()                                                   [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
inline void reserve(Reads<TSpec, TConfig> & reads)
{
    reserve(reads, reads._countEstimate);
}

template <typename TConfig>
inline void reserve(Reads<PairedEnd, TConfig> & /* reads */)
{
}

template <typename TSpec, typename TConfig, typename TSize>
inline void reserve(Reads<TSpec, TConfig> & reads, TSize count)
{
    // Reserve space in the readSeqStore, also considering reverse complemented reads.
    reserve(value(reads._store).readSeqStore.concat, 2 * count * reads._avgSeqLengthEstimate, Exact());
    reserve(value(reads._store).readSeqStore, 2 * count, Exact());

    // Reserve space for ids.
    reserveIds(reads, count, typename TConfig::TUseReadStore());

    // Reserve space for names.
    reserveNames(reads, count, reads._avgNameLengthEstimate, typename TConfig::TUseReadNameStore());
}

// ----------------------------------------------------------------------------
// Function reserveIds()                                                [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TSize>
inline void reserveIds(Reads<TSpec, TConfig> & /* reads */, TSize /* space */, False const & /* tag */)
{}

template <typename TSpec, typename TConfig, typename TSize>
inline void reserveIds(Reads<TSpec, TConfig> & reads, TSize space, True const & /* tag */)
{
    reserve(getSeqs(reads), space, Exact());
}

// ----------------------------------------------------------------------------
// Function reserveNames()                                              [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TSize, typename TLength>
inline void reserveNames(Reads<TSpec, TConfig> & /* reads */, TSize /* count */, TLength /* length */, False const & /* tag */)
{}

template <typename TSpec, typename TConfig, typename TSize, typename TLength>
inline void reserveNames(Reads<TSpec, TConfig> & reads, TSize count, TLength length, True const & /* tag */)
{
    reserve(getNames(reads).concat, count * length, Exact());
    reserve(getNames(reads), count, Exact());
}

// ----------------------------------------------------------------------------
// Function clear()                                                     [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
void clear(Reads<TSpec, TConfig> & reads)
{
    clearReads(value(reads._store));
}

// ----------------------------------------------------------------------------
// Function appendSeq()                                                 [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TReadSeq>
inline void appendSeq(Reads<TSpec, TConfig> & reads, TReadSeq const & seq)
{
    appendValue(getSeqs(reads), seq, Generous());
}

// ----------------------------------------------------------------------------
// Function appendName()                                                [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TReadName>
inline void appendName(Reads<TSpec, TConfig> & /* reads */, TReadName const & /* seqName */, False const & /* tag */)
{}

template <typename TSpec, typename TConfig, typename TReadName>
inline void appendName(Reads<TSpec, TConfig> & reads, TReadName const & seqName, True const & /* tag */)
{
    appendValue(getNames(reads), seqName, Generous());
}

// ----------------------------------------------------------------------------
// Function appendId()                                                  [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TReadId>
inline void appendId(Reads<TSpec, TConfig> & /* reads */, TReadId const & /* matePairId */, False const & /* tag */)
{}

template <typename TSpec, typename TConfig, typename TReadId>
inline void appendId(Reads<TSpec, TConfig> & reads, TReadId const & matePairId, True const & /* tag */)
{
	typename Value<TFragmentStore::TReadStore>::Type r;
	r.matePairId = matePairId;

	appendValue(getIds(reads), r, Generous());
}

// ----------------------------------------------------------------------------
// Function getSeqs()                                                   [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
inline TReadSeqStore &
getSeqs(Reads<TSpec, TConfig> const & reads)
{
    return value(reads._store).readSeqStore;
}

// ----------------------------------------------------------------------------
// Function getNames()                                                  [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
inline TReadNameStore &
getNames(Reads<TSpec, TConfig> const & reads)
{
    return value(reads._store).readNameStore;
}

// ----------------------------------------------------------------------------
// Function getIds()                                                    [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
inline TReadStore &
getIds(Reads<TSpec, TConfig> const & reads)
{
    return value(reads._store).readStore;
}

// ----------------------------------------------------------------------------
// Function getReadId()                                                 [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TReadId>
inline TReadId getReadId(Reads<TSpec, TConfig> const & reads, TReadId readId)
{
    // Deal with reverse complemented reads.
    if (readId >= reads.readsCount)
        return readId - reads.readsCount;

    return readId;
}

// ----------------------------------------------------------------------------
// Function avgSeqLength()                                              [Reads]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
TReadSeqSize avgSeqLength(Reads<TSpec, TConfig> const & reads)
{
    return reads._avgSeqLengthEstimate;
}

// ----------------------------------------------------------------------------
// Function _estimateRecordSize()                                 [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
unsigned long _estimateRecordSize(ReadsLoader<TSpec, TConfig> const & loader, Fastq const & /* tag */)
{
    // 6 stands for: @, +, and four \n.
    return value(loader.reads)._avgNameLengthEstimate + 2 * value(loader.reads)._avgSeqLengthEstimate + 6;
}

template <typename TSpec, typename TConfig>
unsigned long _estimateRecordSize(ReadsLoader<TSpec, TConfig> const & loader, Fasta const & /* tag */)
{
    // 3 stands for: >, and two \n.
    return value(loader.reads)._avgNameLengthEstimate + value(loader.reads)._avgSeqLengthEstimate + 3;
}

// ----------------------------------------------------------------------------
// Function _estimateReadsStatistics()                            [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
void _estimateReadsStatistics(ReadsLoader<TSpec, TConfig> & loader)
{
    CharString                  seqName;
    FragStoreConfig::TReadSeq   seq;

    // Read first record.
    if (readRecord(seqName, seq, *(loader._reader), loader._fileFormat) != 0)
        return;

    // Estimate read seqs and names length.
    value(loader.reads)._avgSeqLengthEstimate = length(seq);
    value(loader.reads)._avgNameLengthEstimate = length(seqName);

    // Estimate record size.
    unsigned long recordSize;
    switch (loader._fileFormat.tagId)
    {
    case Find<AutoSeqStreamFormat, Fasta>::VALUE:
        recordSize = _estimateRecordSize(loader, Fasta());
        break;
    case Find<AutoSeqStreamFormat, Fastq>::VALUE:
        recordSize = _estimateRecordSize(loader, Fastq());
        break;
    default:
        recordSize = 0;
        break;
    }

    // Estimate number of reads in file.
    if (recordSize > 0)
        value(loader.reads)._countEstimate = loader._fileSize / recordSize;
    else
        value(loader.reads)._countEstimate = 0;
}

// ----------------------------------------------------------------------------
// Function open()                                                [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig, typename TString>
bool open(ReadsLoader<TSpec, TConfig> & loader, TString const & readsFile)
{
    typedef ReadsLoader<TSpec, TConfig>             TReadsLoader;
    typedef typename TReadsLoader::TRecordReader    TRecordReader;

    // Open file.
    loader._file.open(toCString(readsFile), std::ios::binary | std::ios::in);

    if (!loader._file.is_open())
        return false;

    // Compute file size.
    loader._file.seekg(0, std::ios::end);
    loader._fileSize = loader._file.tellg();
    loader._file.seekg(0, std::ios::beg);

    // Initialize record reader.
    loader._reader.reset(new TRecordReader(loader._file));

    // Autodetect file format.
    if (!guessStreamFormat(*(loader._reader), loader._fileFormat))
        return false;

    // Estimate statistics for reads in file.
    _estimateReadsStatistics(loader);

    // Reinitialize record reader.
    loader._file.seekg(0, std::ios::beg);
    loader._reader.reset(new TRecordReader(loader._file));

    return true;
}

template <typename TConfig, typename TString>
bool open(ReadsLoader<PairedEnd, TConfig> & loader, TString const & readsLeftFile, TString const & readsRightFile)
{
    if (!loadReads(value(value(loader.reads)._store), readsLeftFile, readsRightFile))
        return false;

    value(loader.reads).readsCount = length(getSeqs(value(loader.reads)));

    _loadReverseComplement(loader);

    return true;
}

// ----------------------------------------------------------------------------
// Function close()                                               [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
bool close(ReadsLoader<TSpec, TConfig> & loader)
{
    loader._file.close();

    return !loader._file.is_open();
}

template <typename TConfig>
bool close(ReadsLoader<PairedEnd, TConfig> & /* loader */)
{
    return true;
}

// ----------------------------------------------------------------------------
// Function load()                                                [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
bool load(ReadsLoader<TSpec, TConfig> & loader)
{
    return load(loader, MaxValue<unsigned long>::VALUE);
}

template <typename TConfig>
bool load(ReadsLoader<PairedEnd, TConfig> & /* loader */)
{
    return true;
}

template <typename TSpec, typename TConfig, typename TSize>
bool load(ReadsLoader<TSpec, TConfig> & loader, TSize count)
{
    switch (loader._fileFormat.tagId)
    {
    case Find<AutoSeqStreamFormat, Fasta>::VALUE:
        return load(loader, count, Fasta());
    case Find<AutoSeqStreamFormat, Fastq>::VALUE:
        return load(loader, count, Fastq());
    default:
        return false;
    }
}

template <typename TSpec, typename TConfig, typename TSize, typename TFormat>
bool load(ReadsLoader<TSpec, TConfig> & loader, TSize count, TFormat const & /* tag */)
{
    CharString                  seqName;
    FragStoreConfig::TReadSeq   seq;

    // Read records.
    for (; count > 0 && !atEnd(loader); count--)
    {
        // NOTE(esiragusa): AutoFormat seems to thrash memory allocation.
//        if (readRecord(seqName, seq, *(loader._reader), loader._fileFormat) != 0)

        if (readRecord(seqName, seq, *(loader._reader), TFormat()) != 0)
            return false;

        appendSeq(value(loader.reads), seq);
        appendName(value(loader.reads), seqName, typename TConfig::TUseReadNameStore());
        appendId(value(loader.reads), TReadStoreElement::INVALID_ID, typename TConfig::TUseReadStore());
    }

    value(loader.reads).readsCount = length(getSeqs(value(loader.reads)));

    // Append reverse complemented reads.
    _loadReverseComplement(loader);

    return true;
}

// ----------------------------------------------------------------------------
// Function _loadReverseComplement()                              [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
void _loadReverseComplement(ReadsLoader<TSpec, TConfig> & loader)
{
    for (TReadSeqStoreSize readId = 0; readId < value(loader.reads).readsCount; ++readId)
    {
        TReadSeq & read = getSeqs(value(loader.reads))[readId];
        appendSeq(value(loader.reads), read);
        reverseComplement(back(getSeqs(value(loader.reads))));
    }
}

// ----------------------------------------------------------------------------
// Function atEnd()                                               [ReadsLoader]
// ----------------------------------------------------------------------------

template <typename TSpec, typename TConfig>
inline bool atEnd(ReadsLoader<TSpec, TConfig> & reads)
{
    return atEnd(*(reads._reader));
}

// ============================================================================
// Operators
// ============================================================================

// Dna5 specializations to deal with uncalled bases

namespace seqan {
static unsigned char __MASK_DNA5_EQ[]  = {1, 2, 4, 8, 0};
static unsigned char __MASK_DNA5_LT[]  = {0, 1, 2, 3, 4};
static unsigned char __MASK_DNA5Q_LT[] = {0, 1, 2, 3, 5};

// ----------------------------------------------------------------------------
// Operators ==, !=, <, >, <=, >=                [Dna5 vs Dna5Q, Dna5Q vs Dna5]
// ----------------------------------------------------------------------------

template <>
inline bool operator==(Dna5 const & left_, Dna5Q const & right_)
{
    return __MASK_DNA5_EQ[ordValue(left_)] & __MASK_DNA5_EQ[ordValue(right_)];
}

template <>
inline bool operator==(Dna5Q const & left_, Dna5 const & right_)
{
    return __MASK_DNA5_EQ[ordValue(left_)] & __MASK_DNA5_EQ[ordValue(right_)];
}

template <>
inline bool operator!=(Dna5 const & left_, Dna5Q const & right_)
{
    return !(__MASK_DNA5_EQ[ordValue(left_)] & __MASK_DNA5_EQ[ordValue(right_)]);
}

template <>
inline bool operator!=(Dna5Q const & left_, Dna5 const & right_)
{
    return !(__MASK_DNA5_EQ[ordValue(left_)] & __MASK_DNA5_EQ[ordValue(right_)]);
}

template <>
inline bool operator<(Dna5 const & left_, Dna5Q const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] < __MASK_DNA5Q_LT[ordValue(right_)];
}

template <>
inline bool operator<(Dna5Q const & left_, Dna5 const & right_)
{
    return __MASK_DNA5Q_LT[ordValue(left_)] < __MASK_DNA5_LT[ordValue(right_)];
}

template <>
inline bool operator>(Dna5 const & left_, Dna5Q const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] > __MASK_DNA5Q_LT[ordValue(right_)];
}

template <>
inline bool operator>(Dna5Q const & left_, Dna5 const & right_)
{
    return __MASK_DNA5Q_LT[ordValue(left_)] > __MASK_DNA5_LT[ordValue(right_)];
}

template <>
inline bool operator<=(Dna5 const & left_, Dna5Q const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] <= __MASK_DNA5Q_LT[ordValue(right_)];
}

template <>
inline bool operator<=(Dna5Q const & left_, Dna5 const & right_)
{
    return __MASK_DNA5Q_LT[ordValue(left_)] <= __MASK_DNA5_LT[ordValue(right_)];
}

template <>
inline bool operator>=(Dna5 const & left_, Dna5Q const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] >= __MASK_DNA5Q_LT[ordValue(right_)];
}

template <>
inline bool operator>=(Dna5Q const & left_, Dna5 const & right_)
{
    return __MASK_DNA5Q_LT[ordValue(left_)] >= __MASK_DNA5_LT[ordValue(right_)];
}

// ----------------------------------------------------------------------------
// Functions ordLess/Equal/Greater()                             [Dna5 vs Dna5]
// ----------------------------------------------------------------------------

template <>
inline bool ordLess(Dna5 const & left_, Dna5 const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] < __MASK_DNA5Q_LT[ordValue(right_)];
}

template <>
inline bool ordEqual(Dna5 const & left_, Dna5 const & right_)
{
    return __MASK_DNA5_EQ[ordValue(left_)] & __MASK_DNA5_EQ[ordValue(right_)];
}

template <>
inline bool ordGreater(Dna5 const & left_, Dna5 const & right_)
{
    return __MASK_DNA5_LT[ordValue(left_)] > __MASK_DNA5Q_LT[ordValue(right_)];
}
}

#endif  // #ifndef SEQAN_EXTRAS_MASAI_STORE_H_

redpajama_set_name: RedPajamaGithub


text:
Q: Is LAMP strictly for development purposes? So basically, is LAMP strictly for development purposes or is it fine for production websites as well? I ask this because I have recently switched to Ubuntu from Windows and if LAMP is anything like WANP, it is more aimed towards development than production (live) websites.
Does the same apply for LAMP? I wish to run a small website on Ubuntu and I'm wondering if LAMP is secure enough.

A: LAMP is definitely production ready, of course with any IP accessible service(s) you have to follow Security Best Practices.
Secure LAMP server for production use
Basics;

*

*hide all version numbers and debug/informations pages

*create a mysql user for each application with hardened passwords

*use regular user accounts (using sudo if needing root permissions)

*use a firewall (iptables) and open specific ports

*do not load modules you don't explicitly need

*apply latest patches/keep packages up to date

redpajama_set_name: RedPajamaStackExchange


text:
Die Tausend-Buddha-Höhlen von Kizil, kurz: Kizil-Grotten (auch Qizil-Höhlen;  oder ) sind eine Reihe von 236 buddhistischen Felshöhlen in der Gemeinde Kizil (Qïzïl, 克孜尔乡) des Kreises Bay (Baicheng) im Regierungsbezirk Aksu des Uigurischen Autonomen Gebiets Xinjiang, China.

Lage
Die Kizil-Grotten liegen ca. 7 km südöstlich von Kizil am nördlichen Ufer des Flusses Muzart (chin. Muzate He), ca. 75 km von Kuqa (Kutscha) entfernt. Die Region war ein Handelszentrum auf der Seidenstraße.

Geschichte
Die Höhlen sind einer der frühesten bedeutenden buddhistischen Felshöhlenkomplexe in China. Die Höhlen wurden überwiegend in der Zeit der Südlichen und Nördlichen Dynastien gegraben, die frühesten schon im 4. Jahrhundert (darunter die berühmte Höhle Nr. 38), die spätesten in der Zeit der Yuan-Dynastie. Obwohl die Stätte beschädigt und geplündert wurde, sind viele Quadratmeter Wandmalereien – überwiegend mit Jatakas – erhalten.

Die Höhlentempel stehen seit 1961 auf der Denkmalliste der Volksrepublik China in Xinjiang (1-41) und sind seit 2014 Bestandteil der UNESCO-Welterbestätte mit dem Titel Seidenstraßen: das Straßennetzwerk des Chang'an-Tianshan-Korridors.

Siehe auch
 Tausend-Buddha-Höhlen von Bäzäklik
 Mogao-Grotten

Literatur
 Monika Zin: The Identification of Kizil Paintings I. In: Indo-Asiatische Zeitschrift, Band 9, 2005, S. 23–36
 Monika Zin: The Identification of Kizil Paintings II. In: Indo-Asiatische Zeitschrift, Band 11, 2007, S. 43–52
 Monika Zin: The Identification of Kizil Paintings III. In: Indo-Asiatische Zeitschrift, Band 12, 2008, S. 50–61
 Monika Zin: The Identification of Kizil Paintings IV. In: Indo-Asiatische Zeitschrift, Band 14, 2010, S. 22–30
 Monika Zin: The Identification of Kizil Paintings V. In: Indo-Asiatische Zeitschrift, Band 15, 2011, S. 57–69
 Monika Zin: The Identification of Kizil Paintings VI. In: Indo-Asiatische Zeitschrift, Band 17, 2013, S. 5–15
 Giuseppe Vignato: Kizil: Characteristics and Development of the Groups of Caves in Western Guxi. In: Annali dell′Istituto Universitrio Orientale di Napoli (AION), Band 65, Nr. 1–4, 2005, S. 121–140

Chinesische Literatur
 Zhongguo shiku: Kezi'er shiku [Kizil-Felsenhöhlen], 3 Bde., Beijing: Wenwu chubanshe 1984–85
 Cihai ("Meer der Wörter"); Shanghai: Shanghai cishu chubanshe 2002; ISBN 7-5326-0839-5
 Zhongguo da baike quanshu: Kaoguxue (Große chinesische Enzyklopädie: Band Archäologie). Beijing: Zhongguo da baike quanshu chubanshe, 1986

Weblinks
 Kizil Thousand-Buddha Caves and Subashi Ruins. Travel China Guide
 Revealing the Beauty of the Kizil Caves. china.org.cn

Einzelnachweise

Höhle in China
Kizil
Xinjiang
Nationales Kulturdenkmal der Volksrepublik China
Höhlentempel
Höhle in Asien
Bestandteil der Welterbestätte "Seidenstraßen: das Straßennetzwerk des Chang'an-Tianshan-Korridors" in China

redpajama_set_name: RedPajamaWikipedia


Most of the recaps of Retail's BIG Show, hosted by the National Retail Federation last week, have been focused on technology. And for good reason: It's new, or at least ever-changing. So there's always something to report on. And the lists of takeaways help retail executives with their tech FOMO.
But what stood out to me more than always-new technology was a collection of statements from the show about the people who work in retail and the investments the industry makes in them, largely in the name of customer experience.