text:
Is the Fight to End Mass Incarceration Wasting Away in Washington? |
Is the Fight to End Mass Incarceration Wasting Away in Washington?
James Kilgore
August 08, 2016Election '16
Mass incarceration's profile as a national issue appears to be on the wane. Throughout 2015, the nation's over-reliance on imprisonment drew a constant spotlight, producing a plethora of bipartisan policy proposals and expressions of moral outrage in Beltway circles. In March last year, Newt Gingrich and Democrat stalwart Van Jones co-hosted an unprecedented Washington, D.C. conference of nearly 500 key role players billed as a "Bipartisan Summit on Criminal Justice Reform." The Koch Brothers Foundation teamed up with George Soros' Open Society forces to sponsor it. Author and formerly incarcerated activist Shaka Senghor spoke, as did Georgia's Republican governor Nathan Deal. At a moment of great congressional discord, people across the spectrum were finally agreeing on at least one thing: the U.S. was spending too much money on corrections and locking up too many people, especially black folks.
Activists added to the hype, pressuring presidential candidates in the early stages of the campaign. Movement for Black Lives leaders stressed the issue of mass incarceration in a widely shared conversation with Hillary Clinton. Black Lives Matter spokespeople interrupted Bernie Sanders' speeches on two occasions, leading Sanders to add criminal justice reform to his talking points and to insert "racial justice" into his list of priorities. At the Senate level, Republican hopeful Rand Paul was co-sponsoring sentencing reform legislation with Cory Booker.
To top it off, President Obama visited a federal prison, and then released some 6,000 people from federal institutions in November. The Pope added fuel to the reform fire by dropping in on a Pennsylvania facility. The condemnation of mass incarceration and a new spirit of offering people with felony convictions a second chance was flowing from all quarters.
Yet as the presidential campaign heated up, mass incarceration began to fade from the scene. The bully in the presidential campaign playground, Donald Trump, contributed immensely to the change in climate. Posturing as the "law and order" candidate, Trump has stifled Republican reform discourse. At the Republican National Convention, he summed up his overall approach to criminal justice with one militant declaration: "The crime and violence that today afflicts our nation will soon—and I mean very soon—come to an end. Beginning on January 20, 2017, safety will be restored."
With Trump's rise, foot soldiers promising to "make America safe again" have come out of the woodwork to replace the bipartisan unity advocates. Milwaukee county sheriff David Clarke has become a one-man speaker's bureau for renewed war on the streets. Wearing full dress uniform regalia, he opened his address to the RNC with a vow to make something "very clear": "Blue lives matter in America." Clarke went on to label Black Lives Matter and Occupy as forces of "social disorder" and "anarchy." Clarke represents a growing police backlash trumpeting the myth of a reborn crime wave in the U.S. Both statistics and opinion poll findings provide at best minimal support for such claims. While violent crime rates did increase slightly in 2015, they have steadily declined during Obama's years in office and are at much lower levels than in the early 1990s.
Moreover, Republican law-and-order fervor doesn't reflect popular sentiments. Recent Gallup polls do show an increasing concern about crime and violence, but a July 13 survey revealed that only 6 percent of the population identified crime as the most important problem facing the country today. By comparison, 27 percent named "economic problems" as the number one priority. Ultimately, the resurgence of the law and order mantra may be less about about facts and figures and more about fanning the flames of fear, racism and xenophobia.
Whatever hope existed for promoting bipartisan unity on criminal justice at the RNC was in the end derailed by the committee of 112 tasked with finalizing the party platform. The 112 focused on condemning the Supreme Court for not opening the door to wider application of the death penalty and accused Attorney General Loretta Lynch of conducting a "campaign of harassment against police forces around the country." While supporting some jail diversion programs like Drug Courts, their top priority for prisons was not closure or budget cuts, but making sure authorities "regain control of their correctional institutions, some of which have become ethnic and racial battlegrounds."
Joining Trump and Clarke in leading the law and order charge was Newt Gingrich. Getting a whiff of a chance at the vice-presidential slot, Newt dropped reform talk and devoted his speech at the RNC to hymns of praise for Trump and condemning "radical Islamic terrorists." In light of all of this along with "the centrality of Nixonian law and order" to Trump's electoral vision, emeritus criminology professor Tony Platt told AlterNet, "it's unclear right now if the campaign for modest federal reforms will continue."
The Democrats
In contrast to the Republican about-face, the Democratic Convention opted for toning down their positions. While they brought the mothers of black people slain by police on stage, the calls in the platform to end mass incarceration, reform mandatory minimums and close private prisons (largely a product of the influence of the Bernie Sanders campaign) gained little air time compared to xenophobic patriotic appeals. In Clinton's acceptance speech, the need to "reform our criminal justice system from end to end" was a throwaway, buried in a lengthy laundry list of promises on all issues. At the moment of realpolitik, ending mass incarceration has perhaps lost any capacity to attract new voters, especially whites who may be vacillating in their support for Trump.
Changes in Federal Laws
Election related party polarization has likely contributed to the lack of progress in advancing national legislation and policy change as well. The much-publicized Sentencing Reform and Corrections Act, jointly sponsored by a bipartisan cohort led by Republican Chuck Grassley and Democrat Cory Booker, has failed to make it to the congressional floor for a vote. The bill remains mired in disagreements over the depth and nature of acceptable change.
Another high-profile reform, the opening of presidential clemency petitions, has also made little progress. Obama's decision to open the door to federal clemency petitions prompted more than 12,000 applications. However, to date only 562 have been granted. The lack of administrative resources to review the often complicated documents means the bulk of those remaining may be rolled over to the next presidency. Moreover, Obama rejected the more powerful option of applying a blanket amnesty to certain categories of convictions like the notoriously anti-black crack cocaine laws. In the 1970s, Presidents Ford and Carter applied blanket amnesties to those who dodged the draft.
A final glitch in the reform process has hit the realm of immigration. While the president made major advances with the DACA and DAPA measures to delay deportations, in 2016 things have taken a serious turn for the worse. A June Supreme Court decision virtually overturned DAPA, thus putting another five million undocumented adults back onto the hit list for possible deportation.
To make matters worse, Immigrations and Customs Enforcement has begun a new offense of roundups. From across the country, reports have emerged of ICE agents showing up at unexpected places—courthouses, probation offices, workplaces—to drag away those without proper papers. Investigative journalist Brian Dolinar, who covers these issues in the Midwest, reports to AlterNet that there have been more than 50 ICE raids alone in Champaign-Urbana, Illinois, a liberal college town of 120,000. He adds that such raids are "taking place all over the country, not just along the border, but they are happening under the radar with little or no media coverage."
The Brighter Side
While at the federal level things may have slowed, a few important changes continue to take place where it really matters: at the state and local levels. Although the federal policies and debates attract the most media attention, state prisons and county jails hold nearly 90 percent of those incarcerated. Ultimately, most reforms at the federal level have little impact on states and counties, save to set an example of possible changes.
The most noteworthy advances have been the slashing prison populations in key states. New York, New Jersey, California and Rhode Island have reduced their prison populations by more than 20 percent in the last seven years. The decarceration formula has varied. New York's reductions were largely driven by a cutback in drug prosecutions, while California's decrease came about as a result of a federal court order. But these states are not alone. In 2014, Mississippi, using a combination of sentencing and parole reform, reduced its prison population by 14.5 percent in one year. Moreover, since 2000, at least 29 states have passed laws to reduce mandatory minimums. More than 30 such measures have been signed into law in the past six years. Despite the slow advance of national legislation, the federal prison population finally began to show a decline on 2013 after more than 35 years of growth. Obama's November 2015 release contributed to a fall in federal prison populations of 16,000 (about 8 percent) in the last 19 months.
Outside the legislative sphere, national efforts via a number of non-government initiatives have kept things moving. These have included longstanding campaigns like Ban the Box, initiated largely by organizations of formerly incarcerated people like All of Us or None and efforts by the National Juvenile Justice Network to end juvenile life sentences without parole. New initiatives and organizations continue to appear with groups like the National Council for Incarcerated and Formerly Incarcerated Women focusing on the much-neglected 700 percent expansion of the population in women's prisons over the last two and a half decades.
Foundations and professional organizations have stepped in to fund reform as well. The Annie E. Casey foundation is supporting alternatives to incarceration for juveniles, and the Pre-Trial Institute is coordinating efforts to restructure pre-trial regimes, especially in regard to cash bail. Efforts to restructure local criminal justice practice aimed at reducing prison and jail populations have drawn tens of millions in support from the ACLU and the Macarthur Foundation.
Yet while these pockets of change and funding flows hold out promise, the total decrease in prison population nationally from 2009 to 2014 was only about 52,000—just over 2 percent. Ultimately, to totally reverse the forces of mass incarceration requires not only legislative change and finance, but the presence of a coordinated and focused mass social movement. The roots of such a movement have appeared over the past two years in the mobilizations in response police killings of black people. Elements of the youthful supporters of Bernie Sanders' "political revolution" also represent such a potential force, though it remains to be seen what direction they will take post Hillary's nomination.
Some activists argue that these efforts, especially those focused on police killings, need to broaden their scope to a more systemic perspective or run the risk of being confined to limited reforms such as body cams, community review board initiatives, or racial awareness training. The failure to successfully prosecute Darren Wilson in Ferguson and the perpetrators in the Freddie Gray case highlights the obstacles to investing too much faith in existing political processes. Gus Wood, an Illinois-based activist and PhD candidate, has studied policing extensively. He told AlterNet that "as we attempt to transform this current moment to an actual social movement, we must incorporate a systemic racial class analysis so that we can attack the various forms of racial oppression, like wage/income disparity, hypersegregation/apartheid, state-sponsored violence, imperialism, and mass incarceration. Our resistance must match the complexity of our oppression."
"A Vision for Black Lives," a set of policy documents released August 1 by the Movement for Black Lives reflects the kinds of systemic thinking highlighted by Wood. The expanded directions put forward by the "Movement" take protest against police violence well beyond minor tweakings of police practice and attitudes. Situating police violence in the context of the historical and global oppression of black people, these documents call for reparations, international solidarity and economic justice while remaining true to the prioritization of leadership of queer and transgender people. More than 50 organizations, including Black Lives Matter Network, took part in formulating the contents.
Michelle Alexander, author of The New Jim Crow, echoed such sentiments in responding to the deaths of Alton Sterling and Philando Castile. In a recent Facebook posting, she declared: "I no longer believe that we can 'fix' the police, as though the police are anything other than a mirror reflecting back to us the true nature of our democracy. We cannot 'fix' the police without a revolution of values and radical change to the basic structure of our society… There's an unfinished revolution waiting to be won."
Ultimately, the momentum for criminal justice reform, let alone the type transformative change needed to reverse mass incarceration, remains far from achieving the intensity of the conservative "lock 'em up and throw away the key" mania that grew the system in the 1980s and '90s. As we draw nearer to election day, concerns about excessive imprisonment and bloated corrections budgets are likely to fade further into the shadows behind political candidates' efforts to malign their opponents' character and cast themselves as the true patriots. That unfinished revolution of which Michelle Alexander speaks still waits to be won.
Nick Bostrom's perfect congruence with bigotry: How Effective Altruism buttresses the suffering of the world
Bombshell NYT report reveals Bill Barr's special counsel opened 'secret' financial crimes probe into Trump
Pregnant wife faints and gets pinned by flag during Republican's presidential run announcement
Marjorie Taylor Greene's amendment to bar Biden from selling oil goes down in massive bipartisan defeat
Bill Barr asked Italian officials to discredit Russia probe — they responded with evidence linking Trump to crimes
'We don't appoint a king': Ron DeSantis critics push back against 'executive privilege' claims
'I think it's pretty obvious': Sean Hannity claims the Bidens hired 'SWAT' teams to 'attack' their critics
Rick Scott announces Senate run, promises to push 'controversial' plan that forces the poor to pay more taxes
'Moral turpitude': Trump coup memo author now facing 11 counts of alleged ethics violations — and disbarment
Proud Boys members 'intend to subpoena' Donald Trump at their seditious conspiracy trial
Political science experts explain how rural voters' growing 'resentment' fuels a rural-urban 'apartheid'


Asia Carpet Tiles manufacturer provide comprehensive Carpet Tiles selling information on export industry. All these qualify hot Carpet Tiles made in Asia, connecting reliable Asian Carpet Tiles manufacturers, suppliers, exporters, OEM/ODM, factories with global Carpet Tiles buyers.
Carpet Tiles manufacturer selling leads directory is one of the largest marketplaces in the world; here is your source for purchasing Carpet Tiles products from our reliable Carpet Tiles manufacturers, suppliers, makers, exporters and factories. If you are a Carpet Tiles manufacturer, supplier or exporter and want to have more international Carpet Tiles buyers, please join us!


I love a summer family photoshoot at Monikie Park in Angus, the park is beautiful and so versatile for family photoshoots, therefore always a popular choice with clients of all ages.
This particular shoot was booked by Gail for herself and her son Jackson, Gail then got back in touch with me prior to the shoot and asked if she could possibly bring along her best friend Lyn and Lyn's children who were visiting from Texas, I was delighted!
During a family shoot I always start off with the groups, then move on to the individuals. I will take several shots of each child sometimes more to make sure I get a shot that Im confident the client will be happy with.
I will move you the client around the location scouting out the best lighting and backgrounds for your photographs, the light changes depending on the time of day so one location that suits a morning shoot might not necessarily suit a shoot later in the day.
Family shoots are relaxed and fun and normally last for around 40-90 minutes depending on how many children and what ages they are. For further info please visit my questions and answers page here.
Jacqueline is a Family & Wedding Photographer based in Monifieth, Dundee, specialising in photography for families of all sizes and children of all ages. For further details please use the contact form to get in touch.
Wedding Photography, Woodlands Hotel, Broughty Ferry, Dundee, Scotland.
I was delighted to be asked to capture the beautiful wedding day of Alan & Claire who were married on the 28th of August 2015 at the Woodlands Hotel in Broughty Ferry, Dundee.
We started off the day with bridal preparations at Alan & Claire's house in Carnoustie. Bridal prep is such an exciting part of the wedding day, I love capturing the bride having her makeup applied, hair done, the flowers, giggles, champagne and all the excitement and build up before the ceremony.
To book Jacqueline for your Wedding or for further information please use the contact form to get in touch.
Wedding packages can be viewed here.
Alan and his groomsmen were getting ready just across the road so I was able to pop over and capture a few of the men settling their nerves with a beer or two.
Meanwhile at the Woodlands in Broughty Ferry my second shooter Debbie was capturing the guests arriving, everyone was smiling and looking absolutely gorgeous.
Claire and her Dad arrive at the Woodlands in style, I loved how the colour of the car matched the bridesmaids.
Time for Alan and Claire to say 'I do', there was lots of smiling & laughter during the ceremony which was lovely.
The sun was shining, the roof was down, the champagne was flowing, there were big smiles all around as Alan and Claire headed away for a spin in their bridal car, this was a great 15 minutes of time out for the newly married Mr & Mrs Conway.
Back to the Woodlands for the group shots, here are some of Claire and her beautiful bridesmaids.
Not forgetting Alan and his groomsmen and a cheeky shot in there of Alan showing off his legs!
We took a walk in the grounds of the Woodlands and captured some romantic shots of Alan and Claire although they could not be serious for too long being the fun loving couple they are.
Myself and Debbie were there into the evening capturing the first dance, then the party really got started.
A big thank you to Alan & Claire for allowing me to be part of their special day, I wish you both a long, happy and healthy future together as Mr & Mrs Conway.
View Photography by Jacqueline's wedding pricing here or get in touch for further details here.
Jacqueline is a Wedding & Family Photographer based in Monifieth, Dundee, specialising in photography for families of all sizes and children of all ages. For further details please use the contact form to get in touch.


A remote island in the Caribbean could offer clues as to how invasive species are able to colonise new territories and then thrive in them, a new study by the University of Plymouth suggests.
"It's absolutely important that it's not just talk - that there will be real investment," Jamaican Prime Minister Andrew Holness told reporters after the meeting. The nations have broken from other members of the Caribbean Community, known as CARICOM, in their support for Guaido. The organization has officially advocated for talks between President Nicolas Maduro and Guaido, and most of its members have rejected resolutions by the Organization of American States supporting Guaido.
How can a species split into several new species if they still live close to each other and are able to interbreed? Using a group of Caribbean reef fishes as a model system, a team of scientists from the GEOMAR Helmholtz Centre for Ocean Research Kiel and the Smithsonian Tropical Research Institute has found that natural selection can couple the evolution of genes for vision and color pattern. The team has published its findings today in the international journal Nature Ecology and Evolution.
Fifty-five years of animatronics, from Pirates of the Caribbean to pirates of the Outer Rim.
A new study uses environmental, socioeconomic and management data from 30 Caribbean islands to identify which communities may be most at risk from the social and ecological effects of coral bleaching, which occurs when warm water causes coral polyps to expel algae living in their tissue. The analysis shows that independent island nations, such as Cuba and Jamaica, may be less vulnerable to coral bleaching than island territories like Saint Barthélemy.
In the first effort to predict the future burden of colorectal cancer mortality globally, researchers note that colon and rectal cancer mortality rates are projected to decrease in most countries apart from some Latin American and Caribbean countries, but increases are predicted for several countries from Europe, North America and Oceania. The findings are published in the International Journal of Cancer.
The refinery has been idle since May when a legal dispute between PDVSA and U.S. producer ConocoPhillips forced its closure. PDVSA's contract to run the facility, which is crucial for its storage, refining and shipping operations, will expire at the end of 2019. The government of the Caribbean island is seeking a company willing to handle it in the long run and probably also to finish the lease term next year.
How did the first mother in space become godmother to a cruise ship?
Analysis of ancient DNA of a mysterious extinct monkey named Xenothrix -- which displays bizarre body characteristics very different to any living monkey -- has revealed that it was in fact most closely related to South America's titi monkeys (Callicebinae). Having made their way overwater to Jamaica, probably on floating vegetation, their bones reveal they subsequently underwent remarkable evolutionary change.


i was fiddlin with ways to increase the flow in my tank and came up with a project that i feel was worth passing around. i used an old 5 mL plastic syringe and vinyl tubing. it might not be the best design, but it seems to work. i'm seeing that darned caulerpa swaying in the new currents, so it looks like it's working for me.
any suggestions on how to test it?
Hi Steven, that's not a bad idea at all! i remember reading that article when the reeftec's were all the rage.
i do have a 10 gallon tank lying around that i can use. do you know what Mr. Harker used for the test strips? it kinda looks like bubble wrap, but i'm not certain.
btw, i think it's funny to see how many of us reefers also love to eat sushi. glad the same phenomenon doesn't occur with lovers of other pets.
i definitely can make use of this in my nano! and i've got access to all kinds of syringe sizes too!
is your overflow purely for circulation purposes....ie. you have no filtration of any kind except the macro? nice design. i would like to have an overflow myself, but i have stuck with the eclipse pump design where the intake is near the bottom of the tank. i also have my minijet pointing up to breakup the surface film.
hey, when are you going to stop by?
the faux overflow has 2 purposes: to hide the pump & heater, & more importantly, to break the surface tension. because my lighting scheme is... umm, budget? i thought it would be best to keep the water surface clear of film to allow maximum light penetration. it is strictly for circulation, as the tank's not even drilled.
anyway, try this out. it's super easy and seems to work here. it would be interesting to get a hold of different sized syringes. the ones i'm using still have a pretty narrow nozzle even though i drilled them out. i bet you could get better performance with less of a reduction.
oh, i can stop by anytime. when are you free?
btw, i think it's funny to see how many of us reefers also love to eat sushi.
Going out for sushi after fish club meetings is a regular tradition here.
Deb and I have been discussing coming out there anyhow for a long weekend this spring. I have racked up enough flequent flyer mileage that I can get two flights out. We just have to decide exactly when, but I would love to give a presentation while we are out there so I can write-off the rest of our expenses.
Steve- We would be over the moon for you to give us a presentation! :D Lets you and I chat about dates and accommodations when you and Deb are ready.
I'll PM you my contact information here on RC after I post this.
you are welcome to stop by anytime. just let me know when you might be in the area (pecos and wigwam), and i can arrange to be here.


Jeff Molander, our first Sac Volvo Club President since the Chapter was revived in 2008, is passing the torch at the end of 2010 to Mark Baldwin, a Sac Volvo Club founding Planning Committee member.
Over the years Jeff lead the Chapter, he set the tone and grew the chapter in an inclusive family-friendly way. Everyone was welcome and everyone had a voice in the direction of the Chapter.
We wish to thank Jeff for his dedication, passion, and leadership.
We additionally look forward to Mark's enthusiasm, passion, and leadership as we continue to set the tone and grow the chapter.
To participate in the direction of the Sac Volvo Club, we invite you to attend our annual Sac Volvo Club Planning Meetings as well as our annual Swedish Day at IKEA lunch Planning Meetings.
Check our event calendar on the Home Page for specifics.


text:
Tag: EC
UK info events on Marie Sklowdowska-Curie Actions Individual Fellowships call
Brukselka by Barbiez – CC BY-NC-ND 2.0
As UK National Contact Point for Horizon 2020 Marie Skłodowska-Curie Actions (MSCA), UKRO is holding information events for anyone interested in applying to this year's MSCA Individual Fellowships call (deadline 14 September 2016).
There will be an event at the University of Edinburgh on 11 May and another in London, hosted by the University of Greenwich on 27 May 2016.
The events will give participants an overview of the application process, the aims of the scheme and key considerations related to planning, writing and submitting proposals. These events are free of charge but you must register to secure a place.
Individual Fellowships are for researchers who already have a doctorate or equivalent research experience. They provide attractive funding to enable researchers to develop their careers through training, international mobility and optional intersectoral secondments. European Fellowships are held in Member States and are open to researchers either coming to Europe or moving within Europe. Global Fellowships are based on a secondment to a third country and a compulsory 12 month return phase in a European host organisation.
If you'd like more info on the individual fellowships scheme or advice on developing an application, please contact your faculty Research Funding and Policy Manager.
Marie Sklodowska-Curie Actions – 2016 COFUND call opens
The 2016 call for the Marie Skłodowska-Curie Actions COFUND programme has opened with a deadline of 29 September. COFUND supports new or existing regional, national or international programmes to open up international, inter-sectoral and interdisciplinary research training. Co-funding is available for post-doctoral fellowship programmes and for doctoral training programmes. Co-funding is given for 3-5 years for large projects of up to € 10 million.
Further details are available on the Participant Portal. UKRO, as UK National Contact Point for Horizon 2020 Marie Skłodowska-Curie Actions, is holding an information day on the call and how to apply. This will be held at the University of Birmingham on 25 May. Further information available here.
Find Out About Marie Curie Fellowships: 11th May 2016
Information Kiosk by Max Sparber CC BY-NC 2.0
Are you interested in applying to the 2016 round of the European Commission's Marie Sklodowska Curie Individual Fellowships call?
What are they? Marie Curie Fellowships provide funding to host a fellow (a researcher at any career stage with a doctorate) from anywhere in the world for up to 2 years, plus research expenses and a small amount for management costs. They help experienced researchers to advance their careers and gain new skills through advanced training, international mobility, and optional intersectoral secondments. UK-based academic staff can also apply for a Global Fellowship to go to another research institution anywhere in the world for up to 2 years, plus a 1 year reintegration back into the EU. This year the deadline is 14th September 2016.
How do I find out more? The UK Research Office, the UK's national contact point for Marie Curie schemes, is holding an information event on 11th May 2016 at the University of Edinburgh. The day will provide an overview of the Individual Fellowships scheme. "Participants should gain a clear understanding of the proposal format and the key considerations related to planning, writing and submitting proposals." There will also be a case study from a successful Marie Curie applicant.
Register: If you'd like to attend this event, you can book a place for free on the registration page.
For more information about this scheme and to access examples of successful proposals, please contact your Faculty Research Funding and Policy Manager.
Public consultation on the European Innovation Council
The European Commissioner for Research, Carlos Moedas has launched a public consultation and call for ideas for a European Innovation Council. The survey is open until 29 April and responses will feed into eventual proposals for the new EIC. There are also various background documents on European Commission discussions to date on the EIC which give useful context.
The idea for the EIC is to create more high-profile, disruptive market-creating innovation to turn the best ideas in Europe into jobs, businesses and opportunities. At the moment, Europe is good with coming up with new ideas and research but less successful at taking these to market.
The European Research Council has been a big success in supporting excellent science and early information suggests that the EIC would be based on a similar model, sitting alongside it to enable breakthrough innovations to be scaled up more quickly with fewer market access barriers, better co-ordinated policies and flexible financial support. There are some suggestions that the EIC should operate as a venture capitalist rather than a funding body, supporting groups of companies and universities that are willing to work in multi-disciplinary teams on high-risk, high-gain projects.
The plan seems to be to develop an EIC pilot as part of the Horizon 2020 mid-term review in 2017.
Social Sciences and Humanities in the H2020 2016-17 work programmes
Net4Society, the international network of National Contact Points for Societal Challenge 6 "Europe in a changing world: inclusive, innovative and reflective societies" has published a report on the opportunities for social sciences and humanities (SSH) research across Horizon 2020. It analyses all the SSH-relevant topics that have been identified in the Horizon 2020 2016-17 Work Programmes and is a useful guide for SSH researchers looking to find an entry point into H2020 and the Societal Challenges in particular. You can download the document here.
Innovative Training Networks call open
In the new round of 2016 Horizon 2020 calls that opened last week, the EC launched the latest call under Marie Sklodowska Curie Actions for Innovative Training Networks (ITNs). ITNs supports joint training and/or doctoral programmes implemented by partnerships of universities, research institutions, businesses and partners from other sectors. There are three different strands: European Training Networks (ETN); European Industrial Doctorates (EID) and European Joint Doctorates (EJD). The differences are essentially about the number of non-academic partners and whether joint or multiple degrees are awarded to the doctoral researchers at the end of the programme.
The deadline is 12 January 2016. Full call details are available on the Participant Portal. If you'd like advice on ITNs or a project idea then contact the Research Funding and Policy Manager for your faculty.
Info Day on Smart Cities & Communities – Horizon 2020 Work programme 2016-2017 'Secure, Clean and Efficient Energy'
This event will take place on Friday 6th November 2015 in the Charlemagne building, Brussels. Presentations will cover the Smart Cities & Communities part of the Work Programme for 2016-2017, the application procedure and detailed information on the calls. Participants will have networking opportunities throughout the event.
Free and compulsory registration for the event will open soon.
Note: Due to the limited number of seats available, a maximum of two people from the same organisation will be registered.
Further information can be accessed here.
Draft 2016/17 Horizon 2020 Work Programmes Published
The EC has published draft versions of the 2016-17 work programmes for Horizon 2020: https://ec.europa.eu/programmes/horizon2020/en/draft-work-programmes-2016-17. These are not officially endorsed yet but if you are planning an H2020 bid in the coming year they are well worth reading to get some advance intelligence on the likely themes and topics in the calls. Formal adoption of the WPs is expected in the next month.
UKRO Annual Visit: Everything you ever wanted to know about EU research funding.
As I've mentioned in a previous post, we have our annual UKRO visit on Friday 18 September. This is a good opportunity to refresh your knowledge of EU funding, particularly the current €80 bn framework programme Horizon 2020 and to start thinking about the upcoming 2016 calls for proposals. Most of the sessions will be led by our UKRO advisor, Alex Berry. We also have a session led by Jude Kirton-Darling, one of the North East MEPs. You will also be able to sign up for 15 minute clinic sessions if you have any specific EU funding queries you would like to discuss with Alex.
Details are below. Click on the links to sign up for the sessions. You won't receive any confirmation but you can go back into the poll at any time to check it or amend your entry.
If you have any questions, please don't hesitate to contact me.
Time Session Venue Register*
9.30-10.30:
Applying for EU funding – top tips and lessons learned from the first round of Horizon 2020 calls
CCE1-410 Register here
10.30-11.30:
Jude Kirton-Darling, North East MEPs – how Europe benefits the North East, including through research and innovation funding
1.00-2.00:
Opportunities for academics to work with industry in Horizon 2020 – FET, Industrial Leadership and Societal Challenges
Clinic appointments – These are 15 minute slots and your chance to ask questions about EU funding and to start preparing for the upcoming 2016 Horizon 2020 calls
Horizon 2020: Innovative Training Networks Information Event
UKRO, in its capacity as UK National Contact Point for the Horizon 2020 Marie Skłodowska-Curie Actions (MSCA), is holding two information events on the 2016 'Innovative Training Networks' (ITN) call for proposals, which will have a deadline in mid-January 2016.
The ITN scheme supports joint research training and/or doctoral programmes run by partnerships of universities, industry and other non-academic organisations.
The events will be held at the University of York and at the Royal Veterinary College in London on Wednesday 7 October. They will give participants a clear understanding of the proposal format for each scheme and the key issues relating to planning, writing and submitting proposals. Places will be allocated on a first-come, first-served basis to UKRO subscribers. If you don't yet subscribe to UKRO then you can do so here.
Proudly powered by WordPress Theme: Twenty Seventeen.

redpajama_set_name: RedPajamaCommonCrawl


text:
The 311th Sustainment Command (Expeditionary) (ESC) is a subordinate command of 79th Sustainment Support Command.

Units
The command is made up of the following units:
 304th Sustainment Brigade
 304th Special Troops Battalion
 155th Combat Sustainment Support Battalion
 371st Combat Sustainment Support Battalion
 420th Transportation Battalion
 650th Regional Support Group
 469th Combat Sustainment Support Battalion
 483rd Transportation Battalion
 314th Transportation Battalion
 653rd Regional Support Group
 419th Combat Sustainment Support Battalion
 336th Combat Sustainment Support Battalion
 418th Quartermaster Battalion

References

311
311

redpajama_set_name: RedPajamaWikipedia


text:
Влада в нічному місті. Книга IV: Сила (eng. Power Book IV: Force) — американський кримінальний драматичний телесеріал, створений Робертом Мунічем , прем'єра якого відбулася 6 лютого 2022 року на Starz .  Серіал є продовженням і третім доповненням до «Влади», створеної Кортні А. Кемп .  У березні 2022 року серіал продовжили на другий сезон.

Акторський склад

Головні ролі

 Джозеф Сікора в ролі Томмі Ігана
 Айзек Кіз — Девід Семпсон «Даймонд».
 Лілі Сіммонс у ролі Клаудії «Клод» Флінн
 Габріель Райан у ролі Глорії (1 сезон)
 Шейн Гарпер у ролі Віктора «Віка» Флінна
 Кріс Д. Лофтон — Дженард Семпсон
 Ентоні Флемінг у ролі Дж. П. Гіббса
 Люсьєн Кембріч — Дарнелл «Ді-Мак» Макдауелл
 Томмі Фланаган у ролі Волтера Флінна
 Міріам А. Хайман у ролі Стейсі Маркс (2 сезон, гостьовий сезон 1)
 Адрієнн Вокер у ролі Шанті «Шоустопер» Пейдж (сезон 2)
 Кармела Зумбадо — Мірея Гарсія (сезон 2)

Актори другого плану

 Одрі Еспарза в ролі Ліліани (1 сезон)
 Єреміх як Елайджа (1 сезон)
 Шанель Белл у ролі Лорін Вільямс
 Костянтин Лавиш — Родован Міркович
 Гай Ван Сверінген — Полі «П'єрогі» Музаскі
 Ахмад Ніколас Фергюсон — Маршалл Кренон
 Філ Донлон — Саймон Макдугал (сезон 1)
 Дебо Балогун — Шеймус Бенніган
 Бартон Фіцпатрік у ролі Блекстона (1 сезон)
 Міреллі Тейлор у ролі місіс Сото
 Пауліна Нгуєн у ролі Май Лієт (сезон 1)
 Блайт Ховард в ролі Едріенн
 Патриція Калембер у ролі Кейт Іган
 Монік Габріела Кернен — детектив Бланка Родрігес

Епізоди

Виробництво
У серпні 2020 року було оголошено, що серіал отримав зелене світло з 10-серійним замовленням, щоб зосередитися на персонажі Джозефа Сікори (Томмі Ігана) . У той час було оголошено, що Роберт Муніч стане шоураннером серіалу та виконавчим продюсером разом із Кортні А. Кемп і Кертісом «50 Cent» Джексоном .  У лютому 2021 року до серіалу було додано вісім додаткових акторів: Лілі Сіммонс, Габріель Райан, Айзек Кіз, Шейн Харпер, Кріс Д. Лофтон, Ентоні Флемінг III, Люсьєн Кембрік і Томмі Фланаган.  У травні 2021 року було оголошено, що Джеремі приєднається до акторського складу у повторній ролі.  У липні 2021 року було оголошено, що Роберт Мунік покидає пост шоуранера, посилаючись на творчі розбіжності. Кортні А. Кемп, яка наглядає за всіма серіями Power, займе цю посаду.  9 березня 2022 року Starz продовжила серіал на другий сезон, а Гері Леннон став новим шоураннером, Муніч покинув серіал.

Відгуки

Примітки

Посилання

 Влада в нічному місті. Книга IV : Сила на IMDb
 Влада в нічному місті. Книга IV : Сила на Rotten Tomatoes
 Влада в нічному місті. Книга IV : Сила на Metacritic

Телесеріали, дія яких розгортається в місті Нью-Йорку
Телесеріали CBS Studios
Програми телеканалу Starz
Телесеріали англійською мовою
Телесеріали США, запущені у 2022


text:
<?php

/**
 * This is the model class for table "Users".
 *
 * The followings are the available columns in table 'Users':
 * @property string $userId
 * @property string $userStatus
 * @property integer $userType
 * @property string $userName
 * @property string $userPass
 * @property string $userFullName
 * @property string $studentId
 * @property string $userEmail
 * @property string $userPhones
 * @property integer $userIsVisible
 * @property string $notes
 *
 * The followings are the available model relations:
 * @property Messages[] $messages
 * @property Posts[] $posts
 * @property Students $student
 */
class Users extends CActiveRecord
{
	public $userPass_repeat;

	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Users the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'users';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('userType, userName, userPass', 'required'),
			array('userType, userIsVisible', 'numerical', 'integerOnly'=>true),
			array('userStatus, studentId', 'length', 'max'=>10),
			array('userName, userPass, userFullName', 'length', 'max'=>255),
			array('userPass', 'compare'),
			array('userEmail, userPhones, userFullName, notes', 'safe'),
			array('userPass_repeat', 'safe'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('userName, userFullName, userEmail', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'messages' => array(self::MANY_MANY, 'Messages', 'messagesto(messageTo, messageId)'),
			'posts' => array(self::HAS_MANY, 'Posts', 'userId'),
			'student' => array(self::BELONGS_TO, 'Students', 'studentId', 'order'=>'studentOrder'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'userId' => '#',
			'userStatus' => 'Статус',
			'userType' => 'Тип',
			'userName' => 'Име',
			'userPass' => 'Парола',
			'userPass_repeat' => 'Повторете паролата',
			'userFullName' => 'Име и Фамилия',
			'studentId' => 'Ученик',
			'userEmail' => 'Email',
			'userPhones' => 'Телефони',
			'userIsVisible' => 'Видим',
			'notes' => 'Бележки',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
		$criteria->compare('userName',$this->userName,true);
		$criteria->compare('userFullName',$this->userFullName,true);
		$criteria->compare('userEmail',$this->userEmail,true);
		$criteria->with = 'student';
		if (Yii::app()->user->getState('userType')!=100) {
			$criteria->addCondition('userType<3');
		}

		$sort = new CSort;
		$sort->defaultOrder = 'student.studentOrder ASC';
		$sort->attributes = array(
			'userName' => 'userName',
			'userFullName' => 'userFullName',
			'userEmail' => 'userEmail',
			'student.studentName' => array('asc'=>'student.studentOrder', 'desc'=>'student.studentOrder desc'),
		);
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
			'sort'=>$sort,
			'pagination'=>array( 'pageSize'=>50,),
		));
	}

	public function delete()
	{
		if(!$this->getIsNewRecord() && $this->userId==1) {
			throw new CDbException(Yii::t('yii','User account cannot be deleted because it is an administrator.'));
		}
		return parent::delete();
	}

	/**
	* perform one-way encryption on the password before we store it in
	the database
	*/
	protected function afterValidate()
	{
		parent::afterValidate();
		$this->userPass = self::encrypt($this->userPass);
	}
	public static function encrypt($value)
	{
// 		return $value;
		return md5($value);
	}

	public function getStudentsList() {
		$model = Students::model();
		$a = $model->findAll();
		$q[0]='-';
		foreach($a as $aa) {
			$q[$aa->studentId]=$aa->studentOrder . '. ' . $aa->studentName;
		}
		return $q;
	}

	public static function getUserLabel($u = false) {
		$sql = '
select
	u.userId,
	coalesce(u.userFullName, u.userName) as userName,
	u.userType,
	u.userIsVisible,
	s.studentId,
	s.studentOrder,
	u.notes
from
	users u
	left join students s on u.studentId=s.studentId
where
	u.userId=?
';
		if (intval($u)!=0) {
			$u=Yii::app()->db->createCommand($sql)->queryRow(true, array($u));
		} else {
			$u=Yii::app()->db->createCommand($sql)->queryRow(true, array(Yii::app()->user->getId()));
		}
		$utext = '';
		switch($u['userType']) {
			case '0': $utext = ($u['userIsVisible'])?Students::getLabel($u['studentId']):('ученик №'.$u['studentOrder']);break;
			case '1': $utext = (($u['userIsVisible'] && $u['userName']!='')?$u['userName'].', ':'').'родител на '.Students::getLabel($u['studentId']);break;
			case '2': $utext = (($u['userIsVisible'] && $u['userName']!='')?$u['userName'].', ':'').'учител по '.$u['notes'];break;
			case '3': $utext = (($u['userIsVisible'] && $u['userName']!='')?$u['userName'].', ':'').'класен ръководител';break;
			case '100': $utext = (($u['userIsVisible'] && $u['userName']!='')?$u['userName'].', ':'').'администратор';break;
		}
		return $utext;
	}

}

redpajama_set_name: RedPajamaGithub


Peer recognition. There's nothing quite like receiving acknowledgement and accolades for all you've accomplished in growing your business.
Growth can come in many forms - it can be organic, strategic or financial. No matter the path taken, you did it with a committed and passionate team who focused on your vision and got it done.
The Association for Corporate Growth Central Texas Chapter wants to recognize your success and share it with the community.
If your company, your client or a colleague has had exceptional financial performance and growth, click here to nominate them for a 2019 ACG Central Texas Growth Award.
The Association for Corporate Growth has just one mission: to drive middle-market growth. And last year's ACG Central Texas Chapter awards luncheon, held at the Austin Country Club, honored twelve companies that embody that mission.
The finalists for 2018's awards represented a broad range of industries, philosophies, and missions, but they all had one thing in common: these companies were growing, and growing fast.
Of course, with rapid growth comes growing pains, and keynote speaker Brett Hurt, cofounder and former CEO of Bazaarvoice and founder and CEO of data.world, spoke with Pope about how the companies at the awards luncheon could stay true to their core values as they scale. During his time at the helm, Hurt grew Bazaarvoice from a bootstrapped startup, through a successful IPO and two acquisitions, into the retail-marketing heavyweight we know today. The Austin entrepreneur had three primary pieces of advice for CEOs leading their own companies through rapid growth.
First, he said that Chief Executive Officers should also act as Chief Culture Officers. This may mean making tough calls like replacing people in key roles, but it also means modeling the ideal company culture. Hurt talked about small things like making sure the company promoted wellness by providing healthy snacks rather than junk food, as well as larger initiatives like starting an optional company book club to read about and discuss various facets of corporate culture. As a starting point, he recommended Seth Godin's Tribes. Ultimately, he said, behind every great company is a CEO who owns and embraces corporate culture.
Representatives of the twelve finalists for this year's ACG Central Texas Growth Awards.
Following Hurt's insights, Pope introduced Monika Ostrowski, the president of Entrepreneurs' Organization, who presented the EO Rockstar Entrepreneur of the Year award to Proximity Learning President and CEO Evan Erdberg.
Then it was time for the main event: the ACG Central Texas Growth Awards. The twelve finalists were divided into four categories based on revenue, and representatives from each company were in attendance to accept their awards.
Eli Andrade, Evan Erdberg, and Mark Worrell (L to R) of Proximity Learning.
Proximity Learning, whose mission is to give students the best education no matter where they live or what financial situation they are brought up in, took home the 2018 award for the under $10 million category. Proximity Learning aims to solve the problem of dwindling numbers of teachers as baby boomers begin to retire and fewer new educators step into their roles. By live streaming certified, quality teachers into classrooms across the country, Proximity is working to ensure all kids get the K-12 education they deserve.
The other finalists in the under $10 million category were Praxent, a software development company that partners with disruptors in a variety of industries to streamline operations and transform customer experiences, and Woom Bikes, who's on a mission to inspire children to love cycling by providing high-quality, lightweight bikes designed specifically for kids.
Mason Arnold (L) and Chris Romano (R) of Cece's Veggie Noodle Co.
Crystalee Modica, Robb Misso, and Jeff Markulec of Dynamic Manufacturing Solutions.
The winner in ACG's third-largest revenue category was Dynamic Manufacturing Solutions, whose mission is to re-shore manufacturing jobs. This full-service manufacturing and engineering organization supports the biomedical, pharmaceutical, semiconductor, food and beverage, and microelectronics industries. While many manufacturing firms are operations driven, DMS is customer service driven, with a vision to create "The great experience" for customers, suppliers, employees, and the community.
The other finalists in this category were Aspen Beverage Group, a coffee and tea provider that was founded by Chad McNair twenty-five years ago and sold to Finlay's in 2017, and Boxx, which provides high-performance workstations and rendering systems for visual effects and animations professionals, with clients ranging from Disney to NASA.
Kelly Hannifin (R) and Evan Huston of Saatva Mattress.
Saatva Mattress was the final winner at the 2018 awards luncheon. Saatva's environmentally friendly mattresses are made in America and delivered from their 135 fulfillment centers to sleepy customers in all fifty states. In 2015, Forbes ranked Saatva as one of America's most promising companies, and now it's one of the largest online-only mattress companies in America.
The other finalists in this category were HHS, a housekeeping support service founded in 1975 and now serving more than 450 partners in three different industries, and Silicon Labs, a fabless semiconductor company whose mission is to transform industries, grow businesses, and improve lives.
With more than 200 members and honorees in attendance, the largest ACG Central Texas Growth Awards event to date represented a cross section of the impressive talent that makes Central Texas a haven for corporate growth. But perhaps Saatva CEO Ron Rudzin's philosophy says it best: "Simmer down. Be humble. If you're truly talented, people will know. You don't have to keep telling them." So with that, we'll say enough said.
ACG Central Texas would like to thank its sponsors, PMB Helin Donovan, Insperity, Dykema Cox Smith, Bank of America Merrill Lynch, Capital One Commercial Banking, Accomplice, the Austin Business Journal, Asociación de Empresarios Mexicanos, Entrepreneurs' Organization, Texas Military Officers Association, and YPO Austin.


Believe it or not, there are still people out there that are not convinced that a website is a worthy investment. This is perhaps because they are unaware just how much a highly customized website is capable of handling. We are not talking about pretty pictures here, we are talking about function.
We are also talking about money. Yes, a well-built website can save time, which means saving money. Below we look at a few tasks that can be handled by a custom developed website, however, do not let this list limit your imagination!
A website can easily act as a hub for communication with your clients in a structured, yet simplistic manner. On the most basic level, you have the email contact form. Most people stop there and do not demand more from their web developers. With the right skills, discussion forums, support ticket systems and knowledge bases are all existing methods of easing and simplifying communication with existing and prospective clients.
This also means, that when answering repetitive questions, you can refer users to a page on your website that addresses their problem - say it once and never again.
Here we delve into a topic that can be as simple or complex as you can imagine - but never hard. The array of data that businesses in today's information-centric world is vast and tasks such as data entry from paper to PC can be avoided by collecting, manipulating and displaying information in one system. A basic example would be a survey. A user could fill in a form on the website. Later, all the data could be tabulated, printed, exported to csv or even graphed!
Get your website made by the right people, and you will never have to deal with the hassle of keeping pieces of paper for each person that signs up - users can sign up from anywhere and even pay online!
Selling online is a growing trend and, while possible without your own website, an established business needs their own online-home to showcase and sell products. An ecommerce website can handle ordering, invoicing, payment, tax and shipping calculation. It can also double up as a way to keep a record of stock that you have.
The above examples are just a tip off the iceberg; a website or web application can assist and automate just about any repetitive business task.


Professor Andrew Trapp-- who is also affiliated with the Mathematical Sciences and Data Science departments-- teaches his students that the best science brings together solid research with practical applications that will make a positive impact on society.
Andrew Trapp works with formulas and algorithms to understand the analytics involved in decision making (in everything from healthcare to power grids) and how it's influenced by many factors.
I study decision making in the context of mathematical optimization. My main interests lie in the area of humanitarian decision making. For as long as I can remember I have been interested in the trade-offs between decisions—meaning, what combination of choices is allowable and, possibly, optimal.
This is a tough question. Perhaps that we are wearing white coats and doing laboratory experiments, exploring theoretical concepts that have little to do with reality. In my opinion, the best type of research is that which marries deep underlying theory with very practical, impactful applications.
I think the routine discipline of my days, deeply considering research avenues and possibilities, both on my own, and together with inquisitive students, that will have a lasting impact. At least, that's the goal.
The goal of my humanitarian decision-making research is to have a lasting impact on improving our society.
I am fortunate to regularly involve WPI students, both undergraduate and graduate, in my research activities. I believe this early formative exposure in their career helps create future explorers and leaders that contribute to a better world.


text:
describe('Grid Columns Observer', () => {

  let columns, data, table, grid, $columns, $data;

  beforeEach(() => {
    columns = [
      { id: 'id' },
      { id: 'firstName' }
    ];

    data = [
      { id: 2, firstName: 'foo2', lastName: 'bar2' },
      { id: 1, firstName: 'foo1', lastName: 'bar1' },
      { id: 3, firstName: 'foo2', lastName: 'bar3' }
    ];

    table = document.createElement('table');
    fixtures.appendChild(table);

    spyOn(GridColumnsObserver, 'onSplice').and.callThrough();
    spyOn(Grid.prototype, 'dispatchEvent').and.callThrough();

  });

  it('should call onSplice for a "splice" change', () => {
    grid = new Grid(table, {
      data: data,
      columns: columns
    });

    jasmine.clock().tick();

    const changes = [
      { type: 'splice', removed: [], index: 0, addedCount: 0, object: data }
    ];

    GridColumnsObserver.on.call(grid, changes);

    expect(GridColumnsObserver.onSplice).toHaveBeenCalledWith(changes[0]);
  });

  describe('with splice change', () => {
    beforeEach(() => {
      grid = new Grid(table, {
        data: data,
        columns: columns,
        view: {
          thead: true,
          tfoot: true
        }
      });

      $columns = grid.$columns;
      $data = grid.$data;

      jasmine.clock().tick();
    });

    it('should add new column', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      expect(thead.childNodes[0].childNodes.length).toBe(1 + 2);
      expect(tfoot.childNodes[0].childNodes.length).toBe(1 + 2);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === (1 + 2));

      $columns.push({
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect(thead.childNodes[0].childNodes.length).toBe(1 + 3);
      expect(tfoot.childNodes[0].childNodes.length).toBe(1 + 3);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === (1 + 3));

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(thead.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => (
        tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id && tr.childNodes[2].getAttribute('data-waffle-id') === $columns.at(1).id
      ));

      expect(grid.dispatchEvent).toHaveBeenCalledWith('columnsspliced', {
        index: 2,

        removedNodes: {
          thead: [],
          tbody: [],
          tfoot: []
        },

        addedNodes: {
          thead: [thead.childNodes[0].childNodes[3]],
          tbody: [
            tbody.childNodes[0].childNodes[3],
            tbody.childNodes[1].childNodes[3],
            tbody.childNodes[2].childNodes[3]
          ],
          tfoot: [tfoot.childNodes[0].childNodes[3]]
        }
      });
    });

    it('should add new column with draggable flag', () => {
      grid.options.dnd = true;

      $columns.push({
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect($columns.last().draggable).toBe(true);

      const thead = grid.$thead[0];
      const tfoot = grid.$tfoot[0];

      expect(thead.childNodes[0].childNodes[0].getAttribute('draggable')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('draggable')).toBeNull();
      expect(thead.childNodes[0].childNodes[2].getAttribute('draggable')).toBeNull();
      expect(thead.childNodes[0].childNodes[3].getAttribute('draggable')).toBe('true');

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('draggable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('draggable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('draggable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[3].getAttribute('draggable')).toBe('true');
    });

    it('should add new column and disable sort if grid is not sortable', () => {
      grid.options.sortable = false;

      $columns.push({
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect($columns.last().sortable).toBe(false);

      const thead = grid.$thead[0];
      const tfoot = grid.$tfoot[0];

      expect(thead.childNodes[0].childNodes[3].getAttribute('waffle-sortable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[3].getAttribute('waffle-sortable')).toBeNull();
    });

    it('should remove column', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      const expectedTheadRemovedNodes = [
        thead.childNodes[0].childNodes[1]
      ];

      const expectedTfootRemovedNodes = [
        tfoot.childNodes[0].childNodes[1]
      ];

      const expectedTbodyRemovedNodes = [
        tbody.childNodes[0].childNodes[1],
        tbody.childNodes[1].childNodes[1],
        tbody.childNodes[2].childNodes[1]
      ];

      $columns.splice(0, 1);
      jasmine.clock().tick();

      expect(GridColumnsObserver.onSplice).toHaveBeenCalled();

      expect(grid.$columns.length).toBe(1);

      expect(thead.childNodes[0].childNodes.length).toBe(1 + 1);
      expect(tfoot.childNodes[0].childNodes.length).toBe(1 + 1);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === (1 + 1));

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id);

      expect(grid.dispatchEvent).toHaveBeenCalledWith('columnsspliced', {
        index: 0,

        removedNodes: {
          thead: expectedTheadRemovedNodes,
          tbody: expectedTbodyRemovedNodes,
          tfoot: expectedTfootRemovedNodes
        },

        addedNodes: {
          thead: [],
          tbody: [],
          tfoot: []
        }
      });
    });

    it('should add and remove columns', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      const expectedTheadRemovedNodes = [
        thead.childNodes[0].childNodes[1]
      ];

      const expectedTfootRemovedNodes = [
        tfoot.childNodes[0].childNodes[1]
      ];

      const expectedTbodyRemovedNodes = [
        tbody.childNodes[0].childNodes[1],
        tbody.childNodes[1].childNodes[1],
        tbody.childNodes[2].childNodes[1]
      ];

      $columns.splice(0, 1, {
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect(GridColumnsObserver.onSplice).toHaveBeenCalled();

      expect(grid.$columns.length).toBe(2);

      expect(thead.childNodes[0].childNodes.length).toBe(1 + 2);
      expect(tfoot.childNodes[0].childNodes.length).toBe(1 + 2);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === (1 + 2));

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(thead.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => (
        tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id && tr.childNodes[2].getAttribute('data-waffle-id') === $columns.at(1).id
      ));

      expect(grid.dispatchEvent).toHaveBeenCalledWith('columnsspliced', {
        index: 0,

        removedNodes: {
          thead: expectedTheadRemovedNodes,
          tbody: expectedTbodyRemovedNodes,
          tfoot: expectedTfootRemovedNodes
        },

        addedNodes: {
          thead: [thead.childNodes[0].childNodes[1]],
          tbody: [
            tbody.childNodes[0].childNodes[1],
            tbody.childNodes[1].childNodes[1],
            tbody.childNodes[2].childNodes[1]
          ],
          tfoot: [tfoot.childNodes[0].childNodes[1]]
        }
      });
    });

    it('should add new column and bind input events', () => {
      spyOn(grid, 'isEditable').and.returnValue(true);
      spyOn(GridDomBinders, 'bindEdition').and.callThrough();

      $columns.push({
        id: 'lastName',
        editable: {
          type: 'text'
        }
      });

      jasmine.clock().tick();

      expect(GridDomBinders.bindEdition).toHaveBeenCalledWith(grid);
    });

    it('should remove column and unbind input events', () => {
      spyOn(grid, 'isEditable').and.returnValue(false);
      spyOn(GridDomBinders, 'unbindEdition').and.callThrough();

      $columns.splice(0, 1);

      jasmine.clock().tick();

      expect(GridDomBinders.unbindEdition).toHaveBeenCalledWith(grid);
    });

    it('should add columns and rebind if needed', () => {
      spyOn(grid, 'isEditable').and.returnValue(true);
      spyOn(GridDomBinders, 'bindEdition').and.callThrough();

      $columns.push({
        id: 'lastName',
        editable: {
          type: 'text',
          updateOn: 'keydown'
        }
      });

      jasmine.clock().tick();

      expect(grid.$$events).toEqual(jasmine.objectContaining({
        onInputTbody: {
          events: 'keydown',
          handler: jasmine.any(Function)
        }
      }));

      $columns.push({
        id: 'fullName',
        editable: {
          type: 'text',
          updateOn: 'focusout'
        }
      });

      jasmine.clock().tick();

      expect(grid.$$events).toEqual(jasmine.objectContaining({
        onInputTbody: {
          events: 'keydown focusout',
          handler: jasmine.any(Function)
        }
      }));
    });

    it('should add new column and trigger new resize', () => {
      spyOn(grid, 'isResizable').and.returnValue(true);
      spyOn(grid, 'resize');

      $columns.push({
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect(grid.resize).toHaveBeenCalled();
    });

    it('should add new column and not trigger new resize if grid is not resizable', () => {
      spyOn(grid, 'isResizable').and.returnValue(false);
      spyOn(grid, 'resize');

      $columns.push({
        id: 'lastName'
      });

      jasmine.clock().tick();

      expect(grid.resize).not.toHaveBeenCalled();
    });

    it('should remove column and trigger new resize', () => {
      spyOn(grid, 'isResizable').and.returnValue(true);
      spyOn(grid, 'resize');

      $columns.splice(0, 1);

      jasmine.clock().tick();

      expect(grid.resize).toHaveBeenCalled();
    });

    it('should remove column and not trigger new resize if grid is not resizable', () => {
      spyOn(grid, 'isResizable').and.returnValue(false);
      spyOn(grid, 'resize');

      $columns.splice(0, 1);

      jasmine.clock().tick();

      expect(grid.resize).not.toHaveBeenCalled();
    });

    it('should not try to add unknow cells in tbody', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      $columns.splice(0, 0, {
        id: 'lastName'
      });

      $data.splice(0, 0, {
        id: 4,
        firstName: 'foo4',
        lastName: 'bar4'
      });

      jasmine.clock().tick();

      // One column for checkbox, three columns for daya
      const expectedColumnsSize = 1 + 3;

      expect(thead.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tfoot.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === expectedColumnsSize);

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(thead.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);
      expect(thead.childNodes[0].childNodes[3].getAttribute('data-waffle-id')).toBe($columns.at(2).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);
      expect(tfoot.childNodes[0].childNodes[3].getAttribute('data-waffle-id')).toBe($columns.at(2).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[2].getAttribute('data-waffle-id') === $columns.at(1).id);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[3].getAttribute('data-waffle-id') === $columns.at(2).id);

      // Check content
      expect(tbody.childNodes).toVerify((tr, idx) => tr.childNodes[1].innerHTML === $data.at(idx).lastName.toString());
    });

    it('should not try to remove unknow cells in tbody', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      $data.reset([
        { id: 4, firstName: 'foo4', lastName: 'bar4' },
        { id: 5, firstName: 'foo5', lastName: 'bar5' },
        { id: 6, firstName: 'foo6', lastName: 'bar6' }
      ]);

      $columns.splice(1, $columns.length);

      jasmine.clock().tick();

      // One column for checkbox, one columns for data
      const expectedColumnsSize = 1 + 1;

      expect(thead.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tfoot.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === expectedColumnsSize);

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id);

      // Check content
      expect(tbody.childNodes).toVerify((tr, idx) => tr.childNodes[1].innerHTML === $data.at(idx).id.toString());
    });

    it('should remove and columns with same id', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      $data.reset([
        { id: 4, firstName: 'foo4', lastName: 'bar4' },
        { id: 5, firstName: 'foo5', lastName: 'bar5' },
        { id: 6, firstName: 'foo6', lastName: 'bar6' }
      ]);

      $columns.splice(1, 1);
      $columns.push(
        { id: 'lastName' },
        { id: 'firstName' }
      );

      jasmine.clock().tick();

      // One column for checkbox, three columns for data
      const expectedColumnsSize = 1 + 3;

      expect(thead.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tfoot.childNodes[0].childNodes.length).toBe(expectedColumnsSize);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes.length === expectedColumnsSize);

      expect(thead.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(thead.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);
      expect(thead.childNodes[0].childNodes[3].getAttribute('data-waffle-id')).toBe($columns.at(2).id);

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('data-waffle-id')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('data-waffle-id')).toBe($columns.at(0).id);
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('data-waffle-id')).toBe($columns.at(1).id);
      expect(tfoot.childNodes[0].childNodes[3].getAttribute('data-waffle-id')).toBe($columns.at(2).id);

      expect(tbody.childNodes).toVerify(tr => tr.childNodes[0].getAttribute('data-waffle-id') === null);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[1].getAttribute('data-waffle-id') === $columns.at(0).id);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[2].getAttribute('data-waffle-id') === $columns.at(1).id);
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[3].getAttribute('data-waffle-id') === $columns.at(2).id);

      // Check content
      expect(tbody.childNodes).toVerify((tr, idx) => tr.childNodes[2].innerHTML === $data.at(idx).lastName.toString());
    });
  });

  describe('with update change', () => {
    beforeEach(() => {
      grid = new Grid(table, {
        data: data,
        columns: columns,
        view: {
          thead: true,
          tfoot: true
        }
      });

      $columns = grid.$columns;
      $data = grid.$data;

      jasmine.clock().tick();
    });

    it('should update columns', () => {
      const thead = grid.$thead[0];
      const tbody = grid.$tbody[0];
      const tfoot = grid.$tfoot[0];

      const oldNodes = {
        thead: [
          thead.childNodes[0].childNodes[1]
        ],
        tfoot: [
          tfoot.childNodes[0].childNodes[1]
        ],
        tbody: [
          tbody.childNodes[0].childNodes[1],
          tbody.childNodes[1].childNodes[1],
          tbody.childNodes[2].childNodes[1]
        ]
      };

      expect(thead.childNodes[0].childNodes[1].style.maxWidth).toBeEmpty();
      expect(tfoot.childNodes[0].childNodes[1].style.maxWidth).toBeEmpty();
      expect(tbody.childNodes).toVerify(tr => !tr.childNodes[0].style.maxWidth);

      $columns.at(0).computedWidth = 100;

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(thead.childNodes[0].childNodes[1].style.maxWidth).not.toBeEmpty();
      expect(tfoot.childNodes[0].childNodes[1].style.maxWidth).not.toBeEmpty();
      expect(tbody.childNodes).toVerify(tr => tr.childNodes[1].style.maxWidth);

      const newNodes = {
        thead: [
          thead.childNodes[0].childNodes[1]
        ],
        tfoot: [
          tfoot.childNodes[0].childNodes[1]
        ],
        tbody: [
          tbody.childNodes[0].childNodes[1],
          tbody.childNodes[1].childNodes[1],
          tbody.childNodes[2].childNodes[1]
        ]
      };

      expect(grid.dispatchEvent).toHaveBeenCalledWith('columnsupdated', {
        index: 0,
        oldNodes: oldNodes,
        newNodes: newNodes
      });
    });

    it('should update columns and bind edition events', () => {
      spyOn(GridDomBinders, 'bindEdition').and.callThrough();

      $columns.at(0).editable = {
        type: 'text'
      };

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(GridDomBinders.bindEdition).toHaveBeenCalled();
    });

    it('should update columns and unbind edition events if grid is not editable anymore', () => {
      spyOn(grid, 'isEditable').and.returnValue(false);
      spyOn(GridDomBinders, 'unbindEdition').and.callThrough();

      $columns.at(0).editable = false;

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(GridDomBinders.unbindEdition).toHaveBeenCalled();
    });

    it('should update columns and not unbind edition events if grid is still editable', () => {
      spyOn(grid, 'isEditable').and.returnValue(true);
      spyOn(GridDomBinders, 'unbindEdition').and.callThrough();

      $columns.at(0).editable = false;

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(GridDomBinders.unbindEdition).not.toHaveBeenCalled();
    });

    it('should update columns and update draggable flag', () => {
      grid.options.dnd = true;

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(grid.$columns.at(0).draggable).toBe(true);

      const thead = grid.$thead[0];
      const tfoot = grid.$tfoot[0];

      expect(thead.childNodes[0].childNodes[0].getAttribute('draggable')).toBeNull();
      expect(thead.childNodes[0].childNodes[1].getAttribute('draggable')).toBe('true');
      expect(thead.childNodes[0].childNodes[2].getAttribute('draggable')).toBeNull();

      expect(tfoot.childNodes[0].childNodes[0].getAttribute('draggable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('draggable')).toBe('true');
      expect(tfoot.childNodes[0].childNodes[2].getAttribute('draggable')).toBeNull();
    });

    it('should add new column and disable sort if grid is not sortable', () => {
      grid.options.sortable = false;

      const changes = [
        { type: 'update', removed: [], index: 0, addedCount: 0, object: $columns }
      ];

      GridColumnsObserver.on.call(grid, changes);

      expect(grid.$columns.at(0).sortable).toBe(false);

      const thead = grid.$thead[0];
      const tfoot = grid.$tfoot[0];

      expect(thead.childNodes[0].childNodes[1].getAttribute('waffle-sortable')).toBeNull();
      expect(tfoot.childNodes[0].childNodes[1].getAttribute('waffle-sortable')).toBeNull();
    });
  });
});


The research, published today in the Royal Society of Chemistry's journal Food and Function, suggests that drinking a single serving of espresso coffee could increase the risk of caffeine toxicity in women who are pregnant or taking oral contraceptives, young children and people with liver disease.
The effects of caffeine toxicity can include headaches, chest pain, anxiety, increased heart rate and abdominal cramping. A very high intake of caffeine during pregnancy could result in low birth weight, increasing the risk of health problems such as high blood pressure, Type 2 diabetes and heart disease for the baby in later life.
The UK Food Standards Agency recommends an upper limit of 200mg of caffeine per day for pregnant women. Laboratory analysis of single-shot espresso coffees available from 20 different commercial outlets in Glasgow showed a wide range of variation in the amount of caffeine in each, from 51mg to 322mg. Four of the coffees tested contained caffeine levels of greater than 200mg.
Professor Alan Crozier of the University of Glasgow's School of Medicine, who led the research, said: "The variations in the amount of caffeine reflect differences in the batch-to-batch bean composition, roasting procedures, grinding conditions and the many variables in the coffee-making process such as water temperature and the ratio of water to coffee.
"Although the sample size for the study is small, it appears that there is a good deal of difference in the coffees available to consumers and there is currently no way for them to know how much caffeine is contained in their drinks. Coffee connoisseurs could easily but unknowingly drink very high levels of caffeine in a single cup.
"Although the response to caffeine varies from person to person, caffeine is generally cleared from the body in around five hours. However, it can increase to 30 hours in women taking oral contraceptives, pregnant women, the developing foetus, young children and people suffering from liver disease, which increases their susceptibility to caffeine toxicity.


Train at "Capital Roof Training Greenwich"
Training is at the heart of Capital Roofing's strategy, as mirrored by its Mission Statement 'Look to the Future', and in 2003 the company built its own dedicated Training Centre. This bears further testimony to the company's ethos in its pursuit of excellence. Not only for training their own staff, this superb facility is also in demand from the industry's recognised institutions.
Capital Roofing can offer many courses including, Introduction to Lead, Lead Bossing, Lead Welding, Solar Panel Installation, First Aid, Abrasive Wheels, Slating and Tiling, Felt, Asphalt, Liquid, Manual Handling and many more.
The Company always endeavours to carry at least 4 Apprentices in its workforce. This is typical of the Directors commitment to the future, and perhaps explains their keen interest and huge involvement with youth projects and charity support.
In February 2008 Capital Roofing's training ethos gained them the prestigious Flat Roofing Alliances Training Award. This was fantastic recognition from one of the industry's most recognised organisations, and was presented to them at the London Marriott Hotel.
IF YOU ARE INTERESTED IN ANY OF OUR TRAINING COURSES, PLEASE CONTACT US USING THE DETAILS OPPOSITE.


The Pop Monogram Square in pure silk presents the season's fresh twist on the iconic pattern. The central Monogram Flower is composed of a playful mix of straps, chains and locks – all historic House leatherwork signatures. Stripes and dots add a modern touch to this on-trend screen-printed scarf - an ideal gift for Monogram fans.


As you know, online retailers were struggling to meet the demand of the Black Friday in UK (28th Nov 2014). Websites of John Lewis, Tesco, Boots, Currys, Argos, GAME along with many others crashed or struggled within few hours of peak. Some of them came back while for others problem kept on persisting for almost till noon. Currys even went to the extent of creating queue's and waiting time of hours before users were allowed in. In the "Age of customer", where retailers conversion drops even if the response time for pages increases by couple of secs, it is odd that users have to wait hours.
All of these websites have great customer experience (yes there is a always a room for improvement) but may be there lack of enterprise architecture and stability was exposed.


I've been horrible- I keep neglecting updates and then I have a stash of about 100 photos that I'd like to post. So now we're going all the way back to December.
I discovered early on that one of the restaurants below our building makes fancy -above standard- hot chocolate.
These are some photos of the last snowfall we had right around Christmas.
There's this pub called "The Ox" close to the canal and it was rumoured to have some delicious food. So Adam and I decided to check it out. I was quite pleased to be seated right beside this cozy fire.
Annnd of course the wishbone- I won and got to make the wish which did come true.
And there we have it- That was the rest of December in photos.
This entry was posted on March 15, 2011 at 8:04 am and is filed under Daily Rambles.	You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


text:
Guest Post and Giveaway: Salad on the Side by Karenna Colcroft
May 18, 2022 | 2 comments
Today I am so pleased to welcome Karenna Colcroft to Joyfully Jay. Karenna has come to talk to us about her latest release, Salad on the Side. She has also brought along a great giveaway. Please join me in giving her a big welcome!
Karenna has written some questions and answers to share with us today!
Tell us a little about yourself.
I've been writing since I was very young. Creating worlds and characters got me through some seriously tough times in my life, and at a couple of points literally helped me stay alive. In 2009, I started writing and being published under this name and had a lot of books and short stories released. And then publishers started closing and real life started walloping me, so I went on hiatus and began pulling my remaining books off the market. I'm thrilled to be back!
In my non-writing life, I'm a nonbinary polyamorous human, with a husband and a committed partner. I have two adult kids and a "bonus" son (a/k/a son-in-law), and three cuteness-overload grandsons, as well as two cats.
You're self-publishing now instead of working with publishers. How do you get your cover art?
I was fortunate with that one. For Salad on the Side and the other books in the Real Werewolves Don't Eat Meat series, the original publisher assigned Lex Valentine of Winterheart Design to create the covers. (I'd had Lex as a cover artist through other publishers as well.) Obviously I can't use the original covers for my rereleases, since the publisher owns the rights, but I was able to reach out to Lex and contract her to create new covers.
How on earth did you come up with a vegan werewolf?
Long story, and one that would be a blog post by itself. Basically, an author of hetero romance released a book that included a werewolf who was or had been vegan. (I can't remember the details of the book right now; it's been over a decade.) An author friend posed the question "How could a werewolf be vegan?" I was bored, so I wrote a quick 1000-or-so-word scene to answer the question. Thus was born Kyle Slidell, the gay vegan werewolf. That scene made it into Salad on the Side.
There are a lot of books that feature werewolves. Aside from Kyle's veganism, what makes your wolves different?
I don't know how different mine are. Once Kyle and the rest came into being, I tried to avoid reading too many books with werewolf characters, because I didn't want to unintentionally poach another author's worldbuilding. There are several things that I think are different in my books, but to save space, I'll just share a couple.
In my world, the werewolves have a governing structure that's similar to the executive branches of government in the US. Each pack has an Alpha; packs are grouped into geographic regions governed by an Arkhon; and the country as a whole is ruled by the Anax. In a related novel that may be rereleased in the future, an Alpha compares those ranks to mayor, governor, and president. While packs in a lot of werewolf fiction have an Alpha and a Beta, as mine do, I created the third-highest rank of Peacekeeper for my packs; the Peacekeeper is responsible for mediating things within the pack and between their pack and others.
The other noticeable difference is with Tobias Rogan, Kyle's mate. I'd seen that in pretty much every single werewolf book, particularly romances, the Alpha was always dominant. ALWAYS. And I didn't want to write a character that was always running the show. So while Tobias is a very strong Alpha and is completely dominant most of the time, in the bedroom with Kyle, he chooses to take a more submissive role because he wants one aspect of his life where he doesn't have to be in charge.
You mentioned cats. Do they help you write?
Sure, if by "help" you mean "walk across the keyboard while I'm trying to type." I think they're a little ticked off that I'm writing about werewolves instead of werefelines.
What's next for you?
Too much, I think. LOL. On the male/male romance side, over the next year and a half or so I will be rereleasing the entire Real Werewolves Don't Eat Meat series, of which Salad on the Side is the first book. I plan to release one every four months, so book two, Veggie Burgers to Go, will be out in September.
Back when I first wrote these, I also wrote two heterosexual romances with secondary characters from the RWDEM books. My original plan with those was to have a hetero series that paralleled RWDEM; that didn't happen, for various reasons. But now it is, and to make it a truly parallel series, I've written two new books and will be writing another. The series is called Real Werewolves True Mates (shout-out to my friend Kaje Harper for pointing out that the series name should include "Real Werewolves" to indicate its connection to RWDEM). The first book in that series, Alpha Receptor, which is also the first of the newly-written books, will be out in July, and I'll also be releasing these every four months.
Since moving to Boston, Kyle Slidell has met only a few of his neighbors, including Tobias Rogan. Kyle is very interested in Tobias, and is ecstatic to learn that Tobias wants him, too.
But his neighbors have a secret: They're a werewolf pack, and Tobias is their Alpha. When one of the wolves attacks Kyle, he learns the truth in a hurry–and in the most painful way. Now he's a werewolf too, and as a vegan is at war with his wolf aspect, who craves meat.
With Tobias's help and love, Kyle must adjust to his new life. But can he protect the pack and his lover from a werewolf seeking revenge against Tobias?
Buy Link:
Amazon: https://www.amazon.com/dp/B09XR3X1J7/
Karenna Colcroft lives just north of Boston, Massachusetts, and has been in love with the city since childhood, though she has yet to encounter any werewolves, vampires, or other paranormal beings in her travels. At least none that she knows of. Though since in her non-writing life, under another name, she offers services as a channel and energy healing practitioner, it could be said that she herself is a paranormal being. The jury's still out on that.
Karenna is a polyamorous, nonbinary human who splits time between the home she shares with her husband and the one she shares with her committed partner. She also has two adult children and a bonus son, three grandchildren, and two and a half cats. (Half in terms of time the cat lives with her, not in terms of the cat itself…)
Author Website: http://www.karennacolcroft.com
Author Facebook (Personal): http://www.facebook.com/riverlightbearer
Author Facebook (Author Page): http://www.facebook.com/KarennaColcroft
Author Amazon: https://www.amazon.com/Karenna-Colcroft/e/B0031HAOUK
Karenna is giving away a $20 Amazon gift card with this tour:
By entering you are agreeing to the Terms and Conditions set out by Rafflecopter for entries.
Prizes will be distributed following the giveaway either by Joyfully Jay or the person/organization donating the prize. In order to facilitate prize distribution, the winner name's and email may be provided to a third party awarding the prize.
Excerpt and Giveaway: Veggie Burgers to Go by Karenna…
Review: Salad on the Side by Karenna Colcroft
Guest Post and Giveaway: Underground Erotica Anthology
Review: Sensei by Karenna Colcroft
TAGGED: Karenna Colcroft
Karenna Colcroft on May 18, 2022 at 7:11 am
Thank you for hosting me!
Kareni on May 18, 2022 at 7:58 pm
Welcome, Karenna, and thanks for your post. Best wishes with the release of your books; I hope they are all successful!
(And thanks for clarifying the half cat issue!)


Good Friday to all my friends and family in CBSI!
Welcome back to Covers from the Unknown. This week I present to you a Poison Ivy variant on the cover of Superboy, from the 2010-11 series. It is a Guillem March 1:10 variant on Superboy #2. I am actually a fan of the Poison Ivy series out now, and when looking for some nice Ivy covers, this was one of her few variants out there. Other than the 3-D covers from a couple years ago, IMHO, this is one of the best. I especially like that she is the star of the cover, and not sharing it with Harley for once!
These are very tough to find. According to the print run of 25k for the normal version of the comic, there should be 2,500 of these out there. But I would make a heavy wager that no one collected Superboy at this point. So who knows how many variants there are out there. Looking at the ones sold, they really aren't that expensive, but I am guessing that will change.
Good luck to all. Happy Hunting Fellas!
Awesome cover Jason! March is so hit or miss (see Powergirl 5) but I really like this one.


Since the 1990s, India has had an economic regime that has placed a premium on privatising enterprise. Liberalisation and globalisation are keywords of this regime. The frenetic rush to globalise is in large measure motivated by the desire to earn foreign exchange at any cost. In recent times, special economic zones (sez) have become a key instrument to actualise this desire.
In 2000, the Union government announced its intention to create such zones: industries operating in sezs were to be given several concessions. The only condition was that items manufactured here should be exported. The sez Act came into force in 2005 and sez rules were formulated in 2006.
Prima facie the idea behind sezs seems beautiful. After all, the issue at hand is that of earning precious foreign change. But this attractive logic hides dubious intentions.
The concessions The chief secretary of a state heads the sez authority. The authority is basically a facilitating agency that issues licences, permits and no-objection certificates to industries.
All sales and transactions taking place in sezs are exempt from the taxes, duties or fees required from other industries. This tax holiday will be effective for nearly 10 years.
There are other concessions. sez s are deemed as industrial townships under Article 243 of the Indian Constitution. This is dangerous clause, because the zones are not under the jurisdiction of municipal corporations, nagar panchayats, village panchayats or any other local authority.
sez development committees have been constituted to administer these zones. The developers of the sezs or their representatives will head these bodies; state government representation will be restricted to two officers. The body will carry out municipal functions like infrastructure development, land allocation, vaccination programmes, and issuing birth, marriage and death certificates and creating amenities for social welfare. The basic point here is that the developer (owner) of sez will manage this zone. And that's not all. Foreign developers can also establish a s ez. The development committee will also decide how much tax should be collected for various services, and what manner. All this means that residents of sezs will have no say in the administration of the zones.
Forget democracy The sez Act overrides all existing acts, including that pertaining to local-government. When towns under sezs fall in the haands aof a few people with their own rules of administration, imagine the ensuing tyranny.
sezs will dilute all existing environmental laws of the country.
The government can sell barren, pasture and reserved forest land at minor cost to set up sezs with aim of earning foreign exchange. The sez developer can then sell of this land without paying stamp duty and government taxes. That means that s ez development committees can buy barren, pasture lands at a very low price and then sell them at a very high price. All this runs against the principles of local government.
The development committee of the sez is above all. There is nothing on how to challenge this provision of the Act. In our view, this is a new form of the East India Company establishment.
It is high time to evaluate benefits of sezs against the tax relief accorded to it by the state and central government. It's also time we measure the benefits of these zones against the harm done to those who will lose their lands and pasture. How much harm will we do to the environment by giving reserved forests and areas under the coastal regulation zone to sezs? How much will the rupee gain against it? Can we allow foreign profit at the cost of pasturelands and forestlands? Is it morally right to earn foreign exchange at the cost of human rights? What would happen of the rich forest that is sold? Finally, would this development sustain when we become victims of nature's anger?
It is high time one does a thorough ecological and economic analysis.