text:
Boots proposes practice closures in the wake of COVID-19
Up to 48 Boots Opticians stores could close as the company launches a consultation for a transformation plan in response to the impact of coronavirus
09 July 2020 by Kimberley Young 5
Boots UK has launched a consultation process for a restructuring across its head office, store teams and Boots Opticians teams as the company aims to "mitigate the significant impact" that COVID-19 has had on the business.
The consultation includes proposals to cut up to 4000 jobs, as well as the closure of 48 Boots Opticians stores.
In a statement announcing the plans, the company explained that though a selection of stores have remained open throughout lockdown to provide pharmaceutical and healthcare services, with "dramatically reduced" footfall in the height of the lockdown and key revenue-driving parts of the business closed, retail sales have been affected.
More than 100 of the larger stores in locations such as city centres, stations and airports were closed, along with "the majority" of Boots Opticians practices, excepting some delivering essential and emergency care during the lockdown.
The company suggested these factors combined to impact retail sales, seeing a reduction of 72% for Boots Opticians and 48% for Boots UK in the third quarter, compared to last year.
The consultation process will consider "significant restructuring" across head office, store teams and Boots Opticians teams, which the company says could result in a reduction of the workforce by 7% and the closure of nearly 50 optical stores.
While restrictions are being lifted gradually in the UK, the company said that "with an uncertain economic outlook, it is anticipated that the High Street will take considerable time to recover."
Managing director for Boots UK, Sebastian James, said the proposals are "decisive actions to accelerate our Transformation Plan" which would allow the company to continue its "vital role" in the UK health system and ensure profitable long-term growth.
Recognising the work of Boots colleagues through the lockdown period, he continued: "We recognise that today's proposals will be very difficult for the remarkable people who make up the heart of our business, and we will do everything in our power to provide the fullest support during this time."
The AOP's head of employment, Liz Stephenson, called the news "distressing" for members employed by Boots UK.
"Throughout the pandemic optometrists and optical practices have been placed in increasingly difficult circumstances by slow decision making by the authorities," Ms Stephenson commented. She added, "We are concerned that a company the size of Boots has reached this decision, and in particular that it has taken it so early, before the future landscape has taken shape."
Ms Stephenson also recognised the concern for wider communities who may be impacted by the closures, commenting: "Optometrists will rightly be concerned for their patients and the impact that these closures may have on eye health as well as the impact on them and their families."
"The AOP will do all it can to assist its members once more details become available and will be publishing resources to assist members," Ms Stephenson added.
You must be logged in to join the discussion. Log in
Anonymous13 July 2020
This has to be the best thing that has come out of this whole Coronavirus disaster - the closure of 48 money grabbing multiple stores (I won't call them practices). It doesn't matter it's Boots - I'd be delighted whichever multiple it was. They set up store because other stores are there for marginal gains in market share - that's all they're interested in. They don't care who they trample over in the process. GOOD RIDDANCE!
Report Like 14
Just adding to the above; Boots "customers" can now take the opportunity to become a PATIENT at a proper optometrists practice. And I do sincerely hope that Boots Optom's and DOs see the light and take the opportunity to work somewhere where they'll be valued and not have to work to impossible conversion rates/short appointment times.
So do we really need apprentice Optoms now multiples are shedding jobs to protect their profits? Or was it just to push salaries down...
cizeidan15 July 2020
Sad reflection on the optical market -realistically Boots opticians pushed the limits of loyalty from their own staff and most staff did not enjoy or respect the high ranked officers as they were detached from ground force- not surprised but others will follow - VE& OE- those who are looking at figures only as with Scrivens and Specsavers will soon also find loyalty is not a Cow that you milk dry and expect it to stay healthy! Professionalism sadly is thin niw due to the poor guidance and lack of leadership in the optical sector
hilaryandmichael24 July 2020
The multiple optical apocalypse has begun-and the rebirth of good independent optometrist led businesses is in the offing
It's about time the corporate optical sectors got the drubbing it so thoroughly deserves-pity the MP's who were so in favour of the businesses deregulation won't fall into the chasm as well-but as is always the case-the detractors of independent people will still profit one way or another independent optometry its time to wake up-our time has come !
Report a comment
Reason for reporting comment
Across OT
Across High Street
Optical practices in England can remain open in Tier 4, Government confirms
UK surgeon finds 27 missing contact lenses in woman's eye
England enters national lockdown
Optometrists invited to help deliver COVID-19 vaccines
Scotland's First Minister introduces new lockdown
Boots Opticians fined £40,000 over misleading blue light advertising
Specsavers and Boots Opticians ranked in best for customer service survey
DVLA announces contract has been retained by Specsavers
Vision Express partners with Tesco for £10 eye test offer
UK High Streets: the view from practice
More High Street articles
The future of the High Street
BBR Optometry joins the Hakim Group
Optegra acquired by investment firm H2 Equity Partners


Treat yourself to a fine wine collection sure to impress. This six-pack features some West Coast favorites. You will receive a Washington Red Blend, a Pinot Noir from Oregon's Willamette Valley, and Merlot and Cabernet from California.
A blend of Cabernet, Merlot, Cabernet Franc, Syrah, Mourvèdre and Petit Verdot, this wine is a seamless, perfumed, complex reflection of elegance and grace. While leaning toward the lighter side of full-bodied, it has fabulous intensity of flavor with an impossible to resist profile.
Indicative of a cooler-temperature Pinot Noir, it is between garnet and ruby in color. The wine is clean with fairly intense aromatics - warm baking spices, red berries along with a hint of dust and a note of paraffin. Bright on the palate with medium body, which is another hallmark of its Willamette roots. Although the strawberry and rhubarb fruits are still developing, the tannins have the grit of youth, speaking to an ageable wine. This wine received a 90 point rating from Tasting Panel Magazine!
This Cabernet was sourced from Lodi, CA and is extremely well balanced. It displays lush fruit with dark plum and wild berry flavors creating a complex medley on the palate with a wonderful mouthfeel.


text:
Q: Spark GraphX Runtime Query Is it possible to query GraphX at runtime? Or must these queries be compiled and deployed?
If so, is there anything out there that would be the equivalent of Cypher for GraphX?
Thank you

A: yes , it is possible but you have to see the spark Documentation
http://spark.apache.org/screencasts/2-spark-documentation-overview.html

redpajama_set_name: RedPajamaStackExchange


It's no secret I am not a fan of Adobe (and I used to work for them), but I have a new workflow that "may" force me to use their DNG Converter.
My Raw converter of choice (DxO PhotoLab 2) does not currently support some high rez RAW files I'll be shooting. So I am forced to use an intermediate step. That can either be SilkyPix to TIFF (which creates a darn near half GigaByte image file), or use Adobe DNG Converter (which downsizes the 130+ MB RAW file to 20-50 MB).
Obviously, seeing 70% of the file's data go the way of the dodo has me concerned. Should I be?


He got things done...He was not one to sit around and wait for something to happen. He wanted to make it happen.
The Jones Family Foundation was founded by Charles H. Jones in 1986 for the purpose of giving back to the communities wherein he garnered success. We exist to provide grants to qualified 501(c)3 organizations in Middle Georgia that provide high impact results focused on improving the overall community in education, religious, and civic endeavors.
While we believe that partnering with and funding difference-making organizations is extremely important, we want to see all of Central Georgia come together and join in on an individual basis.
Our goal is to unite our community by giving every citizen an easy way to support the projects and organizations they are passionate about. We believe that great things are happening all across Central Georgia communities, and as more people like you selflessly give to the causes and organizations that matter most to them, we will see a remarkable change. We invite you to view our list of current projects, pick one that you are passionate about, and join us in supporting them financially if you so choose.
We believe that a great deal is lost without the direct and personal engagement one can experience in the arts. Here's how we want to help electrify..
Our goal is to unite our community by giving every citizen an easy way to support the projects and organizations they are passionate about.


text:
Inside the Confederation Line train mock-up
Over the weekend, I made a visit to Lansdowne Park to check out the mock-up of the new Alstom Citadis Spirit light rail vehicle that will be servicing the future Confederation Line. The length of the mock-up is about a third of a "car", but it's enough to get an idea of what you will be riding in 2018.
Each set of doors has a green button on both sides to open allow passengers to enter and exit. During the winter and summer months, opening the doors only as necessary will help reduce the cold or warm air coming in at outdoor stations.
The blue and dark square pattern of the seats appears to be consistent with the colour scheme of the seats on the O-Train Bombardier trains. Cooperative seating is faced sideways with all of this spacious standing room in between. Each car will have four areas for mobility devices.
The aisle looks wide enough for people to squeeze by to exit or find a seat. But if you go further down the train (in either direction), the aisle narrows to a similar width as an articulated bus aisle before the bend.
When a train is full during rush hour, passenger flow will be a challenge. Getting by someone or allowing someone to get by you will feel uncomfortable just like on an articulated bus. Dwell times will be longer during rush-hour anyway, but poor passenger flow will only make them longer.
Below, this area has few poles to grab onto if you do stand. The lack of an overhead horizontal bar will only create pockets of unused standing space where there are no vertical bars. One can hope that an overhead bar can be added later.
If there's one thing that wasn't overlooked, it's the safety features. Each car will have six passenger intercoms for emergency use.
Right above the intercom is a message screen for displaying station names, public service announcements, and emergency messages. These messages will also be shown overhead at the accordion part of the train.
At the top, there's an emergency door release and right across, also near a set of doors, a security camera is installed.
These are only my initial observations of a model, which can't be compared to a moving train with passengers on board. You can view and step inside the mock-up on any day of the week from 8 a.m. to 8 p.m. in the Aberdeen Pavilion at Lansdowne Park until March 31.
(Correction: The mock-up will be displayed until March 31st, not "until mid-March" as initially written on OC Transpo's page.)
Posted by Wes Chu at 7:00 AM
Tags: Confederation Line, Light-Rail, OC Transpo
Hualala said...

redpajama_set_name: RedPajamaCommonCrawl


text:
You are here: Home / Legislature / House opens session as talk of ethics clashes with ethical problems
House opens session as talk of ethics clashes with ethical problems
House Speaker Ron Richard opens session
On a day clouded by ethical problems, the Missouri House opens a new session with a call to enact ethics reform.
House Speaker Ron Richard (R-Joplin) concentrates on ethics during his opening day address.
"We must never forget we sit in the people's chamber and our sacred duty as their elected officials is the maintenance of the integrity and sanctity of the Missouri House of Representatives," Richard tells fellow House members in his opening day remarks.
Richard, in consultation with House Minority Leader Paul LeVota (D-Independence), has appointed a Special Standing Committee on Government Accountability and Ethics Reform. Rep. Kevin Wilson (R-Neosho) will chair the committee which has been instructed to review the various ethics legislation proposed this session and boil them down into one version that can attract both Republican and Democratic support.
"Regardless of party affiliation we can all agree that the sanctity of this body is important," Richard says. "From this point forward, we commit ourselves to gain and hold the faith that the people of Missouri have in their elected representatives."
That faith might have been shaken somewhat by events this past year. In fact, even as Richard made his remarks, former Rep. Talibdin "T.D." El-Amin, a St. Louis Democrat, was sentenced to a year-and-a-half in prison for bribery. El-Amin has also been ordered to pay $2,100 in restitution. In addition, former Speaker Rod Jetton pleaded not guilty to felony assault charges. Jetton, a Republican from Marble Hill, has been accused of assaulting a woman during an evening of rough sex at her Sikeston home November 15th. Former Sen. Jeff Smith, a Democrat from St. Louis, began the New Year by reporting to a federal prison in Kentucky. Smith lied to federal election authorities about his involvement in a political attack against St. Louis area Congressman Russ Carnahan during their 2004 Democratic congressional primary race. Former state Rep. Steve Brown, a fellow St. Louis Democrat, was placed on two years' probation for helping Smith in the smear campaign against Carnahan.
Brent Martin reports (:60 MP3)
2openingva
House Speaker Ron Richard opening day speech. (6 min MP3)
Richard_opening_speech
Filed Under: Legislature Tagged With: Democratic Party, ethics reform, Republican Party


text:
The following flag etiquette guidance is from Fort McCoy Regulation 350-2, (Directorate of Plans, Training, Mobilization and Security) Training Support and Services, (Feb. 1, 2012), pages 4-5. (NOTE: there is no cannon-firing simulation at Fort McCoy.)
Questions can be directed to the Fort McCoy garrison command sergeant major at 608-388-3605.
Reveille 6 a.m. (0600)
Military personnel in uniform, in formation or a group: Senior person brings group to attention and present arms during "Reveille." Hold salute until the last note of "Reveille." When music stops, formation brought to order arms.
Military personnel in uniform, not in formation or a group: Stop, face the flag (or in direction of the music), come to attention, and present arms during "Reveille." When music stops, come to order arms and carry on.
Military or civilian personnel in civilian clothes: Stop, remove headgear (if necessary), face the flag (or in direction of the music), come to attention, and place right hand over heart. When music stops, continue on your way.
All personnel in vehicles: Stop in a safe area, exit vehicles, face the flag (or in direction of the music), and render honors as described above.
Retreat 5 p.m. (1700)
Military personnel in uniform, in formation or a group: Senior person brings unit to attention and parade rest on the first note of "Retreat." On the last note of "Retreat," bring unit to attention and present arms. Hold salute until the last note of "To the Colors." When music stops, formation brought to order arms and carry on.
Military personnel in uniform, not in formation or a group: Stop, face the flag (in direction of the music), and come to attention during "Retreat." At the first note of "To the Colors," present arms. Hold salute. When music stops, come to order arms and carry on.
Military or civilian personnel in civilian clothes: Stop, remove headgear (if necessary), face the flag (in direction of the music), and come to attention during "Retreat." At the first note of "To the Colors," place right hand over heart. When music stops, continue on your way.
All personnel in vehicles: Stop in a safe area, exit vehicles, face the flag (in the direction of the music), and render honors as described above.
In accordance with the National Defense Authorization Act 2008, Section 594, military personnel, including veterans, who are not in uniform may render a hand salute during the raising or lowering of the National (U.S.) Flag at "Reveille" and "Retreat."


David Aplin Group, one of Canada's Best Managed Companies, has partnered with our client to recruit a Manufacturing Production Planner based in Winnipeg, MB.
As a Manufacturing Production Planner working directly with the Plant Manager, you will develop and manage the detailed production schedule for the business. In this fast-paced role you will be the glue holding sales, customer service, purchasing and manufacturing teams together. As a Production Planner you will release work orders according to job order priorities, coordinate work activities, monitor progress, identify and communicate challenges and collaborate in development of corrective action plans.
The goal of this role will be to take initiative and address customer lead time requirements.
Post secondary in a technical field preferred but not required.
3+ years of experience working within a manufacturing environment in a planning capacity.
Must be comfortable on the shop floor, dealing directly with the floor staff.
Excellent leadership, communication and facilitation skills.
Detail orientation and ability to thrive in a fast paced, ever evolving environment.
Strong planning/scheduling and organizational skills.
Competency with MS Office products, exceptional excel skills.
Lean manufacturing experience a benefit.


Airbus Defence and Space has announced the launch of the world's first High Altitude Pseudo-Satellite (HAPS) flight base in Wyndham, Western Australia. The facility will serve as the base for the company's Zephyr UAV.
The Wyndham site was selected due to its largely unrestricted airspace and reliable weather, and is the result of significant investment by Airbus into its Zephyr program.
Zephyr is a HAPS, stratospheric, solar-electric unmanned aerial vehicle (UAV) and is the first aircraft of its kind to fly in the stratosphere. Zephyr harnesses the sun's rays, running exclusively on solar power. It is able to fly for months at a time, combining the persistence of a satellite with the flexibility of a UAV.
Zephyr S: With an ability to carry payloads, offering voice, data communications both line of sight and beyond the line of sight, and line of sight high resolution optical imagery. Zephyr S has a wingspan of 25 metres and weighs less than 75 kilograms. It is able to carry see, sense and connect payloads.
Zephyr T: Is capable of carrying larger payloads and offers the ability to bring more active payloads to the fore; for example, widespread, persistent internet coverage to remote areas of the globe, and active radar. The in-development, larger Zephyr T has a wingspan of 33 metres and weighs 140 kilograms. Its larger size enables it to accommodate payloads with larger masses.
Jana Rosenmann, head of unmanned aerial systems at Airbus, said, "The official opening of the Airbus Wyndham launch site in Western Australia, the world's first operational HAPS site, marks the start of a new era for Zephyr."
The Zephyr platform is designed to run exclusively on solar power, above both the weather and conventional air traffic; filling a capability gap complementary to satellites, UAVs and manned aircraft to provide persistent local satellite-like services.
"We are proud to see Australia become part of the Zephyr operational network. The site is our gateway to the stratosphere and will be the main flight base for Zephyr going forward," Rosenmann said.
WA Premier Mark McGowan welcomed the Airbus announcement, saying, "I am delighted to welcome the Airbus team and their Zephyr project to Western Australia. This is the culmination of almost a year of hard work by Airbus and my government to bring this exciting and innovative technology to our state."
The original target mission of the Zephyr is to provide local persistence at an affordable price with a re-usable solar-powered aircraft, providing a wide scope of applications, ranging, for example, from maritime surveillance and services, border patrol missions, communications, forest fire detection and monitoring, or navigation.
"The Zephyr aircraft provides new capabilities to commercial and military customers and will bring an economic boost to the East Kimberley region," Premier McGowan said.
Operating in the stratosphere at an average altitude of 70,000 feet/21 kilometres, the ultra-lightweight Zephyr has a wingspan of 25 metres and a weight of less than 75 kilograms, and flies above weather (clouds, jet streams) and above regular air traffic, covering local or regional footprints.
Zephyr is ideally suited for 'local persistence' (intelligence, surveillance and reconnaissance), the Zephyr has the ability to stay focused on a specific area of interest (which can be hundreds of miles wide) while providing it with satellite-like communications and Earth observation services (with greater imagery granularity) over long periods of time without interruption.


Give a new style accent to your living room with this beautiful white applique work cushion cover.It will add a charm to your home décor.
- To give a special look to your living space.
- Hand Wash Separately in cold water with mild/liquid detergents recommended.


Sachi's Quest is an independently developed, first-person, science fiction, adventure game for Windows PC. Set in a very dark far future, you play as Sachi, an elite female agent fighting in a human rebellion against alien oppressors.
When Sachi finds out about a threat that could wipe out the entire human race, it becomes her mission to travel from one hostile planet to the next, leading to a final showdown on a conquered world known as Earth.


text:
regions-header
Many New England states have shown their commitment to clean energy through nation-leading energy efficiency programs and renewable energy installations. To continue reducing emissions, they must act to modernize the power grid and adopt more clean energy technologies.
Emissions Reductions
1990 Levels
New England Recorded Emissions, 1990-2015
Projected Reductions, 2015-2030
Select a key area to see how individual technologies can grow to replace traditional, fossil-fueled energy. Drag the bar on the bottom of the page to see total emissions decline as each technology expands.
15% from clean energy in 2015 57% by 2030
0% from clean energy in 2015 18% by 2030
Electric Generation Transportation Buildings Grid Modernization
Percentage of Renewables in Energy Mix
Key Sector
New England can support renewables development and make renewable generation, including hydroelectricity, 57% of its energy mix by 2030.
The sources of electricity generation in New England have shifted significantly from 2001 to the present. Coal use declined from 16% to 4% and natural gas increased from 29% to 49%. This shift initially reduced greenhouse gas emissions by pushing out less-efficient coal plants, but the region's increasing overreliance on natural gas will provide the region with few additional emissions benefits and increases risks of price volatility and supply disruption. Expanding renewable generation is a less risky alternative that provides stable costs, mitigates fuel price risk, and reduces emissions.
Megawatts of Land-Based Wind
Land-Based Wind
New England states can increase land-based wind by 3,700 megawatts to reach the 2030 target.
Renewable Portfolio Standards provide overarching targets for developers and policymakers, and New England states are also advancing renewable generation by issuing large-scale purchase bids, or long-term contracts, in the market. These contracts finance and construct large renewable projects like land-based wind farms that have significant capital costs and require upgrades to transmission infrastructure. Large-scale purchases of renewable energy reduce costs and can help to overcome financial barriers that could otherwise stifle development.
Megawatts of Offshore Wind
States can also increase offshore wind by 4,000 megawatts to reach their emissions targets.
Good wind speeds, shallow water, and proximity to population centers make offshore wind a promising grid-scale renewable resource. The first offshore wind farm in the country is operational in Rhode Island, and Massachusetts utilities will solicit 1,600 megawatts of offshore wind capacity pursuant to new legislation. With continuing commitments to offshore wind, New England could attract a large share of industry jobs and spur economic development.
First Offshore Wind Farm in the Nation
At the end of 2016, Rhode Island became the first state in the U.S. to host an offshore wind project. The Block Island Wind Farm has five turbines and produces 30 MW of clean, renewable energy.
Megawatts of Distributed Solar
Distributed Solar
Distributed solar, including rooftop, community, commercial, and municipal solar, can grow 11 gigawatts, nearly 11 times its current reach.
Unlike large-scale electricity generation that feeds into the transmission system, distributed generation (DG) provides energy directly to consumers and the local distribution grid. In addition to generating clean energy, clean DG resources like rooftop solar can make the electric grid more resilient and reduce the need for expensive grid infrastructure. On-site distributed generation can be a valuable resource that benefits the energy system, while empowering consumers to control their energy bills and receive payment for the local energy they produce.
Megawatts of Grid-Scale Solar
Grid-Scale Solar
Grid-scale solar can provide an additional 5,000 megawatts of solar across New England.
Like large-scale wind projects, grid-scale solar is most cost-effective when acquired through bulk purchasing. Upgrading the existing system or building new transmission lines to renewable sites can carry significant up-front costs that are difficult to finance with uncertain revenue from renewable energy certificates and energy markets alone. Several states have pursued bulk purchasing of renewable energy and hydroelectricity through long-term contracting to overcome some of these barriers.
Solar PV
Solar photovoltaic (PV) projects can be grid-scale or built to provide energy to a single home. The technology can be installed in a variety of places and is therefore uniquely suited to provide distributed generation. Distributed solar projects bring special value by avoiding expensive infrastructure and providing local jobs. As a result, solar PV has been promoted across the region through dedicated programs that reflect this value, including the ZREC program in Connecticut, the Renewable Energy Growth program in Rhode Island, and a new Massachusetts program that will create incentives for siting in preferred locations, offer bonuses for low-income participation, and incorporate energy storage.
Trillion BTU of Fossil Fuels
By adopting zero-emission vehicles (ZEVs) and improving mobility options, New England can reduce fossil fuel consumption for transportation by more than 20%, or 190 trillion BTU, by 2030.
New England must embrace clean transportation technologies to build a cleaner and more efficient regional transportation system. By adopting these technologies, states can also reduce greenhouse gas (GHG) emissions significantly, as fossil fuels burned for transportation represent the largest share of the region's GHG emissions. New policy measures can build on already growing consumer interest in zero-emission vehicles (ZEVs), primarily electric vehicles (EVs), to replace more conventional cars and trucks. At the same time, the states can invest in alternative mobility options to create vibrant communities and reduce the need to drive in both urban and rural areas.
Percentage of Cars Electrified
New England states can electrify at least 13.5% of light cars and trucks by 2030.
An electric vehicle (EV) emits less than half of the CO2 of a conventional vehicle, and EVs will produce even fewer emissions as technology improves and more electricity is produced by renewables. CT, MA, RI, and VT have committed to put 537,000 zero emission vehicles on the road by 2025. These commitments can be expanded to include all New England states and strengthened through an ambitious but achievable 2030 target 13% of cars and light trucks electrified.
Deployment will require smarter electric rates that make EVs more attractive to drivers and consumer incentives to facilitate EV purchases, which would decline over time. Pricing transportation emissions will accelerate EV adoption while raising funds for rebates, electric vehicle charging infrastructure, transit, and other transportation sector investments.
Percentage of Trucks Electrified
Medium-Duty Electric Trucks
Converting an additional 2.5% of the medium duty fleet to electric vehicles will help the region meet its clean energy goals.
Beyond passenger cars and light trucks, medium-duty vehicles, such as buses and delivery trucks, can also be electrified. For example, at the end of 2015, FedEx had already placed nearly 1,200 electric vehicles in service in its global fleet.
By promoting the benefits of these vehicles, including reduced fuel and maintenance costs, states can achieve greater adoption of commercially available electric alternatives in the medium-duty fleet.
Percent Decrease in VMT Compared to the Baseline Scenario
Vehicle Miles Traveled
New England can slow projected VMT growth from 11% under current policies to 5%, reducing annual VMT 5% over a 15-year period.
To put this in perspective, VMT in the Northeast dropped 5% in the period of 2007 to 2011, an equivalent reduction in only 4 years.
Public transit, walking, biking, carpooling, and ride-hailing services can reduce the number of miles a car is driven. From rural to urban areas, improving access to these services and activities can create vibrant communities and reduce emissions.
Increased efficiency and electric heat pumps can reduce fossil fuels consumed in buildings 29%, or by more than 200 trillion BTU, by 2030.
To advance the clean energy future, buildings in New England must be powered and heated by cleaner energy sources while at the same time becoming more efficient. Continued investment in energy efficiency will save money and avoid unnecessary energy waste. When efficiency is combined with clean heating technologies, a deep emissions reduction pathway emerges. The buildings of tomorrow will reflect a much more integrated and interactive energy system that produces and consumes electricity in ways that result in a cleaner and more efficient grid.
Percentage of Heating Systems Converted
To meet the 2030 target, New England states can convert 14% of oil, gas, and propane heating systems in homes and businesses to heat pumps.
Heat pumps are a form of efficient electric heating for residential and commercial buildings. They extract heat from either outside air or the ground and move it into a building. An air conditioner is a type of heat pump that moves heat from inside a building to the outside to cool it; heat pumps simply reverse this process during the heating season and can now efficiently function even in cold New England winters.
Percentage of Water Heaters Converted
Heat Pumps for Water Heating
New England needs to replace at least 12.4% of fossil-fueled water heaters with heat pumps by 2030.
Making hot water is the second greatest use of energy in homes after space heating. Heat pumps can increase water heating efficiency as much or even more than space heating efficiency.
States should adopt policies that assign an appropriate value to the emissions savings gained from replacing fossil fuel hot water systems with cleaner alternatives.
Percent Reduction in Electricity Consumption
Electric Efficiency
New England must decrease electric consumption 40% by 2030 to reduce emissions from electricity generation and offset additional demand from EVs and heat pumps.
New England is a national leader in investing in energy efficiency. Energy efficiency works hand in hand with coordinated improvements in our energy system: by reducing overall demand for energy, energy efficiency allows renewable energy resources to ramp up and offsets increased electricity demand from new technologies.
Many New England states have strong efficiency plans, but states must continue to show a sustained commitment to energy efficiency in order to reduce energy consumption and minimize costs. Leading states like Massachusetts and Rhode Island have achieved the highest electric savings rates in the country—approaching 3% annually. New England must achieve at least 2.5% annual efficiency goals on average to reach 2030 targets.
Percent Increase in Natural Gas Savings
Natural Gas Efficiency
By 2030, natural gas savings can increase to at least 23% through weatherization in New England.
New England states also have opportunities to reduce energy costs and emissions by investing in energy efficiency measures that reduce the use of heating fuels like natural gas, propane, and fuel oil. Weatherizing buildings, replacing outdated equipment, and improving industrial processes can all reduce the amount of fossil fuels consumed in buildings.
Lagging states need to capture all cost-effective efficiency and leading states need to sustain and even improve their current efforts. States need to find sustainable funding mechanisms for fuel oil and propane efficiency through economy-wide carbon pricing or a different mechanism.
Updated rules, planning processes, and financial incentives can enable the adoption of technologies critical to meet 2030 and longer term emissions reduction targets.
New England states must create a modern energy grid that is dynamic, low carbon, and delivers a fair, safe system that protects consumers and allows clean energy to flourish. The modern grid should incorporate investments in new technology and innovation and give consumers and communities greater control over energy costs. To transition to a modern system, states can update grid rules to incentivize utilities to achieve clean energy goals that benefit consumers.
The modern energy grid must be highly efficient and resilient, produce less pollution, and rely increasingly on distributed energy resources and sophisticated load management practices.
The traditional energy grid system has been structured around one-way power flow from power plants traveling over transmission and distribution lines to homes and businesses. In the new system, power will flow in multiple directions with greater consumer engagement and third party participation. As the energy grid evolves and distributed energy resources become more prevalent, utilities will increasingly take on the role of coordinators of the energy market, rather than functioning purely as energy providers and infrastructure developers.
Utility regulators must adopt new rules that allow the utilities to recover costs and earn comparable returns on local energy solutions.
Traditionally, utilities earn money by making a regulated rate of return on approved capital investments. This system gives utilities incentives to build or upgrade traditional infrastructure projects. These outdated utility financial incentives inhibit the transition to a clean energy future, increase consumer costs, and hinder investment in new technologies. While the region's energy needs can increasingly be met by local energy resources and smart energy management, utilities often earn far less—or nothing at all—by choosing lower-cost, clean energy solutions.
Without changes to the way they are regulated and rewarded, utilities will continue to advocate for infrastructure over local energy resources. Instead of earning revenue primarily for building new infrastructure, utilities should be rewarded for achieving energy efficiency and clean energy goals, minimizing the cost of the grid, and providing choices, opportunities, and control to consumers.
Megawatts of DR and ALM
Demand Response and Active Load Management
New England can increase Demand Response and Active Load Management to cover nearly 3,000 megawatts of electricity load by 2030.
Demand response (DR) measures reduce or shift energy consumption during periods of high demand on the grid. Traditionally, DR involves coordination between utilities and large customers. Like DR, active load management (ALM) shifts demand patterns, but it is highly-automated.
Smart or programmable technologies (e.g., thermostats, equipment, and appliances) make active load management possible. These technologies minimize a consumer's load during peak periods or shift a consumer's load when renewables are generating electricity. For example, a water heater can automatically preheat when renewable generation is available, drawing less power from fossil fuel sources.
UtilityVision
Read more about what a modern electric grid would look like in Acadia Center's UtilityVision.
Megawatts of Battery Storage
New England can adopt 2,200 MW of new battery storage to meet 2030 goals.
Batteries and other types of energy storage can store power when demand for energy is low and release it when demand is high. For example, storage can retain solar energy produced mid-day and release it after the sun goes down. Electric vehicles have the potential to contribute to both active load management, through smart coordinated charging, and storage, by releasing power from their batteries to the grid when it is economical to do so.
TotalElectric Generation Emissions
Reduction From 1990 Levels


The Family Self-Sufficiency Program is a voluntary program for tenants living in Section 8 housing through the Pawtucket Housing Authority. FSS is a supportive, goal-planning program to assist residents in achieving educational and employment goals. By participating in the FSS Program, tenants become eligible for an escrow account. This is a savings account set up in their name by the PHA. Monthly deposits are made when there is an increase in earned income. When residents complete the program they become eligible for the funds in the account.
If you are interested in participating, or learning more about this program, please contact Kimberly Gervais, FSS Coordinator, at (401) 721-6052 or Lourdes Marrero at (401) 721-6048.


text:
from __future__ import unicode_literals

import cgi
import cgitb
import Cookie
import optparse
import sys
import time

from six.moves.BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from six.moves.urllib.parse import parse_qsl, urlparse

def quoteattr(s):
    qs = cgi.escape(s, 1)
    return '"%s"' % (qs,)

try:
    import openid
except ImportError:
    sys.stderr.write("""
Failed to import the OpenID library. In order to use this example, you
must either install the library (see INSTALL in the root of the
distribution) or else add the library to python's import path (the
PYTHONPATH environment variable).

For more information, see the README in the root of the library
distribution.""")
    sys.exit(1)
else:
    del openid
    from openid.consumer import discover
    from openid.extensions import sreg
    from openid.server import server
    from openid.store.filestore import FileOpenIDStore

class OpenIDHTTPServer(HTTPServer):
    """
    http server that contains a reference to an OpenID Server and
    knows its base URL.
    """

    def __init__(self, *args, **kwargs):
        HTTPServer.__init__(self, *args, **kwargs)

        if self.server_port != 80:
            self.base_url = ('http://%s:%s/' %
                             (self.server_name, self.server_port))
        else:
            self.base_url = 'http://%s/' % (self.server_name,)

        self.openid = None
        self.approved = {}
        self.lastCheckIDRequest = {}

    def setOpenIDServer(self, oidserver):
        self.openid = oidserver

class ServerHandler(BaseHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        self.user = None
        BaseHTTPRequestHandler.__init__(self, *args, **kwargs)

    def do_GET(self):
        try:
            self.parsed_uri = urlparse(self.path)
            self.query = {}
            for k, v in parse_qsl(self.parsed_uri[4]):
                self.query[k] = v

            self.setUser()

            path = self.parsed_uri[2].lower()

            if path == '/':
                self.showMainPage()
            elif path == '/openidserver':
                self.serverEndPoint(self.query)

            elif path == '/login':
                self.showLoginPage('/', '/')
            elif path == '/loginsubmit':
                self.doLogin()
            elif path.startswith('/id/'):
                self.showIdPage(path)
            elif path.startswith('/yadis/'):
                self.showYadis(path[7:])
            elif path == '/serveryadis':
                self.showServerYadis()
            else:
                self.send_response(404)
                self.end_headers()

        except Exception:
            self.send_response(500)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(cgitb.html(sys.exc_info(), context=10))

    def do_POST(self):
        try:
            self.parsed_uri = urlparse(self.path)

            self.setUser()
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length)

            self.query = {}
            for k, v in parse_qsl(post_data):
                self.query[k] = v

            path = self.parsed_uri[2]
            if path == '/openidserver':
                self.serverEndPoint(self.query)

            elif path == '/allow':
                self.handleAllow(self.query)
            else:
                self.send_response(404)
                self.end_headers()

        except Exception:
            self.send_response(500)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(cgitb.html(sys.exc_info(), context=10))

    def handleAllow(self, query):
        # pretend this next bit is keying off the user's session or something,
        # right?
        request = self.server.lastCheckIDRequest.get(self.user)

        if 'yes' in query:
            if 'login_as' in query:
                self.user = self.query['login_as']

            if request.idSelect():
                identity = self.server.base_url + 'id/' + query['identifier']
            else:
                identity = request.identity

            trust_root = request.trust_root
            if self.query.get('remember', 'no') == 'yes':
                self.server.approved[(identity, trust_root)] = 'always'

            response = self.approved(request, identity)

        elif 'no' in query:
            response = request.answer(False)

        else:
            assert False, 'strange allow post.  %r' % (query,)

        self.displayResponse(response)

    def setUser(self):
        cookies = self.headers.get('Cookie')
        if cookies:
            morsel = Cookie.BaseCookie(cookies).get('user')
            if morsel:
                self.user = morsel.value

    def isAuthorized(self, identity_url, trust_root):
        if self.user is None:
            return False

        if identity_url != self.server.base_url + 'id/' + self.user:
            return False

        key = (identity_url, trust_root)
        return self.server.approved.get(key) is not None

    def serverEndPoint(self, query):
        try:
            request = self.server.openid.decodeRequest(query)
        except server.ProtocolError as why:
            self.displayResponse(why)
            return

        if request is None:
            # Display text indicating that this is an endpoint.
            self.showAboutPage()
            return

        if request.mode in ["checkid_immediate", "checkid_setup"]:
            self.handleCheckIDRequest(request)
        else:
            response = self.server.openid.handleRequest(request)
            self.displayResponse(response)

    def addSRegResponse(self, request, response):
        sreg_req = sreg.SRegRequest.fromOpenIDRequest(request)

        # In a real application, this data would be user-specific,
        # and the user should be asked for permission to release
        # it.
        sreg_data = {
            'nickname': self.user
        }

        sreg_resp = sreg.SRegResponse.extractResponse(sreg_req, sreg_data)
        response.addExtension(sreg_resp)

    def approved(self, request, identifier=None):
        response = request.answer(True, identity=identifier)
        self.addSRegResponse(request, response)
        return response

    def handleCheckIDRequest(self, request):
        is_authorized = self.isAuthorized(request.identity, request.trust_root)
        if is_authorized:
            response = self.approved(request)
            self.displayResponse(response)
        elif request.immediate:
            response = request.answer(False)
            self.displayResponse(response)
        else:
            self.server.lastCheckIDRequest[self.user] = request
            self.showDecidePage(request)

    def displayResponse(self, response):
        try:
            webresponse = self.server.openid.encodeResponse(response)
        except server.EncodingError as why:
            text = why.response.encodeToKVForm()
            self.showErrorPage('
%s
' % cgi.escape(text))
            return

        self.send_response(webresponse.code)
        for header, value in webresponse.headers.items():
            self.send_header(header, value)
        self.writeUserHeader()
        self.end_headers()

        if webresponse.body:
            self.wfile.write(webresponse.body)

    def doLogin(self):
        if 'submit' in self.query:
            if 'user' in self.query:
                self.user = self.query['user']
            else:
                self.user = None
            self.redirect(self.query['success_to'])
        elif 'cancel' in self.query:
            self.redirect(self.query['fail_to'])
        else:
            assert 0, 'strange login %r' % (self.query,)

    def redirect(self, url):
        self.send_response(302)
        self.send_header('Location', url)
        self.writeUserHeader()

        self.end_headers()

    def writeUserHeader(self):
        if self.user is None:
            t1970 = time.gmtime(0)
            expires = time.strftime(
                'Expires=%a, %d-%b-%y %H:%M:%S GMT', t1970)
            self.send_header('Set-Cookie', 'user=;%s' % expires)
        else:
            self.send_header('Set-Cookie', 'user=%s' % self.user)

    def showAboutPage(self):
        endpoint_url = self.server.base_url + 'openidserver'

        def link(url):
            url_attr = quoteattr(url)
            url_text = cgi.escape(url)
            return '%s' % (url_attr, url_text)

        def term(url, text):
            return '
%s

%s
' % (link(url), text)

        resources = [
            (self.server.base_url, "This example server's home page"),
            ('http://www.openidenabled.com/',
             'An OpenID community Web site, home of this library'),
            ('http://www.openid.net/', 'the official OpenID Web site'),
        ]

        resource_markup = ''.join([term(url, text) for url, text in resources])

        self.showPage(200, 'This is an OpenID server', msg="""\

%s is an OpenID server endpoint.

For more information about OpenID, see:

        %s

        """ % (link(endpoint_url), resource_markup,))

    def showErrorPage(self, error_message):
        self.showPage(400, 'Error Processing Request', err='''\

%s

        ''' % error_message)

    def showDecidePage(self, request):
        id_url_base = self.server.base_url + 'id/'
        # XXX: This may break if there are any synonyms for id_url_base,
        # such as referring to it by IP address or a CNAME.
        assert (request.identity.startswith(id_url_base) or
                request.idSelect()), repr((request.identity, id_url_base))
        expected_user = request.identity[len(id_url_base):]

        if request.idSelect():  # We are being asked to select an ID
            msg = '''\

A site has asked for your identity.  You may select an
            identifier by which you would like this site to know you.
            On a production site this would likely be a drop down list
            of pre-created accounts or have the facility to generate
            a random anonymous identifier.

            '''
            fdata = {
                'id_url_base': id_url_base,
                'trust_root': request.trust_root,
            }
            form = '''\
            <form method="POST" action="/allow">

Identity:
                 %(id_url_base)s<input type='text' name='identifier'>

Trust Root:	%(trust_root)s

Allow this authentication to proceed?

            <input type="checkbox" id="remember" name="remember" value="yes"
                />Remember this
                decision

            <input type="submit" name="yes" value="yes" />
            <input type="submit" name="no" value="no" />
            </form>
            ''' % fdata
        elif expected_user == self.user:
            msg = '''\

A new site has asked to confirm your identity.  If you
            approve, the site represented by the trust root below will
            be told that you control identity URL listed below. (If
            you are using a delegated identity, the site will take
            care of reversing the delegation on its own.)
'''

            fdata = {
                'identity': request.identity,
                'trust_root': request.trust_root,
            }
            form = '''\

Identity:	%(identity)s

Trust Root:	%(trust_root)s

Allow this authentication to proceed?

            <form method="POST" action="/allow">
              <input type="checkbox" id="remember" name="remember" value="yes"
                  />Remember this
                  decision

              <input type="submit" name="yes" value="yes" />
              <input type="submit" name="no" value="no" />
            </form>''' % fdata
        else:
            mdata = {
                'expected_user': expected_user,
                'user': self.user,
            }
            msg = '''\

A site has asked for an identity belonging to
            %(expected_user)s, but you are logged in as %(user)s.  To
            log in as %(expected_user)s and approve the login request,
            hit OK below.  The "Remember this decision" checkbox
            applies only to the trust root decision.
''' % mdata

            fdata = {
                'identity': request.identity,
                'trust_root': request.trust_root,
                'expected_user': expected_user,
            }
            form = '''\

Identity:	%(identity)s

Trust Root:	%(trust_root)s

Allow this authentication to proceed?

            <form method="POST" action="/allow">
              <input type="checkbox" id="remember" name="remember" value="yes"
                  />Remember this
                  decision

              <input type="hidden" name="login_as" value="%(expected_user)s"/>
              <input type="submit" name="yes" value="yes" />
              <input type="submit" name="no" value="no" />
            </form>''' % fdata

        self.showPage(200, 'Approve OpenID request?', msg=msg, form=form)

    def showIdPage(self, path):
        link_tag = '<link rel="openid.server" href="%sopenidserver">' %\
            self.server.base_url
        yadis_loc_tag = '<meta http-equiv="x-xrds-location" content="%s">' %\
            (self.server.base_url + 'yadis/' + path[4:])
        disco_tags = link_tag + yadis_loc_tag
        ident = self.server.base_url + path[1:]

        approved_trust_roots = []
        for (aident, trust_root) in self.server.approved.keys():
            if aident == ident:
                trs = '
<tt>%s</tt>
\n' % cgi.escape(trust_root)
                approved_trust_roots.append(trs)

        if approved_trust_roots:
            prepend = '
Approved trust roots:
\n
\n'
            approved_trust_roots.insert(0, prepend)
            approved_trust_roots.append('
\n')
            msg = ''.join(approved_trust_roots)
        else:
            msg = ''

        self.showPage(200, 'An Identity Page', head_extras=disco_tags, msg='''\

This is an identity page for %s.

        %s
        ''' % (ident, msg))

    def showYadis(self, user):
        self.send_response(200)
        self.send_header('Content-type', 'application/xrds+xml')
        self.end_headers()

        endpoint_url = self.server.base_url + 'openidserver'
        user_url = self.server.base_url + 'id/' + user
        self.wfile.write("""\
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS
    xmlns:xrds="xri://$xrds"
    xmlns="xri://$xrd*($v*2.0)">
  <XRD>

    <Service priority="0">
      <Type>%s</Type>
      <Type>%s</Type>
      <URI>%s</URI>
      <LocalID>%s</LocalID>
    </Service>

  </XRD>
</xrds:XRDS>
""" % (discover.OPENID_2_0_TYPE, discover.OPENID_1_0_TYPE,
            endpoint_url, user_url))

    def showServerYadis(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/xrds+xml')
        self.end_headers()

        endpoint_url = self.server.base_url + 'openidserver'
        self.wfile.write("""\
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS
    xmlns:xrds="xri://$xrds"
    xmlns="xri://$xrd*($v*2.0)">
  <XRD>

    <Service priority="0">
      <Type>%s</Type>
      <URI>%s</URI>
    </Service>

  </XRD>
</xrds:XRDS>
""" % (discover.OPENID_IDP_2_0_TYPE, endpoint_url,))

    def showMainPage(self):
        yadis_tag = '<meta http-equiv="x-xrds-location" content="%s">' %\
            (self.server.base_url + 'serveryadis')
        if self.user:
            openid_url = self.server.base_url + 'id/' + self.user
            user_message = """\

You are logged in as %s. Your OpenID identity URL is
            <tt>%s</tt>. Enter that URL at an OpenID
            consumer to test this server.

            """ % (self.user, quoteattr(openid_url), openid_url)
        else:
            user_message = """\

This server uses a cookie to remember who you are in
            order to simulate a standard Web user experience. You are
            not logged in.
"""

        self.showPage(200, 'Main Page', head_extras=yadis_tag, msg='''\

This is a simple OpenID server implemented using the Python OpenID
        library.

        %s

To use this server with a consumer, the consumer must be
        able to fetch HTTP pages from this web server. If this
        computer is behind a firewall, you will not be able to use
        OpenID consumers outside of the firewall with it.

The URL for this server is <tt>%s</tt>.

        ''' % (user_message, quoteattr(self.server.base_url), self.server.base_url))

    def showLoginPage(self, success_to, fail_to):
        self.showPage(200, 'Login Page', form='''\

Login

You may log in with any name. This server does not use
        passwords because it is just a sample of how to use the OpenID
        library.

        <form method="GET" action="/loginsubmit">
          <input type="hidden" name="success_to" value="%s" />
          <input type="hidden" name="fail_to" value="%s" />
          <input type="text" name="user" value="" />
          <input type="submit" name="submit" value="Log In" />
          <input type="submit" name="cancel" value="Cancel" />
        </form>
        ''' % (success_to, fail_to))

    def showPage(self, response_code, title,
                 head_extras='', msg=None, err=None, form=None):

        if self.user is None:
            user_link = 'not logged in.'
        else:
            user_link = 'logged in as %s.
' \
                        'Log out' % \
                        (self.user, self.user)

        body = ''

        if err is not None:
            body += '''\

              %s

            ''' % err

        if msg is not None:
            body += '''\

              %s

            ''' % msg

        if form is not None:
            body += '''\

              %s

            ''' % form

        contents = {
            'title': 'Python OpenID Server Example - ' + title,
            'head_extras': head_extras,
            'body': body,
            'user_link': user_link,
        }

        self.send_response(response_code)
        self.writeUserHeader()
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        self.wfile.write('''

    <title>%(title)s</title>
    %(head_extras)s

Python OpenID Server Example

          You are %(user_link)s

%(body)s

''' % contents)

def main(host, port, data_path):
    addr = (host, port)
    httpserver = OpenIDHTTPServer(addr, ServerHandler)

    # Instantiate OpenID consumer store and OpenID consumer.  If you
    # were connecting to a database, you would create the database
    # connection and instantiate an appropriate store here.
    store = FileOpenIDStore(data_path)
    oidserver = server.Server(store, httpserver.base_url + 'openidserver')

    httpserver.setOpenIDServer(oidserver)

    print('Server running at:')
    print(httpserver.base_url)
    httpserver.serve_forever()

if __name__ == '__main__':
    parser = optparse.OptionParser('Usage:\n %prog [options]')
    parser.add_option(
        '-d', '--data-path', dest='data_path', default='sstore',
        help='Data directory for storing OpenID consumer state. '
        'Defaults to "%default" in the current directory.')
    parser.add_option(
        '-p', '--port', dest='port', type='int', default=8000,
        help='Port on which to listen for HTTP requests. '
        'Defaults to port %default.')
    parser.add_option(
        '-s', '--host', dest='host', default='localhost',
        help='Host on which to listen for HTTP requests. '
        'Also used for generating URLs. Defaults to %default.')

    options, args = parser.parse_args()
    if args:
        parser.error('Expected no arguments. Got %r' % args)

    host = options.host
    port = options.port
    data_path = options.data_path

    main(host, port, data_path)

redpajama_set_name: RedPajamaGithub


text:
Q: Is it possible to make the tour more prominent to new users again? The tour (redirects to the Chemistry SE tour), is something that gives users a brief idea on how the specific site works. However, this feature has become so hidden away that new users do not even find it until they go into a very specific part of the dashboard or check their profile for the first time.
An example of this can be seen here (using Computer Science SE as an example for a boilerplate standard).

Nowhere is the tour even mentioned within the whole page given above. If one wishes to access it, they need to either to go to their profile or need to access the following

New users who come in, do neither. They just click on the Ask Question button and see the first image.
Can this tour be made more accessible? Maybe redirect people who don't have the informed badge to the tour page on their first interaction with a stack site?


What are the benefits of calmbirth®?
People leave the classes with a greater understanding of the birth process, confidence in their own ability to work with the birth process and excitement about their approaching birth. We receive many emails, cards, letters that anecdotally confirm that couples, given the right preparation can create a very special birth experience, even if medical intervention is required.


text:
Le f(x) () sono un gruppo musicale sudcoreano, formatosi a Seul nel 2009.

Le f(x) sono famose per il loro stile eterogeneo e sperimentale; dal loro debutto, hanno pubblicato 4 album in studio, due EP e un repackage.
Il gruppo era originalmente composto da 5 (in ordine di età Krystal, Sulli, Luna, Amber e Victoria) ma dopo l'abbandono di Sulli nel 2015, le f(x) sono ora 4.

Nome
Il nome del gruppo è un acronimo inverso nel quale la "f" sta per "flower" (fiore in lingua inglese), mentre la "x" sta per il cromosoma X.

Storia

2009-2010: debutto con "La ChA TA" e Nu ABO
Le f(x) erano state introdotte per la prima volta con un teaser pubblicato il 24 agosto 2009.
Il gruppo debutta sul mercato il 1º settembre 2009, con la pubblicazione del singolo digitale "La ChA TA". Le f(x) si esibiscono per la prima volta il 5 settembre 2009 nel programma Music Core di MBC. Poco dopo il debutto, il gruppo pubblica un singolo chiamato "Chocolate Love", come sponsor per LG. Il 9 novembre il gruppo rilascia il primo singolo fisico "Chu~♡".

Il 4 maggio 2010 le f(x) pubblicano il loro primo EP Nu ABO nel 2010, ottenendo la seconda posizione della classifica Circle Chart. Il singolo omonimo estratto è stato registrato in prima posizione nelle classifiche sudcoreane.

In giugno 2010 Amber prende una pausa dal gruppo a causa di un infortunio alla caviglia.

Durante l'anno le f(x) filmarono due reality show, "Hello f(x)" e "f(x) Koala".

2011-2012: primo album in studio e successo internazionale
All'inizio dell'anno Amber torna nel gruppo.

Il 20 aprile 2011 le f(x) pubblicano il loro album d'esordio Pinocchio, il quale raggiunge la prima posizione in Corea del Sud e la sedicesima in Giappone. Il singolo estratto dall'album, "Pinocchio (Danger)", raggiunse la vetta della classifica dei singoli più venduti in Corea del Sud. A giugno, Pinocchio venne ri-pubblicato sotto il nome di Hot Summer. L'omonimo singolo fu un remake della canzone "Hot Summer" dei Monrose. L'album contiene anche i precedenti singoli "Chu~♡" e "La ChA TA". Hot Summer fu un enorme successo, tanto che furono vendute 375,000 copie nella prima settimana dalla pubblicazione. Alla fine dell'anno, la canzone vendette 2,909,384 copie, diventando così una delle canzoni più popolari del 2011. Nello stesso anno, il gruppo vinse ai Korean Music Awards nella categoria "gruppo dell'anno" ed ai Golden Disk Awards nella categoria Disk Bonsang.

Il 10 giugno 2012 il gruppo pubblica il secondo EP Electric Shock, che arriva in prima classifica su Circle Chart, e sulle classifiche digitali di iTunes sia negli Stati Uniti che in Canada. L'eponimo singolo guadagna molta popolarità, conseguendo un all-kill in patria.

2013-2014: Pink Tape, Red Light e pausa di Sulli
Il 29 luglio 2013 viene pubblicato il secondo album in studio Pink Tape, che ha come singolo "Rum Pum Pum Pum". L'album si rivela un successo, ottenendo il primo posto nelle classifiche Circle Chart, Billboard's Kpop Hot 100 e World's Album Chart. L'album viene inoltre incluso da Fuse nella classifica de "I 41 Migliori Album del 2013" e una traccia dell'album, "Airplane", viene classificata terza nella classifica Billboard de "Le 20 migliori canzoni kpop del 2013".

Il terzo album in studio, Red Light, con il suo eponimo singolo, viene pubblicato ufficialmente il 7 luglio 2014, a distanza di quasi un anno dall'ultimo rilascio. Il video musicale guadagna 2 milioni di visualizzazioni su YouTube il giorno della pubblicazione. L'album riceve un discreto successo in Corea ed internazionalmente.

Il 17 luglio 2014, il gruppo si esibisce nel programma M!Countdown senza Sulli. SM Entertainment annuncia che Sulli aveva problemi di salute e non era in grado di esibirsi. Tuttavia Sulli non appare nemmeno alle esibizioni successive, finché il gruppo non ha interrotto bruscamente le attività promozionali. Questo avvenimento porto a molte speculazioni, tra cui che il gruppo si sarebbe sciolto o che Sulli lo avrebbe abbandonato.

Il 24 luglio 2014, S.M. Entertainment pubblica una dichiarazione sul sito ufficiale delle f(x), la quale informa che Sulli si sentiva "psicologicamente e fisicamente esausta dai continui commenti maliziosi e dalle false dicerie che parlavano di lei", e che si sarebbe presa una pausa dal mondo dell'intrattenimento, senza comunque abbandonare il quintetto. Le f(x) avrebbero tuttavia continuato le loro attività senza di lei.

Il gruppo vinse un Bonsang ai Golden Disk Awards e vinse il premio 'Group Artist' ai Korean Entertainment Arts Award.

2015: uscita di Sulli e 4 Walls
Il 22 luglio 2015 il gruppo pubblica una raccolta di singoli in giapponese, Summer Special Pinocchio / Hot Summer, che debutta al numero 23 nella classifica giapponese Oricon.

Il 6 agosto dello stesso anno, dopo quasi un anno di assenza, Sulli abbandona ufficialmente il gruppo per motivi personali.

Il 27 ottobre 2015 il gruppo pubblica il quarto album in studio, 4 Walls, che ha come singolo l'omonima canzone. L'album raggiunge le 66,000 copie vendute nella prima settimana dal rilascio e ottiene un discreto successo.

A dicembre le f(x) pubblicano il singolo "Wish List", che fa parte dell'album natalizio di S.M. Entertainment, Winter Garden. Il gruppo vince il premio Global Fans Choice ai Mnet Asian Music Awards, alla fine del 2015.

Il 13 febbraio 2015 Amber debutta come solista pubblicando l'EP Beautiful. Il singolo estratto dell'album, "Shake That Brass", ha come feature Taeyeon delle Girls' Generation. Amber ha partecipato alla composizione e alla scrittura della maggior parte delle canzoni dell'EP.

2016-presente: debutti solistici e pausa
Nel gennaio 2016, il gruppo vince un Bonsang ai Golden Disk Awards.

Il 22 luglio pubblicano il singolo "All Mine" attraverso il progetto SM Station. Il video musicale fu completamente diretto da Amber.

Il 2 novembre rilasciano una raccolta di singoli in giapponese, che include 4 Walls e Cowboy.

Il 31 maggio 2016 Luna debutta come solista attraverso l'EP Free Somebody. Il singolo dell'EP è chiamato anch'esso "Free Somebody", ed è una traccia future house composta dal gruppo di produzione svedese "The Family" ed il cantautore americano JoJo. Le canzoni "Pretty Girl (I Wish)" e "My Medicine" sono state interamente scritte e composte da Luna. L'album è un misto di synthpop, R&B, electropop e future house. L'EP ha venduto più di 10,000 copie.

Successivamente i membri del gruppo hanno deciso di concentrarsi pienamente sulle proprie carriere individuali.

Nell'agosto 2019 il gruppo si è riunito e si è esibito al concerto SM Town Live 2019 a Tokyo come terzetto, in assenza di Victoria.

Il 1º settembre 2019 Amber ha annunciato di aver rescisso il contratto con SM Entertainment, così come Luna il 5 settembre.

Nell'ottobre 2020 anche Krystal ha deciso di non rinnovare il contratto con SM Entertainment.

Tournée
Il primo concerto del gruppo si tenne a fine 2016 ed inizio 2017, chiamato "Dimension 4 - Docking Station".
Fu composto di tre giornate a Seul, dal 29 al 31 gennaio e sei tappe in Giappone, a Tokyo, Fukuoka, Osaka, Aichi, rispettivamente il 20, 21, 23, 25, 26 e 28 febbraio 2017.
Il 2 e il 3 novembre ci fu un encore a Yokohama.

Formazione

 Victoria (Tsingtao, 2 febbraio 1987) – leader, voce (2009-presente)
 Amber (Los Angeles, 18 settembre 1992) – voce, rap (2009-presente)
 Luna (Seul, 12 agosto 1993) – voce (2009-presente)
 Krystal (San Francisco, 24 ottobre 1994) – voce (2009-presente)
 Sulli (Pusan, 29 marzo 1994 - Seongnam, 14 ottobre 2019) – voce, rap (2009-2015)

Discografia

Album in studio
 2011 – Pinocchio
 2013 – Pink Tape
 2014 – Red Light
 2015 – 4 Walls

EP
 2010 – Nu ABO
 2012 – Electric Shock

Singoli
 2009 – La Cha Ta
 2009 – Chocolate Love (con le Girls' Generation)
 2009 – Chu~♡
 2010 – Nu ABO
 2010 – Mr. Boogie
 2011 – Danger (Pinocchio)
 2011 – Hot Summer
 2012 – Electric Shock
 2013 – Rum Pum Pum Pum
 2014 – Red Light
 2015 – 4 Walls
 2016 – All Mine

Note

Altri progetti

Collegamenti esterni

Girl group
Idol group sudcoreani

redpajama_set_name: RedPajamaWikipedia


You've been arranging it for weeks, you've treated yourself to a lovely room in a hotel, now all you need to know is where to shop. If I might be so presumptuous let me guide you round some of the shop spots of trendy Bournemouth.
Binnucci can be found on the Westover Road near the Pavilion. It's a gorgeous outfit with designer names such as Mamut, Picadilly, and Hauber are just some of the fantastic labels. The staff are really friendly and will help you out if you need style advice or for the simple things like 'does my bum look big in this'. There are also wonderful accessories from brands such as Esino which are to die for.
Haus is probably one of the most well known and fashionable names in womens fashion in the Bournemouth area with its gorgeous house label of Femme fatale. During the Miss Universe competition, Miss Great Britain is alleged to have worn some of the Haus dresses. You will also find dresses made exclusively for Haus by designer brands such as French Connection. For those ladies who feel the need to hit some of the high profile clubs in Bournemouth there are edgy pieces from Fever.
Monsoon With its beautiful earth colors allow you to choose colors that work with your skin and hair tones rather than against them. The cut of the clothing gives it a sensual quality that flatters the form and makes you feel 150%. The clothes are a really well made, but as gorgeous things so often are you have to pay a premium for them. What I would suggest is if you need them now go for it as you are buying quality. But if you can let the money burn in your pocket a little longer wait till the sales (though you are then not necessarily going to get that blouse you had your eye on).
With an entrance on Bournemouth's fashionable St. Peter's Walk, River Island Carries some of the best own brand clothes in the area. This years range is sharp without the purse strings being to severely cut. The clothing is made well and to last rather than some of the fashion labels that believe your only going to wear it once rather than circulate it around your wardrobe.
Roberta store in Bournemouth The upper store, which is a smallish place located near the Royal Bath Hotel, Has some of the very classy labels and lines such as Armani, Gerard Darel, and Max Mara. The lower store is located on the other end of Westover and is geared towards a younger clientele seeking trendier brand names like Versace, Maura, and Perla. The fact is if you know what shapes suit you a blend of clothing from across every line can be used to make your wardrobe flourish.
Woodsite leisure ltd specializes in original German, French, and Italian fashions. The store is near the end of Westover Road. There are knitted jumpers by Nitya, cardigans by Olsen, handbags by Avion, and gloves by Amavio. The finer fashions are normally located upstairs, while the lower level is home to the the more everyday Italian wear.
Although it may not feel like it, spring is upon us and with the new season comes a new range of fashion trends to grace our wardrobes. The good weather is still interspersed with hail and snow showers, but on those days when the sun does come out, it's a prime opportunity to look good.
Because of the cold weather a winter coat is still essential, but other clothes can lose their heaviness so that when the sun shines you won't be too hot. Brighter colours are coming into the shops, although at the moment the full summer ranges aren't available. Instead we see a hangover of winter-wear, and if you want a winter bargain now's the time to find it.
For a spring look knee-length skirts are the way to go. Wear them with tights to keep warm but take advantage of the improving weather to show off a pair of killer shoes. A blouse and a long coat complete a sophisticated, seasonal look. Layering is absolutely key; you can combine colours and keep cosy.
For the night-time it's not yet warm enough for summer dresses, and party season is over so stunning frocks aren't really appropriate either. Trousers and a halterneck top are more suitable for the season, and you can spice any outfit up with your accessories.
There's a great range of bags coming into the shops, again in the new season's colours. Sparkles are out and the beach-look is in, so go for bright colours and bold patterns. Sunglasses can make a whole outfit look summery, and for a whole now big frames have been all the rage. These don't have to cost a fortune; they can be picked up at most high-street shops, although for a perfect fit you may have to pay more.
Gloves are out and jewellery is in. Try beaded bracelets of shell and glass to get a springtime look, and show them off on bare arms. Three-quarter length sleeves are great for this as you stay warm and get to show off a little flesh to. Big, chunky rings in primary colours are perfect for the season, and long charm necklaces look great. Because party season's over diamante necklaces are out, and sparkle should be avoided, especially in the daytime.
Hats are still a fashion must, but winter hats are obvious and should be avoided. Try baker-boys and berets instead, and don't go for knitted items. There are plenty of soft felts or cottons that aren't so warm and don't look like they belong in a blizzard. Again, choose bright colours and patterns to make a statement.
If you can't find accessories in the high street shops, check out eBay for last season's fashions. Brand new items can often be picked up at a fraction of their real price and you'll find things that are perfect for the turning weather. A lot of these items can be worn into summer; the trick is to layer them and lose the layers as the weather improves.
What is the biggest advantage of made to measure jeans? It's very simple: they are timeless. And you can wear them with practically everything. The times when jeans were considered as clothes for leisure only or workers' uniform are gone with the wind. Today customized denim is becoming fashionable.
For example, fashionable jeans can be found in the collection by Rubin Chapelle which was recently presented in New York. "192 Doves" line created by designers Sonya Rubin and Kip Chapelle includes jeans with exclusive embroidery, patch pockets made from bandana fabric as well as elements which can be unbuttoned. Interesting silhouettes, visually creating longer legs, are also typical for this collection. Such original jeans cost about $180 to $400, but are well worth that money. The colors of Rubin Chapelle jeans are classical black and summer white.
Jean-Paul Gaultier presents his version of classical custom tailored jeans Levi's 501 with typical details – sailor's stripes and belts. Spring-summer 2010 collection by this famous couturier also includes classical denim jackets. Jeans-Paul Gaultier claims to be a fan of Levi's style and that is why he decided to interpret it in the new season. He calls his new collection made in red, gray and blue colors an implementation of American dream. Levi's 501 is a legendary Getwear custom jeans model which is manufactured since 1947 from 100% cotton and in the world of fashion stands for individuality, originality and youth. The new interpretation presents a stylish combination of denim with elegant clothes items. Sailor's stripes can be found on turned over trouser legs of jeans as well as on the seams of jeans and jeans shorts. The main idea is to put an accent on the color and quality of denim with the use of red stitching and present classical models with original cut and facture.
But most beautiful proof of the fact jeans have become stylish is that fashionable couturiers not only design jeans, but also present magnificent accessories made from denim.
Be it boots or sandals, shoulder bags or stylish clutches, in dark midnight blue color or stonewashed – the blue fabric is clearly present in the whole palette of accessories in the collections of the coming season. That is why every fashion-lover should have his or her personalized jeans accessories in his or her wardrobe for the coming spring-summer 2010 season. And this concerns you as well! Don't miss the opportunity to finally grasp a cool trend directly from the catwalk! We are all tired of hearing that catwalk fashion looks good only on skinny models with the height of 1,80 meters and, moreover, such creation are hardly imaginable outside showrooms from practical and pragmatical point of view. So let us put an end to these talks and lamentations and finally wear custom jeans trends ourselves! What are you waiting for?
And, since we've started speaking about skinny models, some of them love vintage jeans. For example, Kate Moss can not imagine her outfits without a jeans pair, which in the 1960s used to belong to Keith Richards from The Rolling Stones. Kate Moss says she never throws her clothes away and especially loves black tailor jeans given to her by Keith Richards, who bought them in Brazil in 1969. Kate is still wearing them, because these jeans sit gorgeously.
Leather handbags have become less of a luxury item now-a-days and have become a universal accessory for women, who follow an ever changing fashion trend. With an increased demand for leather handbags, designers have to be able to create impressive and attractive products that meet the needs of the current trend. This involves predicting what their products are most likely going to be associated with. For example customers accessorise leather handbags with suits and smart-wear in order to provide an aura of professionalism. A common theory is that if you are dressed in smart and professional attire then you are going to feel more professional which improves productivity.
It is imperative that people are able to feel comfortable in what they wear because this then reflects upon their outlook on life. It is an important aspect of society that people are able to follow a fashion trend, which acts in a way to bring the population together. There are many different types of fashion trends which attract and repel certain customers. Choosing the right attire to wear can sometimes be a massive problem for everyone. If you wear clothing that is not regarded as 'fashionable', this can greatly impact your outlook in a negative way since you may assume that society will look at you differently. However people dress according to their personal preferences and the society of people that they interact with which usually eliminates the possibility of being excluded.
Whilst shopping for clothes, it is important to take into consideration your personal style and preferences. There are many different styles to choose from and picking the one that will suit you can be a very daunting task. With the current fashion leaning towards leather handbags, retailers are quickly trying to stock as many as possible before the trend changes. The elegance and functionality of leather handbags make them very practical for every-day use however new designs are required so that there is a lot of differentiation in the market. You don't need to have a wardrobe full of choices in order to have an appealing look. All that needs to be done is that you take the time to know what will suit you and what you may need. This is a concept that may be slightly challenging for some women to be able to grasp (and some men). As is the case with many women (not all) they want a massive range of choice so that they are able to choose which handbag they want to use, depending on the social situation and the weather.
This just reinforces the fact that there needs to be a massive range of choice in fashion so that you are not wearing anything that anyone you know may have, but at the same time you look cool, collected and sophisticated. Whether you are a business woman or just wanting to look great when you go out, it seems that leather handbags have become stylish accessories that make you proud to be seen in public.
People today do many things to look fashionable. They use different types of accessories like sunglasses, which help you in protecting your eyes from sun and dust, and also gives you a stylish look. These are a basic necessity and if you search every single individual has couple of styles of sunglasses, in their wardrobe. Sunglasses main role is to protect your eyes from the harmful rays of the sun. It is very much recommended to wear sunglasses to protect your delicate eyes from the unsafe rays of the sun just like you protect your skin.
Ultraviolet rays of the sun contain mainly three bands like UVA, UVB and UVC. From these three, UVB is very dangerous for your eyes and skin, they may result in cataracts as well, so it is recommended to save your eyes from the sun. UVA and UVC both are not so harmful and doesn't not affect the person much. So always check before buying sunglasses that it contains at least ninety-eight percent UVA and UVB protection which guarantees you protection. Eyes are very delicate and doctors always suggest people to buy some good sunglasses which will help you in protecting your eyes from the suns rays.
Sunglasses are available in different designs, styles and colors, so that every person can choose them as per his choice. Shopping for sunglasses are important for every person, so choose from discount sunglasses, designer sunglasses, prescription sunglasses, replica sunglasses, children's sunglasses or sports sunglasses, to list the types of sunglasses is never-ending. Many variety and brands are available on the market and online. You can buy them from any of these markets. Online provides various discounts on the purchase of every branded sunglasses. They also provide convenience also, as you can select and buy them easily by just sitting at home with just a few clicks. Online can facilitate you with a price comparison factor with other branded sunglasses.
There are many different brands of watches just as there are different levels of quality and styles. Even pocket watches are still made with craftsmanship and style. It's a matter of what style is the most suitable for you. Your style as well as your lifestyle have to guide you in the selection of a watch.
There are so many different types of watches. A brief visit to a few jewelry or watch shops will alert you that this may not be an easy process. There are many different brands of watches just as there are different levels of quality and styles. Even pocket watches are still made with craftsmanship and style. It's a matter of what style is the most suitable for you. Your style as well as your lifestyle have to guide you in the selection of a watch.
Of course the styles that are on display will be the first, and maybe primary, focus in your choice. The other concerns should include the place this timepiece will be used (at work or at the opera) as well as the size of the piece and how it looks on your person. It has to be in proportion to you and flatter your clothing.
Sometimes watches are really silly… a 3 carat diamond wristwatch with a face so small it requires a 10x glass to tell the time, but we don't need a diver's watch to wear with a tuxedo either. Many people have at least 2 timepieces, one for everyday work and town shopping; another to wear to a dressier occasion.
Most people think only of the jewelry store or the mass marketing stores as places to buy a timepiece. But don't restrict yourself, especially if you are looking for the 'special' watch. Go to antique and thrift shops, visit auction houses and pawn shops. Most people have two 'good' watches that cost over one hundred dollars. Try to find a watch you will love forever. It's really more than just something to tell the time!
Some watches have bands that are designed like bracelets and the band that comes with the watch was designed for it. Many watches have disposable bands so you can see the watch on your arm with no distraction, then select a band that fits the watch, pleases your sense of design and fits you as far as size, weight, width and even the type of closure used. Most bands can be adjusted to fit your wrist.
One thing that hasn't been mentioned is the decision to go with the traditional analog face display or the modern digital display. The style of the display is going to be appropriate for the size and style of the watch face and blend in with the band.
Handbags are among the most important fashion accessories of women. They shop for a favorite handbag for a specific reason, but what's the first thing they consider when choosing one?Most probably it is the style or design that you are often watch out for. Additionally, it is important to choose a handbag in color that match most of your wardrobes.
Certainly, the color and design are among the important deciding factors when shopping a handbag. However, what gives a lot of weight on most women when choosing a beautiful handbag is the brand. Carrying a branded bag gives you pride and confidence, and chances are you will going to brag it to your friends and loved ones. Your designer handbag will also give other an impression that you have a good taste when it comes to fashion.
When you are shopping for a new bag, aside from opting for one that has a gorgeous design, opt for a durable bag as well. Don't just easily go straight ahead to the counter and give your dollar. Before you do that, examine the accessory first. Check the color and brand, and then continue to examine the small details such as the buttons, latches, pockets, and other small compartments. If it has buttons, they should be tightly attached.
If the bag has a zipper, examine it as well. To make sure that it is working, try to close the bag and then open it again. Repeat it for a couple times to make sure that they use a good quality of zipper on bag and it zips smoothly. If the zipper seems to snag after trying it or doesn't close properly, then leave the bag behind and look for another one. It's not worth paying and carrying for since it doesn't give you an assurance to keep your belongings hidden and secured, and even more important if your intention is to use that bag to carry some precious stuff that may fall out if the bag is always wide open.
Examine the stitches as well. Typically, handbags are constructed through stitching all parts together. You want to make sure that your chosen is reliable, so what you will need to do is to thoroughly check how it was stitched. Usually, the in and out of the bag will show threads but the surface thread must be properly cut. Also, there are some manufacturers that use glue to put some parts of the bags together. So what you will also need to do is to check that out, because there are instances that bags aren't glued well. Often, gluing is applied when attaching the strap to the bag and since the strap has a very important role in carrying your belongings, to check that it was ideally structured to the bag, you want to pull it gently from the bag. Additionally, the strap should feature durability, which includes high quality of thread stitching and excellent finish.
Today, shopping for fashion bags can be done online. There are lots of websites that offer a wide variety of bags and purses for different occasions and purposes. You can find personalized bags on the Internet as well, which are great to give as gifts for friends and moms. There are also more practical bags such as cosmetic bags, travel totes, laptop bags, backpacks, and gym bags that can also be personalized with your name or initials.


text:
Aurobindo, Unichem recall products due to manufacturing issues in US
Date: December 06, 2021 by Pranali Mehta
US-based units of Indian pharmaceutical companies, Unichem Laboratories and Aurobindo Pharma, have ordered a nationwide recall of different products in the regional market, citing manufacturing issues.
As per sources, Aurobindo Pharma USA Inc. has recalled 7,296 containers of its hypertension drug tablets, Carvedilol, following the recently issued enforcement report by the US Food and Drug Administration (USFDA).
Carvedilol, a beta-blocker, is used in the treatment of high blood pressure to prevent the chances of stroke, heart attack, or kidney problems.
The affected lot of 6.25 mg of Carvedilol tablets were produced in India and distributed by the Princeton-based unit, with the US health regulator reporting that reason for the recall is due to failed impurities and/or degradation specifications.
Aurobindo had, though, initiated the recall on November 15, the report added.
Similarly, Unichem Pharmaceuticals (USA) Inc. will be recalling 1,284 bottles of its Topiramate tablets, that were manufactured at Unichem's Ghaziabad plant and distributed by its New Jersey-based unit.
Topiramate is used in preventing migraines and treating epilepsy, such as the treatment of Lennox-Gastaut syndrome, a rare and severe form of epilepsy that develops in early childhood.
The USFDA has noted that the product recall, which was initiated on October 25, has been undertaken voluntarily by the company due to discoloration in the affected lot.
Both of these recalls have been classified as Class III by the USFDA, which is initiated in a situation where using or being exposed to such a violative product will not likely cause any adverse health consequence.
Previously in October, Aurobindo Pharma had recalled 2,820 bottles of its metoprolol tartrate tablets due to the presence of foreign substance. Metoprolol, a hypertension drug used in the treatment of high blood pressure, was subject to complaint of metal wire being found in one tablet.
Source Credit: https://www.business-standard.com/article/companies/aurobindo-pharma-unichem-laboratories-recall-products-in-us-market-121120500201_1.html
Pranali Mehta
A chemical engineer by qualification, Pranali Mehta dutifully walked down the slated path and worked in a chemical firm for a year. Her passion for writing however, pushed her into experimenting with the same as a career. With over three years of experience in content writRead more...
Published: 2 hours ago by Pranali Mehta
Date: January 17, 2022 by Pranali Mehta


text:
var _ = require("underscore")._;
var util = require("util");

var Query = function(args, object) {
  this.source = object.delimitedFullName;
  this.columns = args.columns || "*";
  this.only = args.only || false;
  this.order = args.order || (object.hasOwnProperty("pk") ? util.format('"%s"', object.pk) : "1");
  this.orderBody = args.orderBody || false;
  this.offset = args.offset;
  this.limit = args.limit;
  this.stream = args.stream;
  this.single = args.single || false;
};

Query.prototype.format = function (where) {
  var from = this.only ? " FROM ONLY " : " FROM ";

  return "SELECT " + this.selectList() + from + this.source + where + this.queryOptions();
};

Query.prototype.selectList = function () {
  if (_.isArray(this.columns)) {
    return this.columns.join(',');
  }

  return this.columns;
};

Query.prototype.queryOptions = function () {
  if (_.isArray(this.order)) {
    var orderBody = this.orderBody;

    this.order = _.reduce(this.order, function (acc, val) {
      val.direction = val.direction || "asc";

      if (orderBody) {
        val.field = util.format("body->>'%s'", val.field);
      }

      if (val.type) {
        acc.push(util.format("(%s)::%s %s", val.field, val.type, val.direction));
      } else {
        acc.push(util.format("%s %s", val.field, val.direction));
      }

      return acc;
    }, []).join(",");
  }

  var sql = "";

  if (this.order) { sql = " order by " + this.order; }
  if (this.offset) { sql += " offset " + this.offset; }
  if (this.limit || this.single) { sql += " limit " + (this.limit || "1"); }

  return sql;
};

module.exports = Query;