text:
Slow-moving storms that deluge coasts may be latest hazard of climate change
Source(s): Thomson Reuters Foundation, trust.org (TRF)
By Jennifer Hiller and Devika Krishna Kumar
HOUSTON/MOBILE, Ala.- For Grant Saltz, who runs a barbecue restaurant in Mobile, Alabama, what struck him about Hurricane Sally was its steady, deliberate pace, after the storm rumbled into the U.S. Gulf Coast on Wednesday as a powerful Category 2 hurricane.
"It's so slow, this one," said Saltz, 38, while clearing away tree branches during a pause in the rains. "We had strong winds for a long period of time. Instead of a few hours, we got it for 12 hours."
Sally is not the most powerful storm to batter the U.S. Gulf Coast in recent memory, but its glacial pace is becoming a regular feature of the deadly storms, which many scientists attribute to climate change. The storm has already dropped more than 18 inches (46 cm) of rain in the last 24 hours, with more rainfall looming, the National Hurricane Center said.
At one point during its approach, Sally was moving at a mere 2 miles per hour (3.2 km per hour), recalling Hurricanes Harvey in Houston in 2017, Florence in the Carolinas in 2018, and Dorian in the Bahamas in 2019, massive weather systems that parked over land and dumped rain that had to be measured in feet instead of inches.
A 2018 study found that tropical cyclone speed has decreased globally by 10% since 1949 as the atmosphere warms, which increases the chance that drenching rain inundates the coastline, said Jennifer Collins, a professor in the school of geosciences at the University of South Florida.
"These North Atlantic hurricanes are increasingly likely to stall near the coast for many hours," Collins said.
The connection to climate change is not settled, but there is evidence that a warming Arctic weakens the winds that can help move a hurricane along its track or push it into the Atlantic away from land, said Jim Kossin, climate scientist with the National Oceanic and Atmospheric Administration who authored the 2018 paper and others on the topic.
The result can be a storm like Sally "that tracks into a stagnant area and there's no steering flow and it just sits there," Kossin said.
The slow storms worry scientists given how busy 2020's hurricane season has been. The Atlantic basin has seen eight hurricanes already, a milestone reached at this point just three times in the past - in 1893, 2005 and 2012, said Phil Klotzbach, atmospheric scientist at Colorado State University.
The National Hurricane Center is monitoring four storms now - Sally, Paulette, Teddy and Vicky, with another system in the southwestern Gulf of Mexico possibly becoming a depression in the next several days.
The popular focus on the Saffir-Simpson Hurricane Wind Scale, which ranks hurricanes on a 1 to 5 rating based on sustained wind speed, "doesn't take into account the storm surge and the rainfall flooding," Collins said, which is usually more deadly than high winds.
Questions about storms and climate change first emerged 15 years ago during Katrina in New Orleans, and people were "extremely cagey about those answers," said Kim Cobb, climate scientist with Georgia Tech.
Hurricane Harvey overwhelmed the city of Houston with rain for several days and turned highways into tidal rivers as the wettest ever tropical cyclone to hit the United States. Sally has not been as bad, but the extent of the rain still surprised residents.
"No one expected it to be this bad," said Cody Phillips, who manages De Soto's Seafood Kitchen in Gulf Shores, Alabama, and a lifetime Alabama resident. "It's because it stalled. If it had just passed through, we would've been fine."
Human-caused warming will cause more slow-moving hurricanes
Hurricanes: Stronger, slower, wetter in the future?
Future Texas hurricanes: Fast like Ike or slow like Harvey?
Climate Change Risk Identification & Assessment Cyclone United States of America
Publication date 16 Sep 2020


text:
What is the future of dance music media?
On a local scale, the closure of the much beloved long running dance music blog inthemix has played its part to signal the anxious flux of dance music media. Integrating with Junkee Music under the wider umbrella of Junkee Media, it was odd to see what was once a dance music media bible, undeniably influential on the Australian media landscape, be submerged into the overarching digital media void. Paired with the majority of big media being either heavily questioned ("˜fake news style) or altogether discarded in favour of citizen journalism and tweets, achieving longevity in the media, let alone dance music media, seems to be becoming an increasingly difficult task. With a globally increasing penchant for streaming, the increasingly dominant integrations of social media and an industry-wide rush to innovate, one wouldnt be misplaced to ask, whats the future of dance music media?
It seems pretty safe to say that if you want to be a major outlet and youre not interested in moving beyond your general review and opinion piece model, you may run into issues. Look at any major music media brand and the need to expand has been absolutely imperative. Charlotte Cijffers can speak to this from two ends of the spectrum. Brisbane born and now living in London, Charlotte is the founder of the online music magazine Chase the Compass and is also the Digital Editor of DJ Mag, one of the few music media outlets that, amazingly, still has a print edition. "DJ Mag UK and North America print monthly editions in each of their territories, while DJ Mag Ibiza and Croatia both print two seasonal issues per year.", she explains, as well as pointing to the cornerstone monthly UK mag and beyond. ""¦digital licensee worldwide include operations in Japan, Korea, China, Brazil, France, Italy, Spain and many more."
Her other brand has had quite a different evolution. "Chase The Compass started as a blog seven years ago but has evolved into an events company running parties in London, New York, Barcelona, Sydney, Dublin and more." This evolution has undoubtedly become key to their longevity, and more importantly, their expansion. "Doing parties has been an extremely important in the evolution of the brand as its given us a chance to meet our readers and community "" and get real time feedback on line-ups, venues and content. Were also about to open a for-hire music studio in North London."
Mixmags Lab series is another example of brand evolution, this time penetrating the social media streaming sphere. A quick scroll through Mixmags Youtube channel will see some of the worlds finest acts curating their ultimate mixes, with talent ranging from The Black Madonna to Carl Craig and Peggy Gou, each easily hitting over 50k views a pop. Although this project seems to have solidified the brand into the invaluable social media sphere, it emerged from a simple office tradition. "The Lab was never about elevating our own brand but was set up to showcase the artists, music and events that we feature," explains Mixmags Managing Editor Nick Stevenson. "The Lab was actually born from DJs playing in our office each Friday, which has been happening regularly since 2002. When YouTube asked us to become their Original Content Provider for dance music in 2012 we were able to bring in the technology to start streaming it worldwide. Now we do this weekly from London, LA and New York."
As live streaming as a communicative format takes more of a centre stage in our culture consumption, its also important to consider as a media maker how you might navigate this social sphere and how willing you may be to adapt. "From Mixmags perspective we have always had a presence on every social touch point and that adapts as socials do," Nick explains. "So weve effectively ditched Snapchat in favour of Instagram Stories, dialled back from platforms that havent picked up like Google+ and then doubled-down on a video first strategy on Facebook and YouTube."
If you never expected to have your media career funnel into parties, streaming and heavy social media integration you might be asking if theres is there still a place for the written word in this space? Theres no doubt that the internet empowered us to blog, but now that seems a little early Myspace-era to many consumers and creators. Is there still space for small and independent platforms, and are they still valued? Nick responds an unequivocal yes, even though they may only occupy niche space. "The more diversity of opinion and perspective in music journalism the better. Without the passion of some of the most (apparently) niche blogs whole genres might have withered away," he says. "Like the multitude of radio stations, podcasts, magazines or streaming channels, blogs, however their format evolves, are a resource for cutting through the mainstream noise and connecting with different audiences."
So whatever kind of content youre creating and however youre distributing it to get it seen, how can outlets maintain a relationship with their readers and followers in such a heavily saturated environment? "Carefully evaluate what your audience are asking you for," says Charlotte, "and try to deliver that in an authentic and meaningful way. Dont be scared to experiment, take risks and challenge your readership."
Nick agrees, "Adapting to how people want to receive content is a given "" but how you frame that, your tone and your authority along with your relationships and drive to bring new talent through are all key. Mixmag has been through numerous incarnations over the years but at the heart of it has always been that drive to find and point out the next exciting thing; whether its a DJ, genre, a club, a scene or an event, and share it with people who care as much about dance music and club culture as we do."
Charlotte Cijffers and Nick Stevenson will be appearing at EMC. To learn more about the dance music media and industry, check out their 2018 program here.

redpajama_set_name: RedPajamaCommonCrawl


Geneva, Switzerland, 31 January 2019 – The Next Generation Mobile Networks (NGMN) Alliance has jointly organised and executed a successful conference on Licensing Practices in 5G Industry Segments with the International Telecommunication Union (ITU), bringing various experts from around the world together to discuss licensing practices and challenges of 5G.
The conference featured moderators and speakers from some of the biggest names in telecoms, including AT&T, Deutsche Telekom, NTT DOCOMO, Orange, Ericsson, Nokia and Microsoft. Also in attendance were key stakeholders of vertical industries, including Audi, Bosch, Panasonic and u-Blox, and patent pool administrators, namely Avanci, MPEG-LA, Sisvel and Via Licensing, who co-sponsored the event, the European Telecommunications Standards Institute (ETSI), the Japanese and the European Patent Offices, and the European Commission.
Focusing on the development of 5G and the Internet of Things (IoT), the conference facilitated sharing and discussing of present-day licensing practices and related issues across different industry segments.
Patent licensing practices with interactive discussions that focused on issues stakeholders need to be aware of.
Sharing licensors', licensees' and pool administrators' requirements on patent pools/platforms.
Identifying proposed practices and conducts for licensors and licensees.
Listing requirements for increasing transparency and assessing essentiality of Standard Essential Patents declared to Standards Developing Organisations.
On a related matter, NGMN will be hosting a Press & Industry Briefing on 5G use cases beyond mobile broadband on 26th February 2019, from 11am – noon at Mobile World Congress in Barcelona, Spain. If you are interested in attending or speaking to an NGMN representative, please contact ngmn(at)proactive-pr.com.


One minute I was a courier for criminals, making ends meet so I could take care of my little brother; the next, four stunningly hot Norse gods had brought me back from the dead with wings sprouting from my back and a whole set of valkyrie powers. I guess that's just how life goes sometimes.
Too bad our victory over our supernatural enemies turned out to be a farce. The divine home I thought I'd receive is a trap instead - a trap that's slowly closing in on us, dredging up every painful moment from our pasts.
Can I trust these tempting godly men now that I've seen how many secrets they've kept from me? And what am I going to do if I have to face my own darkest horrors all over again? I'd better figure that out fast. Because I'm Aria Watson, and I will not be broken.
Wow, just wow. I wasn't sure where the story was going to go next after the first book. So happy to get more details on the God's pasta and why they are where they are. So good! So worth it!!
Book 2, story gets better!
Wow! this story is addictive! Narrators pull you in deep, bringing everything to life! The story it's self has so much detail, but I love it even more in audio form. if you enjoy RH stories this is a great one.
I enjoyed this book more than the first. More character & world building..learning more about each character & what may lay ahead. Looking forward to book 3.


Our cosmetic dentistry and specialized dentistry services can take your smile to the next level. In addition to our regular services, we offer cosmetic treatments such as Invisalign®, whitening, dental veneers, and Botox®. If you'd like to perfect your smile, then contact us today!
Over time, adult teeth can dull or discolour. As a result, many of our patients are seeking a brighter smile. That's why Sunnyside Dental offers in-office whitening that's fast and effective. With this service, you can change your smile in just a few minutes!
At Sunnyside Dental, we proudly use the Iveri™ Whitening system. For one thing, Iveri needs only one or two short, 15-minute sessions, to whiten teeth. In addition, their high quality products are safe for sensitive teeth. This adds up to quick treatments that produce dramatic results!
For the longest-lasting effects, we recommend combining a whitening treatment with regular teeth cleaning. We want to help our patients maintain those pearly whites! If you're ready for a brighter smile, then contact us to book your appointment!
As part of our cosmetic and specialty services, we provide veneers to transform your damaged teeth. Custom porcelain veneers are created to adhere to your existing teeth without invasive surgery, and can change the color, shape, size, or length of your natural teeth.
The results from veneers are outstanding, and can transform almost any smile. Veneers are long lasting and stain resistant, making them a popular choice for many patients.
Find out if veneers are right for you.
With no surgery, no recovery time, and amazing results, Botox® has become a popular treatment for men and women. Patients like Botox's ability to minimize fine lines and wrinkles. In addition, Botox® injections last 3-4 months, and often the results will be visible within a week.
The procedure is quick, comfortable, and safe. However, Botox® injections should always be performed by a trained professional, like the dentists at Sunnyside Dental. Because of their experience with dental injections and facial anatomy, dentists have become preferred specialists in Botox®. For these reasons we're proud to offer this treatment as part of our services.
When you're ready to minimize the appearance of lines, contact our team at Sunnyside Dental for your next Botox® appointment.
Snoring and sleep apnea cause health issues for millions of people. In some cases, oral appliances can alleviate or correct sleep apnea and snoring. This is why Sunnyside Dental offers custom appliances as part of our cosmetic and specialty services.
These non-invasive oral appliances, similar to mouth guards, can realign the mouth opening and create larger airways. As a result, the appliance minimizes sleep issues. In addition, oral appliances are safe and can provide a full night's rest for you and those in your home.


text:
Dead Synchronicity: Tomorrow Comes Today Review
By Josh Tolentino on November 8, 2016 in Reviews
To Be… What?
HIGH A great art style and vivid, genuinely upsetting writing…
LOW …Dragged down by frustrations that adventure games should've grown past by now.
WTF There's no ending!
Dead Synchronicity: Tomorrow Comes Today starts in the dark. This changes in short order, as players are quickly roused from slumber and move into a better-lit room, but metaphorically, the game never leaves the shadows.
Despite having a title that might imply a quotidian type of zombie shootfest, Dead Synchronicity is actually a point-and-click adventure made with an eye towards preserving old-school design sensibilities.
In this respect, it succeeds handily while not succumbing to the temptation to make playing it as tedious as the older classics could sometimes be. One might even think that the hotspot-driven navigation in Dead Synchronicity would make it a chore to play on consoles, but the PS4 version employs a convenient control scheme, using triggers and buttons to get around the inherent sluggishness of a gamepad-controlled cursor.
Unfortunately, making the interface function is often the simplest part of an adventure game. Old-school point-and-clickers were often puzzle games of a particular sort, and it's here where Dead Synchronicity trips up.
The puzzle logic is, at times, atrocious. The flow of events proceeds at a stop-and-start pace, with threads of solutions ending suddenly and without resolution, only for a needed item or a means of access to be arbitrarily dropped into players' laps once a certain point in the story has been reached. It feels like the puzzles follow internal logic that seems obvious to people who made the game, but remains obtuse to anyone else. The result? The puzzles feel like roadblocks that actively encourage players to go to GameFAQs.
This is a great shame because most of Dead Synchronicity is vividly realized through its art and writing. There's a bleak sort of beauty to the way it melds painterly backgrounds and environments with a somewhat flat style of character design. It also makes the most of a limited color palette to let a hopeless mood sink in and match the story.
And what a story it is. Dead Synchronicity's scenario is dark enough to make even Walking Dead fans squirm, and it pulls no punches. As an amnesiac named Michael, players explore the world following a mysterious apocalyptic event called "The Great Wave". Outside of destroying the infrastructure and leaving civilization largely collapsed, the disaster has left mysterious plagues and even monsters rampant, with the survivors despairing in refugee camps.
The atmosphere infuses a depressive quality to what would otherwise be run-of-the mill adventure game tasks. Sure, players might need some valuables to trade for cash or information, but the valuables might have to be stolen off a dead man's mutilated corpse, or planted to throw the heat off a pair of children that were made to commit murder…by the player. And the character with the information? A mentally ill prostitute forced into service. Yes, Dead Synchronicity goes places, and these places can be unpleasant, but engrossing, to explore.
Unfortunately, this leads me to the game's biggest disappointment — that the story doesn't end. As it turns out, Dead Synchronicity was planned as the first episode in a series. But, nearly two years on from its initial release, all players are left with is an infuriatingly abrupt stopping point. It's such an sudden termination that it wouldn't have been much worse had the game ended with "To Be Continued…"
In light of this incomplete content, the fact that it's being be sold without this information up front feels disingenuous, and prevents me from being able to recommend it to anyone. Dead Synchronicity is dead on arrival. Rating: 3 out of 10
Disclosures: This game was developed by Fictiorama Studios and published by Daedalic Entertainment. It is currently available on PC, PlayStation 4, Xbox One, Android, and iOS. This copy of the game was obtained via publisher and was reviewed on the PS4. Approximately 8 hours of play were devoted to the single-player mode, and the game was completed.
Parents: According to the ESRB, this game's rating is M, and contains violence, blood and gore, and sexual themes. The story features numerous scenes of violence and moral depravity, with some acts performed by the player character. Sexual abuse, torture, murder, are common in the scenario, though graphic representations are stylized or otherwise obscured.
Deaf & Hard of Hearing: The game features subtitles and voice acting in English.
Remappable Controls: The game contains no remappable controls.
Colorblind Modes: There are no colorblind modes in the game.
Josh Tolentino
Growing up in the Philippines, Josh's video game habit and growing love for the medium were enabled by rampant piracy lowering the price of otherwise prohibitively expensive titles. He grew to treasure dense, RPGs he never had time to play and the anime antics of Japan's gaming industry,spending time with his friends in fetid internet cafes playing custom matches of Counterstrike. He would later discover and grow to love more persistent online games, and wrote his college thesis on the players of MMORPGs like World of Warcraft and Ragnarok Online.
Today he continues to write for a living while trying to turn his fledgling knowledge of Japanese into a marketable skill. He is Managing Editor of Japanese culture site Japanator and is a Contributing Editor for Destructoid. He has written for The Escapist, The California Literary Review, Esquire Magazine, and proudly holds the badge as the premier apologist for Star Trek Online.
Latest posts by Josh Tolentino (see all)
Danganronpa Decadence Review - December 16, 2021
ALTDEUS: Beyond Chronos Review - October 15, 2021
Airborne Kingdom Review - February 17, 2021
Tags: Daedelic Entertainment Dead Synchronicity Fictiorama Studios Indie Games Point And Click Games PS4 reviews Unfinished Games
Bilazaurus
Your rating is revolting. From what I've seen you reviewed a lot of J adventure games which have nothing to do with adventure games, rather interactive, by-the-rope fiction. No wonder you find it frustrating. I don't find you fit for this review.


Although the bequest motive is one of the most important theoretical extensions of the life-cycle hypothesis, few empirical studies have measured determinants of unequal estate division. We estimated whether several proxies that are consistent with exchange and altruism lead to unequal estate division using data from a longitudinal survey of deceased elderly persons linked to probate court records. Equal division was the rule-between 70 and 83% of estates were divided equally, depending on the strictness of the definition of equal division. Several measures of exchange were not significant predictors of unequal division. Two factors that are consistent with both exchange and altruism-writing the last will and testament within five years of death and having more children-predict unequal estate division. The models control for selection, because many decedents do not file a record in probate court. © 2005 by The Haworth Press, Inc. All rights reserved.


text:
package com.example.mobilesafe.engine;

import com.example.mobilesafe.receiver.AdminReceiver;

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class DealData extends Activity {

	private DevicePolicyManager mDPM;
	private ComponentName mDeviceAdminSample;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);// 获取设备策略服务
		mDeviceAdminSample = new ComponentName(this, AdminReceiver.class);// 设备管理组件

		 activeAdmin();

	}

	// 激活设备管理器, 也可以在设置->安全->设备管理器中手动激活
	public void activeAdmin() {
		Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
		intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
				mDeviceAdminSample);
		intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
				"哈哈哈, 我们有了超级设备管理器, 好NB!");
		startActivity(intent);
	}

	public void lockScreen() {
		if (mDPM.isAdminActive(mDeviceAdminSample)) {// 判断设备管理器是否已经激活
			mDPM.lockNow();// 立即锁屏
			mDPM.resetPassword("123456", 0);
		} else {
			Toast.makeText(this, "必须先激活设备管理器!", Toast.LENGTH_SHORT).show();
		}
	}

}

redpajama_set_name: RedPajamaGithub


text:
package org.mojavemvc.tests;

import static junit.framework.Assert.*;
import static org.mockito.Mockito.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.cglib.reflect.FastClass;

import org.junit.Before;
import org.junit.Test;
import org.mojavemvc.core.ActionInvoker;
import org.mojavemvc.core.ActionSignature;
import org.mojavemvc.core.ControllerDatabase;
import org.mojavemvc.core.HttpActionInvoker;
import org.mojavemvc.core.MappedControllerDatabase;
import org.mojavemvc.core.RegexRouteMap;
import org.mojavemvc.core.RoutedRequest;
import org.mojavemvc.core.ServletResourceModule;
import org.mojavemvc.tests.controllers.InterceptedController1;
import org.mojavemvc.tests.controllers.InterceptedController2;
import org.mojavemvc.tests.controllers.InterceptedController3;
import org.mojavemvc.tests.controllers.InterceptedController4;
import org.mojavemvc.tests.controllers.InterceptedController5;
import org.mojavemvc.tests.controllers.InterceptedController6;
import org.mojavemvc.tests.controllers.InterceptedController7;
import org.mojavemvc.tests.controllers.InterceptedController8;
import org.mojavemvc.tests.controllers.InterceptedController9;
import org.mojavemvc.tests.controllers.SomeStatelessController;
import org.mojavemvc.tests.interceptors.Interceptor1;
import org.mojavemvc.tests.interceptors.Interceptor1b;
import org.mojavemvc.tests.interceptors.Interceptor1c;
import org.mojavemvc.tests.interceptors.Interceptor1d;
import org.mojavemvc.tests.modules.SomeModule;
import org.mojavemvc.views.JSP;

import com.google.inject.Guice;
import com.google.inject.Injector;

/**
 * @author Luis Antunes
 */
public class TestHttpActionInvoker {

    private HttpServletRequest req;

    private HttpServletResponse resp;

    private HttpSession sess;

    private RoutedRequest routed;

    private Injector injector;

    private Map<String, Object> parametersMap = new HashMap<String, Object>();

    @Before
    public void beforeEachTest() throws Exception {

        sess = mock(HttpSession.class);
        req = mock(HttpServletRequest.class);
        when(req.getSession()).thenReturn(sess);
        when(req.getInputStream()).thenReturn(null);
        resp = mock(HttpServletResponse.class);

        injector = Guice.createInjector(new ServletResourceModule(), new SomeModule());
        ServletResourceModule.set(req, resp);

        routed = new RoutedRequest(null, null, parametersMap);
    }

    private ControllerDatabase newControllerDatabase(Set<Class<?>> controllerClasses) {
        return new MappedControllerDatabase(controllerClasses, new RegexRouteMap());
    }

    @Test
    public void testInvokeAction() throws Exception {

        String methodName = "doSomething";

        SomeStatelessController cntrl = injector.getInstance(SomeStatelessController.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(SomeStatelessController.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("test", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertEquals(1, cntrl.beforeInvokeCount);
        assertEquals(1, cntrl.afterInvokeCount);
    }

    @Test
    public void testInvokeDefaultAction() throws Exception {

        String methodName = "defaultAction";

        SomeStatelessController cntrl = injector.getInstance(SomeStatelessController.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(SomeStatelessController.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("default", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertEquals(1, cntrl.beforeInvokeCount);
        assertEquals(1, cntrl.afterInvokeCount);
    }

    @Test
    public void testInterceptors1() throws Exception {

        String methodName = "someAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController1.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController1 cntrl = injector.getInstance(InterceptedController1.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController1.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), "some-action"));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(3, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("someAction", invocationList.get(1));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(2));
    }

    @Test
    public void testInterceptors2() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController2.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController2 cntrl = injector.getInstance(InterceptedController2.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController2.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(3, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("someAction", invocationList.get(1));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(2));
    }

    @Test
    public void testInterceptors3() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController2.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController2 cntrl = injector.getInstance(InterceptedController2.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController2.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(3, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("defaultAction", invocationList.get(1));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(2));
    }

    @Test
    public void testInterceptors4() throws Exception {

        String methodName = "someAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController3.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController3 cntrl = injector.getInstance(InterceptedController3.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController3.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), "some-action"));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("someAction", invocationList.get(2));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors5() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController4.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController4 cntrl = injector.getInstance(InterceptedController4.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController4.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("someAction", invocationList.get(2));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors6() throws Exception {

        String methodName = "defaultAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController4.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController4 cntrl = injector.getInstance(InterceptedController4.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController4.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("defaultAction", invocationList.get(2));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors7() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController1.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController1 cntrl = injector.getInstance(InterceptedController1.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController1.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(3, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("defaultAction", invocationList.get(1));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(2));
    }

    @Test
    public void testInterceptors8() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController3.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController3 cntrl = injector.getInstance(InterceptedController3.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController3.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("defaultAction", invocationList.get(2));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors9() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController5.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController5 cntrl = injector.getInstance(InterceptedController5.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController5.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("defaultAction", invocationList.get(2));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors10() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController5.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;

        InterceptedController5 cntrl = injector.getInstance(InterceptedController5.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController5.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(5, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("someAction", invocationList.get(2));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(3));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(4));
    }

    @Test
    public void testInterceptors11() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController6.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController6 cntrl = injector.getInstance(InterceptedController6.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController6.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(1, invocationList.size());
        assertEquals("defaultAction", invocationList.get(0));
    }

    @Test
    public void testInterceptors12() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        when(req.getParameter("actn")).thenReturn("some-action");

        List<String> invocationList = new ArrayList<String>();
        InterceptedController7.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;

        InterceptedController7 cntrl = injector.getInstance(InterceptedController7.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController7.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(1, invocationList.size());
        assertEquals("someAction", invocationList.get(0));
    }

    @Test
    public void testInterceptors13() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController8.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;
        Interceptor1c.invocationList = invocationList;
        Interceptor1d.invocationList = invocationList;

        InterceptedController8 cntrl = injector.getInstance(InterceptedController8.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController8.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(9, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("interceptor1c-beforeAction:req:resp:sess:someService", invocationList.get(2));
        assertEquals("interceptor1d-beforeAction:req:resp:sess:someService", invocationList.get(3));
        assertEquals("defaultAction", invocationList.get(4));
        assertEquals("interceptor1c-afterAction:req:resp:sess:someService:ok", invocationList.get(5));
        assertEquals("interceptor1d-afterAction:req:resp:sess:someService:ok", invocationList.get(6));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(7));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(8));
    }

    @Test
    public void testInterceptors14() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController8.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;
        Interceptor1c.invocationList = invocationList;
        Interceptor1d.invocationList = invocationList;

        InterceptedController8 cntrl = injector.getInstance(InterceptedController8.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController8.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(9, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("interceptor1c-beforeAction:req:resp:sess:someService", invocationList.get(2));
        assertEquals("interceptor1d-beforeAction:req:resp:sess:someService", invocationList.get(3));
        assertEquals("someAction", invocationList.get(4));
        assertEquals("interceptor1c-afterAction:req:resp:sess:someService:ok", invocationList.get(5));
        assertEquals("interceptor1d-afterAction:req:resp:sess:someService:ok", invocationList.get(6));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(7));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(8));
    }

    @Test
    public void testInterceptors15() throws Exception {

        String methodName = "defaultAction";

        List<String> invocationList = new ArrayList<String>();
        InterceptedController9.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;
        Interceptor1c.invocationList = invocationList;
        Interceptor1d.invocationList = invocationList;

        InterceptedController9 cntrl = injector.getInstance(InterceptedController9.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController9.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), "")).thenReturn(
                db.getInterceptorsForDefaultAction(cntrl.getClass()));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("defaultAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(11, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("interceptor1c-beforeAction:req:resp:sess:someService", invocationList.get(2));
        assertEquals("interceptor1d-beforeAction:req:resp:sess:someService", invocationList.get(3));
        assertEquals("beforeAction", invocationList.get(4));
        assertEquals("defaultAction", invocationList.get(5));
        assertEquals("afterAction", invocationList.get(6));
        assertEquals("interceptor1c-afterAction:req:resp:sess:someService:ok", invocationList.get(7));
        assertEquals("interceptor1d-afterAction:req:resp:sess:someService:ok", invocationList.get(8));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(9));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(10));
    }

    @Test
    public void testInterceptors16() throws Exception {

        String methodName = "someAction";
        String action = "some-action";

        routed = new RoutedRequest(null, action, parametersMap);

        List<String> invocationList = new ArrayList<String>();
        InterceptedController9.invocationList = invocationList;
        Interceptor1.invocationList = invocationList;
        Interceptor1b.invocationList = invocationList;
        Interceptor1c.invocationList = invocationList;
        Interceptor1d.invocationList = invocationList;

        InterceptedController9 cntrl = injector.getInstance(InterceptedController9.class);
        Set<Class<?>> controllerClasses = new HashSet<Class<?>>();
        controllerClasses.add(cntrl.getClass());
        ControllerDatabase db = newControllerDatabase(controllerClasses);

        FastClass fastClass = FastClass.create(InterceptedController9.class);
        int fastIndex = fastClass.getIndex(methodName, new Class<?>[] {});
        ActionSignature sig = mock(ActionSignature.class);
        when(sig.fastIndex()).thenReturn(fastIndex);
        when(sig.parameterTypes()).thenReturn(new Class<?>[] {});
        when(sig.methodName()).thenReturn(methodName);
        when(sig.getArgs(parametersMap, req.getInputStream())).thenReturn(new Object[] {});
        when(sig.getInterceptorClasses(db, cntrl.getClass(), action)).thenReturn(
                db.getInterceptorsForAction(cntrl.getClass(), action));

        ActionInvoker invoker = new HttpActionInvoker(req, resp, db, routed, injector);

        JSP view = (JSP) invoker.invokeAction(cntrl, sig);

        assertNotNull(view);
        String var = (String) view.getAttribute("var");
        assertEquals("someAction", var);
        assertEquals(req, cntrl.getRequest());
        assertEquals(resp, cntrl.getResponse());
        assertEquals(sess, cntrl.getSession());
        assertNotNull(cntrl.getSomeService());
        assertEquals(11, invocationList.size());
        assertEquals("interceptor1-beforeAction:req:resp:sess:someService", invocationList.get(0));
        assertEquals("interceptor1b-beforeAction:req:resp:sess:someService", invocationList.get(1));
        assertEquals("interceptor1c-beforeAction:req:resp:sess:someService", invocationList.get(2));
        assertEquals("interceptor1d-beforeAction:req:resp:sess:someService", invocationList.get(3));
        assertEquals("beforeAction", invocationList.get(4));
        assertEquals("someAction", invocationList.get(5));
        assertEquals("afterAction", invocationList.get(6));
        assertEquals("interceptor1c-afterAction:req:resp:sess:someService:ok", invocationList.get(7));
        assertEquals("interceptor1d-afterAction:req:resp:sess:someService:ok", invocationList.get(8));
        assertEquals("interceptor1-afterAction:req:resp:sess:someService:ok", invocationList.get(9));
        assertEquals("interceptor1b-afterAction:req:resp:sess:someService:ok", invocationList.get(10));
    }
}


text:
Буднік Євген Віталійович — український футболіст, півзахисник «Ворскли».
 Буднік Олександр Олександрович — солдат Збройних сил України, учасник російсько-української війни.
Прізвища

redpajama_set_name: RedPajamaWikipedia


This entry was posted in Dogs and tagged dogs, Hiking, pit bull, rescue by hikenoworklater. Bookmark the permalink.
I am SO GLAD you opted to adopt a Pit Bull ! I did the same unexpectedly last year and that is the topic of my blog. He is pretty athletic as well and was my running partner, but cruciate ligament damage has made us scale back on some activities. It is a very common problem in bully types I have since found out. Enjoy your new family member!
Thanks for the information about cruciate ligament damage, I started doing some research on it and definitely need to do a little more as Dakota is so active. Do you have any suggestions for preventative care?
Wow – so hard to pinpoint as you know our breed is so boisterous! But I would definitely do Chondroitin, and also 1000 mg fish oil (can be the type for humans). I really hate to curb any play, but avoid large drop jump jumps or extreme jumping up. And you might ask your vet when you next go in to just palpate your pit's knee region. Mine could tell just from feeling around that something was wrong….no X Ray was needed. Best of luck!
Oh – and weight management helps as well. Ca$h was very 'healthy " if you know what I mean and we dropped 3 pounds….


text:
Q: grpc service (.net5) can not be remote debugged due to missing w3wp I am getting my hands dirty with gRPC and meeting some issues debugging it as follows:
I have a Solution with multiple projects, relevant one is a .NET5 with installed packages:
Nugets
So it even has a reference to another project(.NET Standard 2.1) where my DBContext lives, but i guess this is not relevant.
The project is pretty much the templated one and runs without any problems as far as I can see! This means I can start and debug it at my local machine.
Now I want to deploy it to my azure app service, where I saved a connection string or better said a reference to this string living in a key vault. I can deploy without problems and it runs, shows up the page with the response that is templated: "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"
What I can not do, but really want to do is to remote debug this project! What have I done:

*

*Deployed project from VS successfully

*Cloud Explorer, picked App Service, Attach Debugger and Exception:
A process named "w3wp" with arguments "XYWebApp" was not found. The process may still be starting. Please try again.
As I said: It is running and showing up the Response after deploying and starting the app service... AND it works local!
Azure Service is configured with HTTP2, allow Remote debugging and my VS 2019 Version as IDE. After this error app service is still running. Did i miss some configuration at service side?
Thank you very much!

redpajama_set_name: RedPajamaStackExchange


text:
You are here:Business Operations
Tommy's green jeans: inside Hilfiger's denim innovation hub
29 January 2019 By Emily Sutherland
Drapers goes inside the production centre Tommy Hilfiger argues will make it the master of denim
Tommy Hilfiger has some very big ambitions when it comes to jeans. The US label is focusing on innovation to achieve its self-set goal of becoming a global leader of all things denim – and it has something of an ace up its sleeve.
At the Amsterdam headquarters of Tommy Hilfiger owner PVH, which also owns Calvin Klein, staff in white coats are bustling around its denim-focused production hub.
The PVH Denim Center, which opened last month, is intended to help create faster, more consistent and more sustainable jeans manufacturing. Daniel Grieder, chief executive of Tommy Hilfiger Global and PVH Europe, says it will allow Tommy Hilfiger to "reimagine production processes in terms of innovation and sustainability."
Sub-label Tommy Jeans (which rebranded from Hilfiger Denim at the end of 2017) is launching 100% recycled-cotton denim styles, including on-trend "mom" jeans and an oversized trucker jacket, for spring 19. Leftover cotton salvaged from cutting tables and factory floors has been used to create the range, which will become a permanent part of the collection each season. Threads used in the range come from recycled plastic bottles, and buttons are from previous seasons' unused stock.
Meanwhile, traditional "dry" processes to finish denim products – pre-wear, whiskering, holes and so on – have been replaced with laser technology. This is more sustainable, as no chemicals, water or stones are used in the process, and no dust is created. It is also quicker – finishing a pair of jeans using lasers takes under two minutes, compared with up to 40 minutes of hand scraping.
A host of different technologies are also used at the centre to wash jeans – create the desired shade. Nebulisation technology, which uses minuscule "nano-bubbles" to dye, soften and tint garments, saves up to 70% of the water and chemicals used in standard methods. Ozone gas gives jeans a faded effect without using traditional chemicals and lightens indigo in 15 minutes, compared with 45 minutes using chemicals and stone-washing.
To take these methods further, Tommy Hilfiger's network of global suppliers, which includes partners in Turkey, Tunisia, China, Vietnam and Bangladesh, are required to invest in the technologies on offer at the PVH Denim Center to achieve the same results at scale.
Brand boost
The brand also hopes that the PVH Denim Center will increase speed to market and help create exceptional fit. At its denim atelier, patterns are created digitally and then used in house to create a prototype. The sample is then tried on by a fit model. Any tweaks and changes are made digitally, and another sample is produced – until the desired fit is achieved. The full process takes 48 hours, and the master fit pattern is then shared with suppliers digitally.
Previously, patterns were created in house and then sent to external partners to make into prototypes, and the resulting samples were sent back in four to six weeks. The old process, PVH argues, was both longer and more vulnerable to inconsistencies, as different partners ended up with their own take on the perfect fit.
Tommy Hilfiger believes strongly that its customers do want to know where their jeans are coming from, and expects 3D design in pattern creation to cut down on waste and speed up design process still further over the next couple of years. The commitment to innovation, and particularly to sustainability, on display at the PVH Denim Centre is a sign that a being open to new ideas will help the denim industry clean up its act.
Denim by numbers
Tommy Hilfiger creates 7 million pairs of jeans worldwide each year
PVH produces 15 million pairs of jeans per year globally
It takes 90 seconds to finish jeans by laser
Tommy Hilfiger aims to produce 50% of its denim with less water, chemical use and energy by 2020
Daniel Grieder Chief executive, Tommy Hilfiger Global and PVH Europe
Why is denim so integral to Tommy Hilfiger? The very first product Hilfiger sold was denim, so it is part of the heritage of our brand. Denim is never out of style – it might have moments when it is more or less popular, but it will always there. We must keep innovating to ensure that denim remains relevant. It's our dream to be the leader in denim and to become that, you must have the right set-up, you have to test things, you have to look at things in a different way.
How do you plan to make the brand a global denim leader? Consistency in our product is so important. The end customer wants to buy jeans in the same size they bought last time, and if they are always having to try different sizes, they don't like it. Creating a consistent denim product is actually quite complicated to achieve, because of the different washes, finishes and fabrics. Circularity is also key. You have to get more sustainable, because the end consumer wants to know where and how their products are produced. And you have to tell a story. It isn't enough to say: "We sell denim and our denim is cheaper than someone else's."
Do consumers care about sustainability? The end consumer is dictating what we need to do and, to me, there is no question that they do care about sustainability. That's good. The world has to get better. People want to know what they're wearing and they want transparency. I've seen how denim used to be produced in the past and the amount of water and resources used was crazy.
What challenges do you face when it comes to working sustainably? It is still a challenge to find the right vendors and right new technology. The machines we're using are advanced and we didn't find them overnight. You have to look all over the world to find the right answers. You also have to find partners who can look outside of the box – some of them will still say: "Why do we have to change?"
Levi's: the making of a $6bn brand
18 March 2019Ana Santi
If ever the fashion industry needed proof of the power of storytelling to sell clothes, then Levi's is it.
British fashion's £5.5m industrial action
25 February 2019Kirsty McGregor
A new £5.5m research programme aims to improve speed, productivity and sustainability in the UK's clothing supply chain.
Retailers admit 'more to do' on sustainability
19 February 2019Jill Geoghegan
UK and Irish retailers have said they are committed to tackling sustainability in fashion and admitted there is "more to do" following criticism by MPs.
Inside Bruce Pask's shop-in-shop at Bergdorf Goodman
8 February 2019Emily Sutherland
Bruce Park, Bergdorf Goodman's influential men's fashion director, unveils his new shop-in-shop, B, within the New York institution.
First look: inside Adidas's 'high street HQ' flagship
24 October 2019Harriet Brown
With cleverly embedded digital tech and a swish design, Adidas's new flagship store on London's Oxford Street is a dazzling display of retail theatre.
Green light for British Land's Canada Water development
1 October 2019Grace Whelan
British Land's master plan for a new 53-acre town centre at Canada Water has been granted planning permission by Southwark Council Planning Committee.
Amazon ups the ante on fashion
5 December 2019Emily Sutherland, Photography by Roger Bool
John Boumphrey, vice-president of Amazon Fashion Europe, plans to make the ecommerce giant "customers' most-loved fashion destination"
In Business Operations


text:
SACPA Southern Alberta Council on Public Affairs
Meet Location
Country Kitchen Catering
Session Audio
Audio Track 1
Water Under Fire
Participation in Land Use Planning: When you have a say and when you don
The Return of the Trojan Horse: Alberta and the New World (Dis)Order
Oldman Watershed: Finding the Balance
Biogas Technology: Opportunities and Challenges in Southern Alberta
Can Private Land Conservation Maintain Biodiversity?and Healthy Watersheds in Alberta's Foothills?
February 1, 2018 :: Justin Thompson
Moderated by Cheryl Bradley
Maintaining healthy landscapes has benefits that extend well beyond the boundaries of a given property. These ecological services include things like water filtration and storage, healthy wildlife populations, and aesthetic values which support tourism and the preservation of our heritage. The economic value of these ecological services is enormous and once compromised they are often irreplaceable. In southwest Alberta a significant portion of the lands that provide these important ecological services are private lands.
As our population grows, so does the demand for these services. And while demand continues to grow, the intact land base that provides these services is shrinking. Based on historic rates, "business as usual" will see much of the private land in our foothills developed over the next 50 to 100 years. This is occurring through a continual process of subdivision, road and residential development, and industrial activity. The result will be further loss of iconic vistas, fresh water, wildlife, and the working ranches of our foothills communities.
This ever-expanding human footprint in rural areas will also have measurable impacts on resources that we rely on in neighbouring communities, such as clean water. The speaker will argue that protection of private lands in the Oldman River Watershed is crucial to the health and economic well-being of rural communities but also all downstream including Lethbridge. He will also highlight many of the exciting initiatives that are going on not only to increase awareness but also to protect valuable areas in the watershed.
Speaker: Justin Thompson
Justin is the Executive Director of Southern Alberta Land Trust Society (SALTS). He spent much of his childhood and youth exploring the foothills of southern Alberta, including his family's ranch land west of Pincher Creek. This clearly influenced his decision to pursue a B.Sc. in Biology and a Master's in Public Administration, with an eye to influencing a change in environmental practices.
Justin got to know SALTS when he started looking for options to preserve wildlife habitat and watersheds on his own land. He, along with his family and several of their neighbours, ended up doing conservation easements with SALTS. His positive experience with SALTS and his passion for preserving Alberta's natural landscapes led to him working full time on private land conservation.
Prior to SALTS, Justin had a varied career in wildlife conservation, renewable energy development, and his own energy efficient home-building business. He also continues to run a small cow/calf operation on his land in partnership with a local rancher. This combination of experiences is helpful in his role as he directs and implements the work of the organization.
Moderator: Cheryl Bradley
Date: Thursday, February 1, 2018
Time: Noon - 1:30 pm
Location: Country Kitchen Catering (below The Keg restaurant) 1715 Mayor Magrath Drive South
Cost: $11 lunch (hearty soup & bun, desert & coffee/tea) or $2 coffee/tea. RSVP not required
Share URL: http://sacpa.ca/1312m
SACPA Meetings
SACPA meets every Thursday from 12 noon – 1:30 pm September to June at the Royal Canadian Legion Hall (north door), 324 Mayor Magrath Dr. S. The Council also holds special sessions, usually in the evening and often at the Lethbridge Public Library or U of L. Everyone is welcome.
Enjoy the benefits of membership and feel great about lending your support to SACPA.
To contact us by mail write:
SACPA
T1J 0N0
Content Copyright SACPA 2010
Powered By Tangle Media


text:
Gastro Obscura
Il-Barri Air Raid Shelter
L-Imġarr, Malta
Hidden beneath a restaurant, underground tunnels tell the story of Malta's tragic role in World War II.
The air raid shelter corridor. chrissycassar (Atlas Obscura User)
The school room. chrissycassar (Atlas Obscura User)
Rabbit stew in a traditional clay pot chrissycassar (Atlas Obscura User)
A gas mask. chrissycassar (Atlas Obscura User)
prakva (Atlas Obscura User)
Top Places in Malta
Casa Rocca Piccola
Maltese Catacomb Complexes
Rabat, Malta
Ħal Saflieni Hypogeum
Paola, Malta
Sitting next to the large domed church in the Maltese town of Mgarr, Il-Barri serves up traditional dishes such as rabbit fried in garlic or wine and horse meat stewed in a rich sauce. But there's more to this restaurant than its menu. At the back, a stone staircase leads to a dark, underground maze where families hid from bombs during World War II.
The tiny Mediterranean island of Malta, a crucial base for British air and sea forces, was one of the most bombed parts of Europe in the war. During a period of sustained bombardment, 6,700 tons of bombs were dropped over 154 days and nights. Many of the inhabitants, particularly those who did not work for the British military, were forced underground into air raid shelters.
It is not known how many of these shelters exist across the islands of the Maltese archipelago. Many started out as wells or storage areas, and after the end of the war, many were closed off or returned to their prewar use. Some were constructed for communal use; others were owned by individual families. Still, groups of families came together and shared these spaces. Those who lived in the harbor areas, which were the most heavily bombarded, often fled inland to the houses and air raid shelters of distant family members or friends, and were called (since they were out-of-towners) refugees.
The air raid shelter at Il-Barri was, like most others, dug out by hand. The walls are rough and still show the markings of the pickaxes that were used to create this underground refuge. There is a central corridor leading all the way down to the end, with small rooms on both sides, and, uniquely, an exit to ground level at each end.
The individual rooms were used by the families that could afford them, while others had to find some space for themselves and their families in the corridors, having brought with them whatever they could grab once the warning sirens went off. Other rooms had a particular purpose (a schoolroom, a chapel). Each room hints at the lives lived, loves lost, childhoods missed, and prayers made in a time when hiding underground was necessary for survival.
The air raid shelter is open for visitors Tuesdays to Saturdays between 9am and 1pm, and Sundays and holidays between 10am and 11:30am. A reservation at the restaurant is not necessary to visit the air raid shelter.
Gastro Obscura: A Food Adventurer's Guide
Introducing the definitive guide to the world's culinary wonders. Covering all seven continents, our new book serves up a loaded plate of incredible ingredients, food adventures, and edible wonders.
refugees bombs underground Unique Restaurants & Bars world war ii military
chrissycassar
prakva
Triq IL-Kbira
L-Imġarr
Binġemma Troglodyte Settlement
Ta' Bistra Catacombs
Mgarr, Malta
Enigmatic tombs and cave dwellings on the outskirts of a rural village.
Burial grounds for more than 1,000 bodies deep under the modern town of Rabat.
Il-Mosta, Malta
These lesser-known Maltese catacombs date back over 1,700 years.
Mdina, Malta
Jesus Tree of Malta
The Jesus tree of Malta bears a striking resemblance to Christ on the cross.
Darwin, Australia
Darwin Oil Storage Tunnels
World War II ended before these tunnels built to protect vital oil from Japanese bombs were ever used.
Wiernsheim, Germany
Bomb Bell Memorial
This bomb was once used as a church after it failed to detonate.
Li Po Cocktail Lounge
One of the last remnants of the city's Chinese nightclub scene is now a dive bar selling killer mai tais.
Central Café and Restaurant 1887
Some of the greatest minds in the history of Hungarian art and science converged in this café.