Your user researcher will help you to understand your users. So your team design the right service in the right way to meet your user needs.
Your user experience designer cares about how your service is laid out. They are in charge of designing each screen or page to visually communicate the path for a user to follow.
Your content designer is responsible for the content in your service.


That is why Wood carries out a comprehensive research on the reorganization of American society that had taken place since the War for Independence.
The Declaration of Independence was proclaimed in Philadelphia on July 4, 1776, when the American colonies were fighting for independence against England.
Where and when the declaration of Independence was proclaimed?
And with room for up to 512-MB of ECC (Error Checking and Correcting) RAM, the ALR Revolution MP II+ has the memory expandability and integrity these operating systems demand.
Racial grouping is one way that societies have done this, the example is the American South before the US civil war.
For instance, a well-known movement the Fronde called for "a revolt rather than a revolution", and this claim was quite popular among nobles at that time.
Revolution remains a better choice for improvements and changes.
The Americans began to fight for their independence and got it.
From 1775 to 1783 the war for independence of American colonies from British rule lasted.
Now we"ll see a person who really lived and fought for Scotland and its independence with the English.
They did not want Edward to be their overlord and began to fight for their independence.
In the battle near a place called Bannockburn the Scots won the independence of their country.
1920's and 1930's, the Soviets called for world revolution and the destruction of capitalism, the economic system of United States.
His pamphlet "Common Sense" (January 1776) did much to influence the colonists to declare their independence.
After the American Revolution, and increasingly after the War of 1812, American writers were exhorted to produce a literature that was truly native.


Spring may not yet have sprung in New York City, but Easter is just around the corner. Forget unpacking the winter sweaters you're storing in your oven to try and make a festive frittata and book one of these celebratory Easter brunches around NYC on April 1.
A special Easter cocktail, the Roger Rabbit (made with Smith & Cross rum, lemon, creme de cassis, sugar, nutmeg) will accompany brunch specials like a smoked Wagyu brisket Reuben, Hungarian potato fry bread with smoked salmon and avocado as well as mix & match wood-fired pizza with toppings ranging from an Al Pastor with grilled pineapple, slow-roasted pork and tomatillo salsa to Fontina and Brussels sprouts with mascarpone-fontina bechamel, pear and a runny egg.
Go for an à la carte brunch Easter Sunday in a Parisian-inspired dining room. Dishes will include Dutch babies in sweet (seasonal fruit, maple syrup, lemon) and savory (rosemary ham, bechamel, gruyere cheese) variations to be paired with homemade Bloody Marys.
Jose Garces' Basque-inspired Ortzi will offer a 3-course Easter Brunch ($45 per adult/ $30 per child). Dishes will include a classic Tortilla Española, i.e. a Spanish potato omelet, Spanish-style shrimp eggs Benedict, buttermilk fried chicken with paprika honey and chocolate ricotta pancakes with hazelnut praline and Vermont maple syrup.
Chef Alfred Portale has designed a three-course Easter meal for $75 ($35 for kids). Menu highlights include a spring risotto with asparagus and English peas, Belgian waffles with raspberries, orange marmalade, bourbon maple syrup and creme chantilly as well as heartier dishes like Maine lobster Tagliatelle and rack of lamb with swiss chard.
Chef-owner Roxanne Spruance has created four-course Easter brunch menu incorporating early spring ingredients for $75 per person. Starters will include rhubarb muffins or spring onion hash, followed by entrees like honey-glazed stuffed pork loin and eggs Benedict with lobster.


text:
FBI shutters $14m major click-jacking fraud; 4 million computers affected
A massive click-jacking fraud led millions of users being served ads when seemingly accessing popular websites, which raked in over $14 million in online advertising revenue.
Written by Zack Whittaker, Writer-editor
Zack Whittaker Writer-editor
Zack Whittaker was the security editor for ZDNet.
Posted in Between the Lines on November 9, 2011 | Topic: Hardware
The FBI has been successful in closing a botnet of four million infected computers that led to a DNS malware scam, raking in over $14 million from online advertising clicks along the way.
The two-year investigation -- dubbed 'Operation Ghost Click' -- found that hackers were paid for the number of times users clicked on links from adverts, or how often adverts were displayed on sites, officials said.
Using malware known as 'DNSChanger', forcing machines to rely on rogue DNS servers, hackers pointed web searches to fraudulent IP addresses for over 15,000 domains.
This resulted in many popular websites, from iTunes to Amazon, not displaying the content that was meant to, and instead large advertisements were displayed, or rerouted to money-generating sites. The malware also prevented access to anti-virus sites to prevent the removal of the malware.
Both PCs and Macs were infected, The Register said. The BBC meanwhile said that the case was thought to be the "first case of its kind" because the suspects had set up their own DNS servers, rather than relying on infected others.
According to Trend Micro, on 8th November, the botnet was taken down with industry partners, including the anti-malware company, and the FBI after datacenters in New York and Chicago were raided. Thought to be the biggest cyber-criminal takedown in history, the scheme was thought to have been discovered over five years ago,
Seven men, including six Estonians and one Russian, who remains at large, were charged for the fraud which spread to more than 100 countries, and infected even high level government networks like NASA. Reports show that NASA was the first to discover the malicious software.
Estonia's embassy in the U.S. worked closely with the FBI on the investigation that led to the arrest.
In April 2007, a cyberattack on Estonia's critical national infrastructure shut the country down for days; an attack that was blamed on Russia. Russia denied any involvement.
Government: Estonia reeling from massive cyberattack from Russia
Zero Day: Massive DNS poisoning attack in Brazil serving exploits and malware
New Mac OS X DNS changer spreads through social engineering
Networking: DNS hack attack mutilates multiple Web sites
Government | PCs | Servers | Storage | Networking | Data Centers
Join Discussion for: FBI shutters $14m major click-jacking fraud;...

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Pandas: replacing nan values conditionally within a group I  have a dataframe with missing values. for each index in a column group, i want to replace these values seperately. If all of the values in a group are missing, i want to replace the values with 1. If only some of the values are missing, i want to replace it with data from an imputed dataframe
dataframe 1

index
d0_1
d0_2
d1_1
d1_2

group
d0
d0
d1
d1

1
3
3
NaN
NaN

2
3
NaN
3
3

dataframe 2 (the imputed one)

index
d0_1
d0_2
d1_1
d1_2

group
d0
d0
d1
d1

1
3
3
2
2

2
3
2
3
3

output:

index
d0_1
d0_2
d1_1
d1_2

group
d0
d0
d1
d1

1
3
3
1
1

2
3
2
3
3

my data is much larger and the groups are larger as well.
Ive been struggling now with this for days, i just cant seem to find a working solution
my current solution is iterating over all the groups, and using groupby.transform to replace values, but i dont know how to tell the lambda function to take the values from my second data frame, and my current lambda function also doesnt replace all the values with 1 either, instead just returning the old groups with no changes
df1 = pd.read_csv("file.txt", sep = "\t", index_col = "T: Protein.Group")

def group(a: pd.DataFrame):
    a_grouped = a.groupby(["group"] , axis=1)
    return a_grouped

def getgroup(a: pd.DataFrame):
    new_idx = pd.MultiIndex.from_arrays([
        a.columns,
        a.columns.str.extract("(d\d+)_\d+", expand = False)
    ], names=["index", "group"])
    a.columns = new_idx
    return a

df1grp = group(getgroup(df1))

for i in list(df1grg.groups.keys())
        df1grp.get_group(i).transform(
            lambda x: 1 if x.eq(np.nan).all() else x
        )

A: IIUC:
df = df1.mask(df1.groupby('group', axis=1).count() == 0, 1)
df = df.where(~df.isna(), df2)

>>> df
index d0_1 d0_2 d1_1 d1_2
group   d0   d0   d1   d1
1        3    3    1    1
2        3    2    3    3

This is assuming the columns are indeed a MultiIndex as you describe, e.g.:
>>> df1.columns
MultiIndex([('d0_1', 'd0'),
            ('d0_2', 'd0'),
            ('d1_1', 'd1'),
            ('d1_2', 'd1')],
           names=['index', 'group'])

(I initially spent a few minutes making such columns as I thought you had simple Index columns and a first row with the 'group'...)

redpajama_set_name: RedPajamaStackExchange


text:
Barinder Sran
Full NameBarinder Balbir Singh Sran
BornDecember 10, 1992
Height1.91 m
NationalityIndian
RoleBowler / Left arm fast medium
Barinder Sran Biography
Barinder Balbir Singh Sran is an Indian cricketer, who was born on 10 December 1992. A left-arm pace bowler, he is capable of hitting huge sixes. Born in Sirsa in Punjab district, Sran has an impressive domestic record with 68 wickets in 29 matches.
Barinder received training in boxing during his childhood. Not having any previous cricketing experience at all, Sran owes his professional cricketing career almost exclusively to the Indian Premier League.
He attended a trial camp organised by Kings XI Punjab in Mohali in 2009, but was not selected. However, he impressed Punjab selectors and was called up to the state team at the age of 19.
Barinder Sran made his debut for his home side Punjab in the year 2011 against Orissa and registered three wickets in Punjab's win.
He made his ODI debut against Australia in January 2016. He took three wickets for the team, giving away 56 runs.
Sran made his T20I debut against Zimbabwe in June 2016, bagging 4 wickets for 10 runs.
After a fairly average season the brilliance of the bowler was spotted by Rahul Dravid and Sran was picked by Rajasthan Royals in the IPL 2015 auction, but played only one game that season.
The following season was a breakthrough one for Sran. He took 6 for 61 in a Ranji Trophy match against Railways, with Punjab recording a score of 604-5.
It was then followed by Barinder receiving national team call ups with him performing very well on his debuts.
His impressive performances in the international matches earned him accolades from Mahendra Singh Dhoni and Yuvraj Singh; the latter referring to him as a 'younger version of Zaheer Khan'.
Low Points
After making an impressive debut for India cricket team in Australia in 2016, the left-arm pacer suffered a stress fracture in his right foot, followed by a knee strain.
It took the 24-year old Sran almost a season to get back from his injuries, during which he missed out on a crucial domestic season with Punjab.
Sran has played for Rajasthan Royals, Mumbai Indians and Sunrisers Hyderabad in the IPL. He took 14 wickets for Hyderabad during their season winning run in 2016.
Barinder registered debut figures of 4 for 10 against Zimbabwe at Harare Sports Club on 20 June 2016, which are the best bowling figures by an Indian debutant in T20I cricket.
Sran was awarded Man of the Series as well as Man of the Match in his debut T20I against Zimbabwe for his performances.
IPL 2019: 3 Players Mumbai Indians should release before next season
How Team India is just one bowler short of becoming the best pace attack in Tests
IPL 2018, DD vs KXIP: 5 reasons why DD lost
IPL 2018, DD vs KXIP: Four best decisions from the game
BrokenCricket 2 yr
IPL 2018, DD vs KXIP: The penultimate over bowled by Barinder Sran is SK Turning Point of the match
Five Indian players who will benefit from playing in foreign T20 leagues
5 most economical bowling performances by Indians in T20Is
Injury-troubled Barinder Sran rues missing out on upcoming New Zealand series
Shardul Thakur flown to join India 'A' squad for quadrangular series in Australia
SK Cricket Olympics: Cricketers enter the ring for a bout
Decoding the selection conundrum in India's T20I squad for West Indies series
India 'A' coached by Rahul Dravid set to attend training camp in Bengaluru
Umpire Bruce Oxenford reveals how a Barinder Sran shot resulted in his 'Ox Block'
5 India A players who can make it into the Test team
5 Indian cricketers who can make it to the full-strength team based on their performances in Zimbabwe
Zimbabwe vs India 2016: 5 Records that were broken during India's tour of Zimbabwe
5 takeaways from India's tour of Zimbabwe 2016
Comic: India flex their muscles!
Zimbabwe vs India 2016 2nd T20I: Rating the Indian players
5 best bowling figures on T20 International debut


text:
Me & the Miz in Cape Girardeau (Jan. 2010)
I think few would argue that the Miz is the breakout star of 2010. At least that's how I feel about him. He's come a long way in the few years he's been with the WWE. A contestant on Tough Enough, host of Smackdown, ECW "chick magnet", tag team champion (playing second fiddle to John Morrison at the time), U.S. Champion, Mr. Money in the Bank. The Miz certainly has evolved.
As you can see in the picture, I had the chance to meet the Miz earlier this year. I must say it was one of the coolest experiences I've had. When I found out the WWE was coming back to Cape Girardeau, (a city about an hour from the station I work for, and a part of our viewing area) I inquired about any wrestlers being available for interviews. Every other time the WWE has been in town, they've said there was no one available to talk to the media. So I was stoked when the rep from the Show Me Center informed me that the Miz was going to be doing interviews that Friday afternoon.
I made the hour drive from southern Illinois to southeast Missouri, the city I knew well from my days in college. I was nervous about meeting the Miz. I had never really interview a current WWE superstar before, so I wasn't sure what to expect. Plus, what if he was like his on camera persona (a class A douche bag, but I mean that in a good way. It's his character.)
Much to my surprise, the Miz was very cool. You might even say awesome. We talked for a few minutes before the interview, he told me about his hectic schedule that day. He'd landed in St. Louis early that morning, made the two hour drive to Cape and was waiting to start the media rounds. I was up first, then he was heading to the local radio stations to promote the show that night. Then on top of that he had to wrestle on the card. Once the show was over, it was back on the road and repeat the process. He had to be exhausted. I can't imagine that kind of schedule. I'll never forget how nice he was. Here's a look at the story I did with the Miz on WSIL.
This was about two weeks after his infamous JBL promo on RAW. We talked about that and he opened up about being treated like a second class citizen in the locker. He said it made him stronger. I believe him.
I've always thought the most successful characters in wrestling are the ones who are allowed to inject some of their own personality into the gimmick. Stone Cold, the Rock, and John Cena immediately come to mind. I like how the Miz has used his early struggles in the locker room and with the "WWE Universe" to become the superstar he is today.
It's only a matter of time before he becomes the champ and proves a lot of people wrong. I was one of them. When he first arrived in the E, I had little expectations for him. When he and Morrison split, I did think he would be the "Jannetty" of the duo. Not to say Morrison won't be successful, but I see big things in the Miz's immediate future. If he stays healthy, he'll be a major player and a leader in the locker room.
No pressure, Miz. But I agree, you are awesome.
Labels: the Miz, WWE


8   2, 15  |        Augustine (De Trin. xii, 12) ascribes consent to the ~higher reason.
14   2, 45  |              Nevertheless Augustine ascribes "the avoidance ~of ambushes"
17   2, 78  |           to be observed by all, he ascribes "legislative ~justice,"
22   2, 141 | requirements, and to this Macrobius ascribes "moderation," ~Andronicus "
26   2, 156 |         Philosopher (Ethic. iv, 5) ~ascribes this to "choleric" persons: "
38   2, 182 |             hands," which the gloss ascribes to the grace of the ~episcopate.
40   3, 16  |             I, ch. 26]: ~"If anyone ascribes to two persons or substances,"
43   3, 69  |          Dionysius (Eccl. Hier. ii) ascribes ~enlightenment to Baptism.


text:
This Week's Latest News, Articles & Expert Advice
Health Risks for Overweight Cats
Americans comprise one of the fattest societies on the planet and 1 out of 3 adults is overweight or obese. These alarming statistics are also true for our pets. Obesity in pets is defined as those who weigh 20-25% above...
Hypoallergenic Cats
What is Hypoallergenic? Up to 15% of us (or some 10 million Americans) are allergic to cats, and 40% of those with asthma are sensitive to these animals. Hypoallergenic cats are believed to produce fewer allergens than other felines. However,...
Change Of Routine Can Make Healthy Cats Act Sick
A University of Ohio study has shown that healthy cats were just as likely as chronically ill cats to refuse food, vomit frequently and leave waste outside their litter box - referred to as sickness behaviors - in response to...
Top Five Cat Toxins Of 2010
While there are over 10 million more cats than dogs in the United States, dogs are far more likely to be involved in accidents or ingest inappropriate objects. However, approximately 9% of calls to the Pet Poison Helpline were regarding...
2010's Most Popular & Unusual Cat Names Revealed
Veterinary Pet Insurance (VPI) analyzed the names of the pets of more than half a million customers to come up with a list of the most popular. Unusually, the most popular two names for cats, Max and Bella, are also...
New Film Premieres Cat's Eye View
Last week, Friskies® brand cat food premiered "Cat Diaries: The First Ever Movie Filmed by Cats" and gave viewers a look into their magical world. This short film features documentary style footage taken directly from cats, who donned video cameras...
View All Cat News | Expert Cat Advice | Cat Care Articles
Latest Gallery Uploads
Browse All Cat Galleries or Upload Your Pet Pictures!
Most Popular Cat Care Articles
Kitten Kindergarten
Kitten kindergarten is the brainchild of Australian veterinary behaviorist Kersti Seksel, who opened her own "Kitty Kindy" under a decade ago for young cats aged 7 to 14 weeks. The concept has now appeared in the U.S., where in many...
Hand-Rearing Kittens: Pneumonia
The most common causes are:Aspiration pneumonia due to a kitten inhaling a substance which irritates the lungs. Usually this is milk which has "gone down the wrong way" perhaps due to inexpert hand-rearing or using unsuitable equipment. For this reason,...
View All Cat Care Articles
Latest Cat Features & Highlights
Clever Tricks For Giving Your Pet a Pill
Skin Cancer in Dogs and Cats
Tips for Keeping Your Pet Safe During Holiday Parties
Fatty Holiday Foods are a Leading Cause of Pancreatitis in Pets
The Dangers of Antifreeze for Pets
The Dangers of Hookworms and Roundworms for Pets and People
Most Popular Cat Features


5861 Osage Ave - SOLD - Holly Mack-Ward & Co.
Not all flips are created equal, and one of our favorite developer clients hits it out of the park yet again with this Cobbs Creek house. Staying true to the home's original character, this rehab provides all the creature comforts and upgrades without feeling cookie-cutter or prefab. The fresh facade and classic porchfront welcome you into an open living and dining area with pretty wide-plank hardwood floors, recessed lighting and large front window. The nicely laid-out kitchen features white quartz countertops with porcelain tile backsplash with sea glass subway tile inlay, Shaker-style cabinets and a stainless steel appliance package including Frigidaire Gallery five-burner range and Samsung French door refrigerator and bottom-drawer freezer. Don't miss the bonus living space in the finished basement, where the addition of a half bath makes it work for a guest space. There is extra storage space as well to keep bulky seasonal items out of sight. On the second floor, the master bedroom at the front of the house has a lovely bay window, new carpet that continues throughout this level and good closet space. The other two bedrooms are similar in size and have nice original five-panel doors; the rear bedroom has dual closets. There's a hall bath with porcelain tile flooring and shower surround with a pretty sea glass tile inlay, deep soaking tub and dark wood vanity. The rear yard has plenty of space for a grill and patio set and maybe even a fire pit for the colder months. In additional to all the lovely finishes, the home also has completely new mechanicals and all new windows. This fabulous house is in a convenient location near schools, SEPTA, Morris Rec Center, the Free Library and shopping centers, and just a few blocks from Cobbs Creek Park, with its biking and hiking trails, baseball, basketball and ice skating rink.


The Grand Island Community Foundation specializes in legacy philanthropy. Named funds are established to impact the areas of the community that mean the most to donors, both during and after their lifetime, and provide the opportunity for children or other loved ones to participate in a family legacy. We exist because of the amazing individuals, businesses, organizations and families who have a desire to give back to their community and leave a legacy that will impact lives for many years to come.
To view the donors that are at the center of the Grand Island Community Foundation's unique mission to provide grants, large and small, for charitable projects and programs throughout Central Nebraska, please click a fund category from the list on the right. These donors are to be commended for their generosity and support of our community.


Warsaw — The Polish government has approved a lignite strategy to develop new deposits to replace current open-pit mines that will start to become exhausted by 2030, the energy ministry said late Monday.
"Lignite resources in currently exploited deposits allow for the maintenance of a stable level of extraction and operation only until about 2030. Without the modernization of existing generating units and the development of new deposits, lignite-fired generation capacity in Poland will totally disappear in 2040-2045," the ministry said in a statement.
The ministry said the main strategic objective of the program, which was approved by the government on May 30, is to create conditions conducive to the production of electricity from lignite based on innovative and effective technologies, including the use of coal in the production of liquid and gas fuels. The program will create a ranking of deposits that have the greatest potential for development and which will become subject to protection.
In 2017, lignite-fired capacity accounted for 51.983 TWh, or 30.7% of the total 168.852 TWh of electricity generated in Poland, up 1.5% year on year and second only to hard coal which accounted for roughly 50% of total generation.
Deputy energy minister Grzegorz Tobiszowski said late Monday the development of the Zloczew lignite deposit, which is located about 60 km away from the country's 5.3 GW lignite-fired Belchatow plant, is now a question of when, rather than if. He also said discussions are taking place about developing the Oscislowo deposit near the lignite-fired ZEPAK plant.
In May, Tobiszowski said the country's largest utility, PGE, could receive an extraction license for Zloczew by the end of this year. In March, PGE received a positive environmental decision for the investment, which allows it to apply for a production license.
Zloczew contains an estimated 600 million mt of lignite. A new rail link would need to be built to transport the fuel to the Belchatow plant, which has led some market participants to cast doubt on the viability of the project.
The lignite in Belchatow's existing open-pit mines, Belchatow and Szczerow, is expected to be exhausted in the period 2032-2040. PGE commissioned an 858 MW unit at Belchatow as recently as 2011 and the company has been considering options about extending the life of the plant.
Tobiszowski said late Monday that Poland was also looking at exploiting lignite for the development of new technologies.
"Since the program was adopted by the energy ministry, lignite sector representatives have begun a lot of activity. They're talking about the gasification of lignite and accelerating the use of new technologies. We're thinking about how to use it better, to transport it better and to use it more efficiently. I think the program is a stimulus for this sector, which next to hard coal has been a little forgotten, and now it is starting to have its own impulse. That's good because we have the deposits, we have the specialists and we have the demand," he said.


text:
Q: pyautogui moveto not working(has correct coords) import pyautogui
while True:
    test = pyautogui.locateCenterOnScreen('test.png',region=[600,570,680,570],grayscale=False,confidence=.6)
    if test:
        pyautogui.moveTo(1000,1000)
        print(str(test),'found',test.x,test.y)
        break

The print statement is getting run(so its not that the if statement is not getting accessed)
Also the move to does work, if run outside of the while statement

A: With further inspection/test, visual studio code has to be run as admin in order for (moveto) to work while it's not a focused application. This said, if you are using (moveto) and visual studio code has focus, (moveto) will work.
In conclusion, run VS CODE as admin for (moveto) to work correctly.


text:
define(['jison', 'constants', 'configurationManager', 'grammarConverter', 'jquery', 'logger', 'module'],
/**
 * Generator for executable language-grammars (i.e. converted JSON grammars).
 *
 *

 * This generator uses Jison for compiling the JSON grammar.
 *
 *

 * The generator for compiling the JSON grammar definitions in www/config/languages/<language code>/grammar.json
 * can be configured in www/config/configuration.json:

 *

 * {
 *   ...
 *   "grammarCompiler": "jison",
 *   ...
 * }

 *
 *

 * jison supports grammar generation for:
 * LALR(1), LR(0), SLR(1), LL(1)
 * [and experimental support for LR(1)]
 *
 * see jison documentation
 *
 * @see https://github.com/zaach/jison
 *
 * @class
 * @constant
 * @public
 * @name JisonGenerator
 * @memberOf mmir.env.grammar
 *
 * @requires Jison
 * @requires jQuery.Deferred
 * @requires jQuery.extend
 * @requires jQuery.makeArray
 */
function(jison, constants, configManager, GrammarConverter, $, Logger, module){

/**
 * Deferred object that will be returned - for async-initialization:
 * the deferred object will be resolved, when this module has been initialized.
 *
 * @private
 * @type Deferred
 * @memberOf JisonGenerator#
 */
var deferred = $.Deferred();
//no async initialization necessary for PEG.js generator -> resolve immediately
deferred.resolve();

/**
 * The Logger for the jison generator.
 *
 * @private
 * @type Logger
 * @memberOf JisonGenerator#
 *
 * @see mmir.Logging
 */
var logger = Logger.create(module);

/**
 * The argument name when generating the grammar function:
 * the argument holds the raw text that will be parsed by the generated grammar.
 *
 * NOTE: this argument/variable name must not collide with any code that is generated for the grammar.
 *
 * @constant
 * @private
 * @memberOf JisonGenerator#
 */
var INPUT_FIELD_NAME = 'asr_recognized_text';

/**
 * The default options for the jison compiler.
 *
 * To overwrite the default options, configure the following property in www/config/configuration.json:

 *

 * {
 *   ...
 *   "grammar": {
 *   	...
 *   	"jison": {
 *   		"type": "your configuration setting!"
 *   	}
 *   	...
 *   },
 *   ...
 * }

 *
 * Valid settings are:
 * type = 'lr0' | 'slr' | 'lr' | 'll' | 'lalr'
 * execMode = 'sync' | 'async'
 * genSourceUrl = true | STRING | FALSY'
 *
 *
 * genSourceUrl: if TRUTHY, the sourceUrl for eval'ed parser-module is set
 *               (i.e. eval'ed code will appear at the URL in debugger, if browser supports sourceURL setting)
 *               if true: the sourceUrl will be generated using the grammar's ID
 *               if STRING: the string will be used as sourceUrl; if "<id>" is contained, it will be replaced by the grammar's ID
 *
 * @constant
 * @private
 * @default type := 'lalr', execMode := sync, genSourceUrl := FALSY
 * @memberOf JisonGenerator#
 */
var DEFAULT_OPTIONS = {
		type: 'lalr',//'lr0' | 'slr' | 'lr' | 'll' | default: lalr
		execMode: 'sync',//'sync' | 'async' | default: sync
		genSourceUrl: '',// true | STRING: the sourceURL for eval'ed parser-module | default: FALSY
};

/**
 * Name for this plugin/grammar-generator (e.g. used for looking up configuration values in configuration.json).
 * @constant
 * @private
 * @memberOf JisonGenerator#
 */
var pluginName = 'grammar.jison';

/**
 * Exported (public) functions for the jison grammar-engine.
 * @public
 * @type GrammarGenerator
 * @memberOf JisonGenerator#
 */
var jisonGen = {
	/** @scope JisonGenerator.prototype */

	/**
	 * The name/ID for the compile engine for the jison compiler
	 *
	 * @memberOf JisonGenerator.prototype
	 */
	engineId: 'jison',
	/**
	 * @param {Function} [callback] OPTIONAL
	 * 			the callback that is triggered, when the engine is initialized
	 * @returns {Deferred}
	 * 			a promise that is resolved, when the engine is initialized
	 * 			(NOTE: if you use the same function for the callback AND the promise,
	 * 			       then the function will be invoked twice!)
	 *
	 * @memberOf JisonGenerator.prototype
	 */
	init: function(callback){
		if(callback){
			deferred.always(callback);
		}
		return deferred;
	},
	/** @returns {Boolean} if this engine compilation works asynchronously. The current implementation works synchronously (returns FALSE) */
	isAsyncCompilation: function(){ return false; },
	/**
	 * The function for compiling a JSON grammar:
	 *
	 *
	 * @param {GrammarConverter} theConverterInstance
	 * @param {String} instanceId
	 * 				the ID for the compiled grammar (usually this is a language code)
	 * @param {Number} fileFormatVersion
	 * 				the version of the file format (this is a constant within {@link mmir.SemanticInterpreter}
	 * @param callback
	 * @returns {GrammarConverter}
	 * 			the grammar instance with attached with the compiled function for executing the
	 * 			grammar to the instance's {@link GrammarConvert#executeGrammar} property/function.
	 */
	compileGrammar: function(theConverterInstance, instanceId, fileFormatVersion, callback){

		//attach functions for PEG.js conversion/generation to the converter-instance:
		$.extend(theConverterInstance, JisonGrammarConverterExt);

		//start conversion: create grammar in jison syntax (from the JSON definition):
		theConverterInstance.init();
		this._preparePrintError();
        theConverterInstance.convertJSONGrammar();
        var grammarDefinition = theConverterInstance.getGrammarDef();

        //load options from configuration:
        var config = configManager.get(pluginName, true, {});
        //combine with default default options:
        var options = $.extend({id: instanceId}, DEFAULT_OPTIONS, config);

        //HELPER function for generating the parser-module (after parser was generated)
        var compileParserModule = function(grammarParser, hasError){

            var addGrammarParserExec =
        	  '(function(){\n  var semanticInterpreter = require("semanticInterpreter");\n'
            	+ 'var options = {fileFormat:'+fileFormatVersion+',execMode:'+JSON.stringify(options.execMode)+'};\n'
            	+ 'var module = {};\n'
            	+ grammarParser
//            	+ ';\nvar grammarFunc = function(){ return parser.parse.apply(parser, arguments);};\n'
            	+ ';\nvar grammarFunc = function(){\n'
            	+ '  var result;  try {\n'
            	+ '    result = parser.parse.apply(parser, arguments);\n'
            	+ '  } catch (err){\n'
            	+ '    console.error(err.stack?err.stack:err); result = {};\n'//TODO warning/error messaging? -> need to handle encoded chars, if error message should be meaningful
            	+ '  }\n'
            	+ '  return result;\n'
            	+ '};\n'
            	+ 'semanticInterpreter.addGrammar("'
            		+instanceId
            		+'", grammarFunc, options);\n\n'
            	+ 'semanticInterpreter.setStopwords("'
            		+instanceId+'",'

            		//store stopwords with their Unicode representation (only for non-ASCII chars)
            		+JSON.stringify(
            				theConverterInstance.getEncodedStopwords()
            		).replace(/\\\\u/gm,'\\u')//<- revert JSON.stringify encoding for the Unicodes
            	+ ');\n'
            	+ 'return grammarFunc;\n'
            	+ '})();';

            if(options.genSourceUrl){

            	var sourceUrlStr;
            	if(options.genSourceUrl === true){
            		sourceUrlStr = 'gen/grammar/_compiled_grammar_'+instanceId;
            	} else {
            		sourceUrlStr = options.genSourceUrl.toString().replace(/<id>/g,instanceId);
            	}

            	//for Chrome / FireFox debugging: provide an URL for eval'ed code
            	addGrammarParserExec += '//@ sourceURL='+sourceUrlStr+'\n'
            							+'//# sourceURL='+sourceUrlStr+'\n';

            }

            theConverterInstance.setGrammarSource(addGrammarParserExec);

            try{

            	eval(addGrammarParserExec);

            } catch (err) {

            	//TODO russa: generate meaningful error message with details about error location
            	//			  eg. use esprima (http://esprima.org) ...?
            	//			... as optional dependency (see deferred initialization above?)

            	var evalMsg = 'Error during eval() for "'+ instanceId +'": ' + err;

            	if(jison.printError){
            		jison.printError(evalMsg);
            	}
            	else {
            		logger.error('jison', 'evalCompiled', evalMsg, err);
            	}

            	if(! hasError){
                	evalMsg = '[INVALID GRAMMAR JavaScript CODE] ' + evalMsg;
                	var parseDummyFunc = (function(msg, error){
                		return function(){ console.error(msg); console.error(error); throw msg;};
                	})(evalMsg, err);

                	parseDummyFunc.hasErrors = true;

                	//theConverterInstance = doGetGrammar(instanceId);
                	theConverterInstance.setGrammarFunction(parseDummyFunc);
            	}

            }

            //invoke callback if present:
            if(callback){
            	callback(theConverterInstance);
            }
        };

        var isPreventDefault = this._afterCompileParser(compileParserModule, callback);
        var result = this._compileParser(grammarDefinition, options, isPreventDefault);

        if(!isPreventDefault){
        	var hasError = result.hasError;
        	compileParserModule(result.def, hasError);
        }

        return theConverterInstance;
	},
	/**
	 * @protected
	 */
	_compileParser: function(grammarDefinition, options, afterCompileParserResult){

		var hasError = false;
        var grammarParser;
        try{
        	var cfg = bnf.parse(grammarDefinition);
        	var parser = Jison.Generator(cfg, options);
        	grammarParser = parser.generate();
        } catch(error) {
//        	"{
//        	  "message": "Expected \"=\" or string but \"_\" found.",
//        	  "expected": [
//        	    {
//        	      "type": "literal",
//        	      "value": "=",
//        	      "description": "\"=\""
//        	    },
//        	    {
//        	      "type": "other",
//        	      "description": "string"
//        	    }
//        	  ],
//        	  "found": "_",
//        	  "offset": 4104,
//        	  "line": 40,
//        	  "column": 6,
//        	  "name": "SyntaxError"
//        	}"
        	var msg = ' while compiling grammar "' + options.id + '": ';
        	if(error.name === 'SyntaxError'){
        		msg= 'SyntaxError' + msg + error.message;
        	}
        	else {
        		msg = 'Error' + msg + (error && error.stack? error.stack : error);
        	}

        	if(typeof error.lineNumber !== 'undefined'){
        		msg += ' at line '+error.lineNumber;
        	}

        	if(typeof error.column !== 'undefined'){
        		msg += ':'+error.column;
        	}

        	if(typeof error.index !== 'undefined'){
        		msg += ' (offset '+error.index+')';
        	}

        	if(jison.printError){
        		jison.printError(msg);
        	}
        	else {
        		console.error(msg);
        	}
        	msg = '[INVALID GRAMMAR] ' + msg;
        	grammarParser = 'var parser = { parse: function(){ var msg = '+JSON.stringify(msg)+'; console.error(msg); throw msg;} }';
        	hasError = true;
        }

        return {def: grammarParser, hasError: hasError};
	},
	/**
	 * @protected
	 */
	_preparePrintError: function(){

		//setup logger for compile errors (if not already set)
		if(! jison.printError){
			/**
			 * The default logging / error-print function for jison.
			 *
			 * @private
			 * @name printError
			 * @function
			 * @memberOf JisonGenerator.jison#
			 *
			 * @see mmir.Logging
			 */
			jison.printError = function(){
				var args = $.makeArray(arguments);
				//prepend "location-information" to logger-call:
				args.unshift('jison', 'compile');
				//output log-message:
				logger.error.apply(logger, args);
			};
		}
	},
	/**
	 * The default logging / error-print function for jison.
	 *
	 * @protected
	 *
	 * @see mmir.Logging
	 */
	printError: function(){
		jison.printError.apply(jison, arguments);
	},
	/**
	 * Optional hook for pre-processing the generated parser, after the parser is generated.
	 *
	 * By default, this function returns VOID, in which case the parser-module is created by default.
	 *
	 * If a function is returned instead, then it must invoke compileParserModuleFunc:
	 * compileParserModuleFunc(compiledParser : STRING, hasErrors : BOOLEAN)
	 *
	 *
	 * @param {Function} compileParserModuleFunc
	 * 				the function that generates the parser-module:
	 * 				compileParserModuleFunc(compiledParser : STRING, hasErrors : BOOLEAN)
	 *
	 * @param {Function} compileCallbackFunc
	 * 				the callback function which will be invoked by compileParserModuleFunc, after it has finished.
	 * 				If compileParserModuleFunc() is prevented from exectution then the callback MUST be invoked manually
	 * 				compileCallbackFunc(theConverterInstance: GrammarConverter)
	 *
	 * @returns {TRUTHY|VOID}
	 * 				FALSY for the default behavior.
	 * 				IF a TRUTHY value is returned, then the default action after compiling the parser
	 * 				is not executed:
	 * 					i.e. compileParserModuleFunc is not automatically called and in consequence the callback is not invoked
	 *
	 *
	 * 				NOTE: if not FALSY, then either compileParserModuleFunc() must be invoked, or the callback() must be invoked!
	 *
	 * @protected
	 */
	_afterCompileParser: function(compileParserModuleFunc, compileCallbackFunc){
		//default: return VOID
		return;
	}
};

////////////////////////////////////// Jison specific extensions to GrammarConverter ////////////////////////////////
/**
 * jison specific extension / implementation for {@link GrammarConverter} instances
 *
 * @type GrammarConverter
 * @memberOf JisonGenerator#
 */
var JisonGrammarConverterExt = {
	/** @memberOf JisonGrammarConverterExt */
	init: function(){

		this.THE_INTERNAL_GRAMMAR_CONVERTER_INSTANCE_NAME = "theGrammarConverterInstance";
		this._PARTIAL_MATCH_PREFIX = "$";

		this.grammar_tokens = "/* --- Token definitions --- */\n\n/* Characters to be ignored */\n"
			+ "\\s+    /* skip whitespace */\n\n/* Non-associative tokens */\n";

		this.grammar_utterances = "";
		this.grammar_phrases = "phrases:\n    ";
		this.token_variables = "%{\n  var " + this.variable_prefix + "result = '';\n";
		this.tokens_array = [];

		this.grammar_special_tokens = "";
		this.grammar_special_tokens_no = 0;

	},
	convertJSONGrammar: function(){

		this.json_grammar_definition = this.maskJSON(this.json_grammar_definition);

		this.token_variables += "  var semanticAnnotationResult = {};\n"
			+ "  var _flatten = function(match){ if(!match.join){ return match;} for(var i=0, size = match.length; i < size; ++i){if(!match[i]){continue;}if(match[i].join){match[i] = _flatten(match[i])}} return match.join('') };\n"
			+ "  var _tok = function(field, match){ match = _flatten(match); field[match] = match; return match;}\n"
		;

		this.parseTokens();
		this.parseUtterances();
		this.parseStopWords();

		this.jscc_grammar_definition = this.token_variables
				+ "%}\n\n"
				+ "/* lexical grammar */\n%lex\n\n"
				+ this.grammar_special_tokens
				+ "\n\n%%"
				+ this.grammar_tokens
				+ "\n<<EOF>>   %{ return 'EOF'; %};\n\n/lex"
				+ "\n\n/* --- Grammar specification --- */\n%start utterance\n\n%% /* language grammar */\n\nutterance:\n    phrases EOF %{ "

				//TODO use LOG LEVEL for activating / deactivating this:
				+ "console.log("
				+ this.variable_prefix + "result); "

				+ "semanticAnnotationResult.result = "
				+ this.variable_prefix + "result; return "+ this.variable_prefix +"result; %};\n\n" + this.grammar_utterances
				+ "\n" + this.grammar_phrases + ";\n\n"
		;

		this.json_grammar_definition = this.unmaskJSON(this.json_grammar_definition);
	},
	parseTokens: function(){
		var self = this;
		var json_tokens =  this.json_grammar_definition.tokens;
		var pref = self.variable_prefix;

		for(token_name in json_tokens){

			var words = json_tokens[token_name];

			self.token_variables += "  var " + pref
					+ token_name.toLowerCase() + " = {};\n";

			//FIXME TODO handle RegExpr: need to be encoded without String-quoting!, i.e. instead of
			//							 FLASE:   '[a-zA-Z_]+'
			//							 CORRECT: [a-zA-Z_]+

			//OLD IMPL.:
//			var grammar_token = token_name + "\n    = match:('";
//			for(var i=0, size = words.length; i < size ; ++i){
//				if(i > 0){
//					grammar_token += "'/'";
//				}
//				grammar_token += words[i];
//			}
//
//			grammar_token += "')    " + token_name + " { " + self.variable_prefix
//					+ token_name.toLowerCase() + "[match] = match; return match;};\n";
//
//			self.grammar_tokens += grammar_token;

			//NEW IMPL.:
			var sb = [];

			var isNotRegExpr = true;
			for(var i=0, size = words.length; i < size ; ++i){

				//NOTE RegExpr need to be recoded -> need to check, if current word is RegExp!
				//  example (see also _convertRegExpr()):
				//	INPUT:   '[a-zA-Z_]+'
				//	RECODED: [a-zA-Z_]+
				isNotRegExpr = this._checkIfNotRegExpr(words[i]);
				if( isNotRegExpr ){
					sb.push("\"");
				}

				//add TOKEN string:
				if(isNotRegExpr){
					sb.push(words[i]);
				}
				else {
					var special_token_name = "regexpr" + (++ this.grammar_special_tokens_no);
					this.grammar_special_tokens += special_token_name + "    " + this._convertRegExpr(words[i]) + "\n";
					sb.push("{" + special_token_name + "}");
				}

				if( isNotRegExpr ){
					sb.push("\"");
				}

				//if there is another word following, add OR operator
				if(i < size-1){
					sb.push("|");
				}
			}

			//close assignment for "= match:(" and create JavaScript processing for token
			sb.push(
				"     %{ _tok(" + pref + token_name.toLowerCase() + ", yytext); return '"+token_name+"'; %}\n"
			);

			self.grammar_tokens += sb.join("");
		}
	},
	parseUtterances: function(){
		var self = this;
		var utt_index = 0;
		var json_utterances =  this.json_grammar_definition.utterances;

		for(var utterance_name in json_utterances){
			var utterance_def = json_utterances[utterance_name];
			if(utt_index > 0){
				self.grammar_phrases += "\n\t|";
			}
			utt_index++;
			self.doParseUtterance(utterance_name, utterance_def);
		}
	},
	doParseUtterance: function(utterance_name, utterance_def){

		var self = this;

		self.token_variables += "  var " + self.variable_prefix
				+ utterance_name.toLowerCase() + " = {};\n";

		var grammar_utterance = utterance_name + ":\n   ";
		//self.grammar_phrases += utterance_name + "  " +  self.doCreateSemanticInterpretationForUtterance(utterance_name, utterance_def);
		self.grammar_phrases += utterance_name + "  " ;
		var phrases = utterance_def.phrases;
		var semantic  = self.doCreateSemanticInterpretationForUtterance(utterance_name, utterance_def);

		for(var index=0,size=phrases.length; index < size; ++index){
			if(index > 0){
				grammar_utterance += "\n  | ";
			}
			var phrase = phrases[index];
			var semantic_interpretation = self.doCreateSemanticInterpretationForPhrase(
					utterance_name.toLowerCase(), utterance_def, phrase, semantic
			);
			grammar_utterance += /*phrase +*/ semantic_interpretation;
		}
		self.grammar_utterances += grammar_utterance + ";\n\n";
	},
	doCreateSemanticInterpretationForUtterance: function(utterance_name, utterance_def){
		var semantic = utterance_def.semantic,
		variable_index, variable_name;

		if(logger.isDebug()) logger.debug('doCreateSemanticInterpretationForUtterance: '+semantic);//debug

		var semantic_as_string = JSON.stringify(semantic);
		if( semantic_as_string != null){
		this.variable_regexp.lastIndex = 0;
		var variables = this.variable_regexp.exec(semantic_as_string);
		while (variables != null) {
			var variable = variables[1],
			remapped_variable_name = "";

			if(logger.isDebug()) logger.debug("variables " + variable, semantic_as_string);//debug

			variable_index = /\[(\d+)\]/.exec(variable);
			variable_name = new RegExp('_\\$([a-zA-Z_][a-zA-Z0-9_\\-]*)').exec(variable)[1];
//			variableObj = /_\$([a-zA-Z_][a-zA-Z0-9_\-]*)(\[(\d+)\])?(\["semantic"\]|\['semantic'\]|\.semantic)?/.exec(variable);
//			variableObj = /_\$([a-zA-Z_][a-zA-Z0-9_\-]*)(\[(\d+)\])?((\[(("(.*?[^\\])")|('(.*?[^\\])'))\])|(\.(\w+)))?/.exec(variable);
	//"_$NAME[INDEX]['FIELD']":  _$NAME                  [ INDEX ]        [" FIELD "]  | [' FIELD ']      |   .FIELD
			if (variable_index == null) {
				remapped_variable_name = variable;
			} else {
					remapped_variable_name = variable.replace(
							  '[' + variable_index[1] + ']'
							, "["
								+ utterance_name.toLowerCase() + "_temp['phrases']['"
								+ variable_name.toLowerCase() + "']["
								+ variable_index[1]
							+ "]."+this.entry_token_field+"]");
					//TODO replace try/catch with safe_acc function
					//     PROBLEM: currently, the format for variable-access is not well defined
					//              -> in case of accessing the "semantic" field for a variable reference of another Utterance
					//                 we would need another safe_acc call
					//				   ... i.e. need to parse expression for this, but since the format is not well defined
					//				   we cannot say, for what exactly we should parse...
					//                 NORMAL VAR EXPR: 		_$a_normal_token[0]
					//                 ACCESS TO SEMANTICS: 	_$other_utterance[0]['semantic']
					//                                      but this could also be expressed e.g. as _$other_utterance[0].semantic
					//                                      ...
//					remapped_variable_name = variable.replace(
//							  '[' + variable_index[1] + ']'
//							, "[safe_acc("
//								+ utterance_name.toLowerCase() + "_temp, 'phrases', '"
//								+ variable_name.toLowerCase() + "', "
//								+ variable_index[1]
//								+ ")]"
//							);
			}
			semantic_as_string = semantic_as_string.replace(
					variables[0],
					" function(){try{return " + remapped_variable_name
						+ ";} catch(e){return void(0);}}() "
//					"' + " + remapped_variable_name + " + '"//TODO replace try/catch with safe_acc function
			);
			variables =  this.variable_regexp.exec(semantic_as_string);
		}
		}
		return semantic_as_string;
	},
	doCreateSemanticInterpretationForPhrase: function(utterance_name, utterance_def, phrase, semantic_as_string){
		var phraseList = phrase.split(/\s+/),
		length = phraseList.length,
		duplicate_helper = {};

		var phraseStr = "";
	//	var result = " { var _m = ";
		var i = 0;

		var pharseMatchResult = " $$ = ";
	//	for (; i < length; ++i){
	//		pharseMatchResult += this._PARTIAL_MATCH_PREFIX + (i+1);
	//		if(i < length){
	//			pharseMatchResult += " + ' ' + ";
	//		}
	//	}

	//	result += "; var "+utterance_name+"_temp = {}; "+utterance_name+"_temp['phrases'] = {};";

		var semanticProcResult = "var "+utterance_name+"_temp = {}; "+utterance_name+"_temp['phrases'] = {};";
		var num;
		for (i = 0; i < length; ++i) {

			num = i+1;

			//create STR for phrase-matching
			phraseStr += " " + phraseList[i];

			//create STR for concatenated match of all partial phrases
			pharseMatchResult += this._PARTIAL_MATCH_PREFIX + num;
			if(num < length){
				pharseMatchResult += " + ' ' + ";
			}

			//create STR for semantic processing of phrase
			if (typeof(duplicate_helper[phraseList[i]]) == "undefined") {
				duplicate_helper[phraseList[i]] = 0;
				semanticProcResult += utterance_name+"_temp['phrases']['"+phraseList[i].toLowerCase()+"'] = [];\n\t\t";
			} else {
				duplicate_helper[phraseList[i]] += 1;
			}
			semanticProcResult += utterance_name + "_temp['phrases']['"
						+ phraseList[i].toLowerCase() + "']["
						+ duplicate_helper[phraseList[i]] + "] = {"
							+ this.entry_token_field + ": " + this._PARTIAL_MATCH_PREFIX + num + ","
							+ this.entry_index_field + ": " + (num-1)
						+"};\n\t\t";
		}

		semanticProcResult += "var " + this.variable_prefix + "phrase = $$; "
				+ utterance_name + "_temp['phrase']=" + this.variable_prefix + "phrase; "
				+ utterance_name + "_temp['utterance']='" + utterance_name + "'; "
				+ utterance_name + "_temp['engine']='jison'; "//FIXME debug
				+ utterance_name + "_temp['semantic'] = " + semantic_as_string
				+ "; " + this.variable_prefix + utterance_name + "["
				+ this.variable_prefix + "phrase] = " + utterance_name + "_temp; "
				+ this.variable_prefix + "result = " + utterance_name + "_temp;";

		return phraseStr + " %{\n\t   " + pharseMatchResult +  "; " + semanticProcResult + "; \n\t%} ";
	},
	_checkIfNotRegExpr: function(token){

		//test for character-group
		if( ! /([^\\]\[)|(^\[).*?[^\\]\]/.test(token)){

			//test for grouping
			if( ! /([^\\]\()|(^\().*?[^\\]\)/.test(token) ){

				//try for single-characters that occur in reg-expr FIXME this may procude false-positives!!!
				return ! /[\?|\*|\+|\^|\|\\]/.test(token); //excluded since these may be more common in natural text: . $
			}
		}

		return false;
	},
	_convertRegExpr: function(token){
		var sb = [], ch, last = null, isString = false, isGroup = false, isEsc = false/*, hasOr = false*/;
		for(var i=0, size = token.length; i < size; ++i){
			ch = token.charAt(i);
			switch(ch){
			case '(':
			case ')':
			case '[':
			case ']':
			case '+':
			case '*':
			case '?':
			case '$':
			case '^':
			case '.':
			case '|':
				if(last !== '\\'){

					//if changed from STRING -> non-STRING, then "close" string first:
					if(isString){

						//for "optional" expression: modify previous entry to be a single character-sequence
						// ...cars'?  -> ...car' 's'?
						if(ch === '?' && sb.length > 0){//TODO also for '+', '*', ...???
							sb[ sb.length - 1 ] = '" "' + sb[ sb.length - 1 ];
						}

						sb.push("\" ");
						isString = false;
					}

					//insert reg-expr symbol
//					if(ch !== '|'){
						sb.push(ch);
//					}
//					else {
//						sb.push(' | ');
//						hasOr = true;
//					}

					//is character-group opening/closing?
					if(isGroup && ch === ']'){
						isGroup = false;
					}
					else if(!isGroup && ch === '['){
						isGroup = true;
					}

					break;
				}
				else {
					isEsc = true;
				}
			default:

				if(isEsc){
					sb.splice(sb.length-1);//remove last element, i.e. the escape-character
					isEsc = false;
				}

				//if changed from non-STRING -> STRING, then "open" string now:
				if(!isGroup && !isString){
					sb.push(" \"");
					isString = ! isGroup;
				}
				sb.push(ch);
			}

			last = ch;
		}

		//if last char was a STRING, "close" string now:
		if(isString){
			sb.push("\"");
		}
//		if(hasOr){
//			sb.unshift('(');
//			sb.push(')');
//		}
		return sb.join('');
	}
};

return jisonGen;

});

redpajama_set_name: RedPajamaGithub


A longtime fixture at the Mirage the REVOLUTION Lounge has announced that it will close its doors today to be replaced with a new concept set to debut in 2016. The REVOLUTION lounge was designed to be a tie in with the Beatles themed Cirque Du Soleil show Love nearby at the Mirage. The REVOLUTION lounge has had a really long run, but change is just a part of Las Vegas which is always inventing itself so don't get too attached to your favorite places because they could be gone but change means always new places to check out.


text:
Search Finance 101
JELL-O's dark side: The dessert company's little known secrets
By Carla DeMaio
gaelx/flickr
Jell-O delighted many families, but not so much the family that built its empire. Allie Rowbottom is a part of the Jell-O clan and writes in her 2018 book, 'Jell-O Girls: A Family History,' that her family both benefited from Jell-O wealth and suffered the so-called "Jell-O Curse."
Jell-O's little known dark family and company history juxtaposes against the dessert's sweet and happy façade. Sure you have room for J-E-L-L-O? The following secrets might make you skip dessert…
Jell-O's selling price went from hundreds to millions of dollars
Rowbottom's family history with Jell-O started in 1899 when her great-great-great-uncle, Orator Francis Woodward, purchased the dessert company for a mere $450. Jell-O was first trademarked, however, by carpenter and cough syrup manufacturer Pearle Bixby Wait. Woodward sold Jell-O 26 years later for an amount that would fund several generations of heirs.
Woodward got $67 million from Jell-O's sale, ensuring most of his predecessors would be set financially. Rowbottom's great-great-aunt, Edith, married into the Jell-O family in 1903, getting hitched with Orator Woodward's son, Ernest. Also involved with the family business, Ernest's ideas changed the game for the dessert.
NEXT: Jell-O's sales spiked when Ernest suggested this.
Jell-O was marketed towards middle class moms and wives
Ernest Woodward introduced a couple of serious money making strategies to the Jell-O company. Ernest urged Jell-O to adopt an assembly line in order to increase production. He also began the company's tradition of marketing primarily to women. Jell-O's ads had several not so subtle messages for the women of the house.
Dodge, Mary Mapes/Wikimedia Commons
Jell-O was advertised as being able to help women prepare quick, delicious family meals. "Even if you can't cook, you can still make Jell-O dessert," the ads claimed. Ads were especially geared towards women who lost housekeepers to lucrative factory jobs.
NEXT: Rowbottom sees a sexist message in these ads.
The dessert's ads tell women their "primary purpose"
Rowbottom says many Jell-O ads told women self-sacrifice and caretaking were their primary purposes. Early ads were featured in women's magazines, such as Ladies' Home Journal, with messages like "[it's] so easy… even a child can do it." In the 1930s-40s, Jell-O was advertised to women as a "food stretcher," incorporating leftovers into Jell-O salad.
Wyeth, N. C./Wikimedia Commons
Rowbottom argues the dessert represented domesticity and perfection in the 1950s-60s. An image of a woman presenting her husband with Jell-O appears in A Bride's Best Friend and ads often deemed it a convenient "diet food" NEXT: Jell-O is pretty on the outside, not on the inside.
What Jell-O is made of might gross you out
Ernest was described by Rowbottom in a Vanity Fair article as short and serious, and obsessed with two things: his pets and Jell-O (which, ironically, is made from not so fortunate animals). Gelatin was first popularized in the Victorian Era and became a central ingredient in Jell-O products. It's a protein produced from collagen extracted from boiled animal bones.
1950sUnlimited/Wikimedia Commons
As you can imagine, Jell-O products are a no-go for vegan and vegetarian diets. In Vanity Fair, Rowbottom explains the dessert is now made of pig and cow hides and produced in a top-secret process.
NEXT: Rowbottom says Jell-O women's fortunes were controlled by men.
Jell-O women never had much of a say
As was standard in many early 1900s businesses, the Woodward women were absent from the Jell-O family business. They instead spent their time taking care of children and serving on boards and charities. Rowbottom argued their wealth was still controlled by men long after the last patriarchs had died in 1925.
Internet Archive Book Images/Wikimedia Commons
The Woodward women's trusts were managed for them by male bankers who determined their monthly allowances. This money management arrangement for Woodward women continued even after Jell-O was sold to Postum, which later became General Foods, then Kraft.
NEXT: Jell-O changed the town LeRoy, New York forever when it did this.
LeRoy, NY was prosperous until Jell-O's factory left
In LeRoy, New York, "trucks arrived each week heaped with the dusty remnants of tissue and bone" headed to the Jell-O factory, Rowbottom writes in Jell-O Girls. From these crushed animal parts, emerged sweet, colorful, and dainty Jell-O. It looked completely different — and more appetizing — than its original ingredients.
Pubdog/Wikimedia Commons
Just like Jell-O's ingredients were transformed, LeRoy transformed into a town of prosperity with the dessert's production. Jell-O's presence couldn't be ignored — even the town's river changed color each week depending on what flavors were in the Jell-O factory vats.
NEXT: Jell-O left a bad taste in LeRoy's mouth.
This town swore off Jell-O forever
General Foods eventually closed the original Jell-O factory in LeRoy, New York and moved production to Delaware. The company had employed so many people in the small Northeastern town who were now faced with an intense choice: move to Delaware or lose their job. LeRoy natives felt betrayed, says Rowbottom.
Some LeRoy residents felt so betrayed that they swore off the jiggly dessert. By the 1980s, it was clear that Jell-O's departure might have had an extreme effect on the town: LeRoy's median income fell beneath the national average.
NEXT: Did the town's poor predicament have anything to do with a mysterious illness?
Girls in LeRoy developed a strange illness in 2011
Journalists and TV cameras flocked to LeRoy in 2011, determined to get the scoop on this story: A group of high school girls, one 36-year-old woman, and a young boy suddenly started exhibiting Tourette's-like symptoms without an obvious cause. Some thought the environment, stressors related to poor circumstances in LeRoy or "mass hysteria" were causes.
Rowbottom, obsessed with the story, had her own thoughts on the matter: "Could their twitching have been what some neurologists said it was — a conversion disorder, the logical response to a culture that doesn't help them process their emotions?"
NEXT: Grandmother Midge experienced the "Jell-O curse."
Her grandmother tried to be like the doting women in Jell-O ads
Rowbottom writes in Jell-O Girls that her grandmother, Midge, suffered from the "Jell-O Curse." Midge gave up her artistic ambitions to be a good wife and mother — just like the women in the Jell-O ads. Midge got cancer and ended up dying a painful death when her daughter, Mary, was 14.
Mary, Rowbottom's mother, believed she could avoid Jell-O's curse if she played the "role assigned to her," according to the New York Times. Seeing her mother die showed Mary that being compliant wouldn't protect her against suffering, so she broke out of her role.
NEXT: Mary couldn't escape the Jell-O curse.
Did Jell-O ads "sell a lie?"
The New York Times book review of Jell-O Girls says Jell-O paid for Mary's life as an "orphan artist" and funded her stay in a psychiatric clinic. However, Mary didn't think Jell-O was good for much else. Mary had a calm 1950s childhood then rebelled in the 1960s — typical of baby boomers.
Boston Public Library/flickr
Mary couldn't stand Jell-O. She also thought Jell-O ads sold a lie — "reducing a woman's worth to how smoothly she managed her domestic affairs," the New York Times writes. Cheerful Jell-O ads of doting wives and mothers didn't sit well with Mary.
NEXT: Jell-O haunted Mary until the very end.
The last thing Mary ever ate was the dessert she hated
Like her mother Midge, Mary also got cancer. She got sicker and sicker throughout the years — at her daughter's wedding, she was so frail that Rowbottom was startled by her appearance. "I found her unfamiliar, rouged like a corpse, her tumid ankles peeking out, inflated and purple," she writes in her book.
Jell-O Girls opens with Rowbottom feeding her dying mother the dessert she hates the most — Jell-O. "But sick as she was that winter, Jell-O was all she could keep down. 'Who would have thought,' she whispered one night as I was feeding her," Rowbottom writes.
NEXT: Mary eventually accepts Jell-O.
Mary came around to Jell-O at the end
Rowbottom tells Robin Young on "Here and Now" on WBUR that Mary accepted Jell-O, eventually, even though she made a point of avoiding the dessert most of her life. Rowbottom says her mother saw it as a symbol of patriarchy and her family's struggle against patriarchal forces and the Jell-O curse.
justgrimes/flickr
"At the end of her life, when it turned out that Jell-O was the only thing that she could stomach, it was this sort of grim irony. Unfortunately, it wound up being the last thing she ever ate," Rowbottom tell Robin Young.
NEXT: Mary's Jell-O money was hard for her to get.
Mary couldn't access her Jell-O inheritance
Rowbottom says her mother was dismissed in life in two crucial ways. The New York Times writes that Mary was wrongly ignored by doctors when she complained about her health. Instead of taking her concerns seriously, they wrote her off as "hysterical." She was not hysterical — her body was riddled with carcinoid tumors.
Amy Stephenson/flickr
Besides being doubted in the medical world, Mary was denied free access to her own inheritance. She tried to gain control of it through her older brother whose access to his own inheritance was never challenged. Unfortunately, her attempts in court failed.
NEXT: Mary also tried writing about Jell-O.
Mary died before finishing her own Jell-O memoir
Mary was determined to uncover her family's past, the impact of Jell-O on her life, and the origins of her illness. She obsessively researched her history, even as her mortality was threatened by cancer. Mary had boxes of research by the time she died in 2015 and had been sending them to her daughter.
By sending Rowbottom her research, Mary hoped that her daughter could write what she couldn't. Mary, unfortunately, couldn't finish her memoir (Rowbottom said she pronounced it "memwah"). Still, her daughter was able to look through her research as she penned her book.
NEXT: Rowbottom takes on the Jell-O curse herself.
Did Jell-O curse this author?
Rowbottom's personal story comes up halfway through the Jell-O Girls memoir. An only child born in the mid-1980s, she also suffered ailments like her mother and grandmother. Rowbottom struggled with an eating disorder and stiffness in her hands — her hands would curve into a claw during stressful moments.
Rowbottom tells Robin Young on Boston's NPR station WBUR: "A lot of my struggle traced back to not feeling free to speak. Once I started to speak and express myself in therapy and to learn that it was safe to do so, my symptoms became less present."
NEXT: Jell-O for a slim life?
Jell-O was marketed as a diet food
A phrase the brand repeated a lot during its history was "salads for a slim life," which later became a chapter in the famous Jell-O cookbook. Jell-O did a lot of marketing as a diet food, aside from the Great Depression and wartimes (as food was scarce), according to the New York Times.
Wellcome Collection gallery/Wikimedia Commons
Jell-O released a low-calorie version of its jiggly dessert called D-Zerta (sounds more like a chemical rather than a food) aimed at women wanting to achieve perfection. The product sold well during the diet craze in the '80s.
NEXT: The men in the Jell-O family weren't very lucky.
Here's how Jell-O cursed the men in the family
Oprah Magazine's review of Jell-O Girls states the men of the Jell-O family empire experienced existential boredom, alcoholism, and early death. Meanwhile, the dark side for Jell-O women was "a corrosive subservience that imposed silence, and the sickness silence plants, like seeds, inside women." Male or female — these both sound terrible.
More money means more money, but it also means more to lose. For example, Rowbottom's uncle divorced and mismanaged his way out of his Jell-O fortune. He then ended his life by throwing himself off the roof of a Sheraton hotel.
NEXT: Jell-O's marketing changes as women's roles change.
Jell-O marketed itself as "healthy" even though it wasn't
Jell-O tried to keep up with the times, Rowbottom writes in her book. Innovations in the product could be a spur to change. The popular Jell-O cookbook marketed the dessert as a health food as a way to appeal to 1970s independent women. Perhaps it was continuing to help women achieve "perfection?"
KitAy/flickr
An example of such "healthy" marketing might be found in the "Green Goddess Salad Bowl." For this delight, you'll need lime Jell-O, sour cream, and anchovies for starters. It wasn't quite health food but it gestured towards the concept of it.
NEXT: Rowbottom asserts that this is what the Jell-O Curse is.
Is the "Jell-O Curse" the patriarchy?
Throughout her book Jell-O Girls, author Rowbottom asserts that the curse Jell-O afflicted on her family was patriarchy. "I'd agree that it's patriarchy and, more specifically, the patriarchal imperative to keep women silent, separate from ourselves and each other," she told Bitch Media of her thoughts on Jell-O's curse.
Sasha Kimel/flickr
Women have always been told where and how to fit into U.S. culture and Jell-O's marketing was such an example of this. In fact, one could say that Jell-O's marketing strategy came to embody the persona of the dutiful housewife. For Rowbottom and her female relatives, these values became familial obligations they must adhere to. NEXT: Jell-O as a "safe food"?
Sugar-free Jell-O was once part of this heir's diet
Despite her mother Mary's best efforts, Rowbottom struggled with an eating disorder during high school and early college years. She decided on some "safe foods" to incorporate into her diet, including sugar-free Jell-O. The years she spent eating the dessert her mother hated so much still stand out to her.
marianne muegenburg cothern/flickr
Rowbottom felt this was a personal affront to her mother as she'd spent most of life rejecting Jell-O. She did successfully treat her disorder after attending a program, however. Jell-O's presence in her struggle might relate to its marketing as a "diet food" to women.
NEXT: Does she eat Jell-O now?
Jell-O is a few steps removed from cough syrup
Jell-O's inventor, Pearle B. Wait, created the first successful gelatin recipe while doing side work as a manufacturer of medicines like cough syrup and laxatives. His medicine business wasn't doing so well, so he decided to branch out into the food industry. He and his wife, May, added flavors like strawberry, raspberry, orange, and lemon to make the goo more palatable and thus the four OG Jell-O flavors were created.
Kim/Wikimedia Commons
Mental Floss thinks that these flavors might have been on hand from Pearle's medicinal concoctions. Good thing he added these flavors too. Without them — and sugar — gelatin is just translucent tasteless gunk.
NEXT: Europe thinks Jell-O is a danger to kids.
Jell-O has a warning label in Europe
…but not in the U.S.? A 2016 article in Food Babe said these European labels said Jell-O "may have an adverse effect on activity and attention in children." This is because of the artificial dyes present in Jell-O — Europe is much more wary of these than the U.S. is.
A study from Purdue University says the U.S. uses too much dye in its food. No wonder the warning labels don't appear here like they do in Europe. Jell-O uses Blue Number One in several flavors, which is the worst because it crosses the blood-brain barrier.
NEXT: This actor was on a "Jell-O diet."
Jell-O isn't a good diet food
It's true that the jiggly dessert is low-calorie, fat-free and sometimes sugar-free but it's basically free of any nutritional value at all. Actor John Malkovich claimed to do a four-month Jell-O diet as a teen, emerging 70 pounds lighter. Not sure how he survived on eating only translucent desserts?
Andreas Tai/Wikimedia Commons
Many dieters do favor the snack as a diet food — just like Jell-O encouraged back in the day with its Green Goddess Salad and D-Zerta. It makes up for its lack of nutrition with loads of sugar, which isn't healthy either.
NEXT: She didn't know she was part of the Jell-O family.
She found out she was a Jell-O heir
Growing up, Elizabeth McNabb had no idea she was part of the Jell-O clan, nor did she know she was adopted. At age 19, she began a long search to discover the identity of her birth mother. She came upon Barbara Woodward, a direct heir to the Jell-O fortune. She would soon discover that Woodward was involved with a bit of a scandal in the past…
Brian0918/Wikimedia Commons
Turns out that Woodward had gotten pregnant with a married man's child and gave up McNabb for adoption. When Woodward died in 2003, McNabb sued for a piece of the Jell-O inheritance and won. She got a whopping $3.5 million in 2007.
NEXT: J-E-L-L-O, it's alivvvve!
Jell-O is alive according to this 1974 experiment
Dr. Adrian Upton hooked up an EEG, electroencephalogram, to a mold of lime green Jell-O in 1974. What he found was pretty unexpected: The Jell-O produced alpha waves, just like humans do! The science world went HAM at the time but didn't realize what Upton was really trying to prove…
He was trying to say that EEG machines shouldn't be the only determinant in figuring out whether or not a human is alive. We all know Jell-O isn't actually alive although it's made of critters that were once alive.
NEXT: This state eats more Jell-O than the rest of the nation.
Utah passed the "Resolution Urging Jell-O Recognition"
Leonard M. Blackham, a Utah state representative, introduced resolution 5 in order to recognize Jell-O brand gelatin as the "favorite snack of Utah." With only two votes dissenting, Jell-O became the state's official snack food. It was a particularly popular resolution as the jiggly dessert was a favorite of this church…
Andyknelson/Wikimedia Commons
The Church of Jesus Christ of Latter-day Saints, aka the Mormon church, really liked Jell-O according to Gizmodo. The Mormon Corridor region in Utah was given the nickname "Jell-O Belt." This was because Salt Lake City had the highest consumption of Jell-O in the U.S.
NEXT: These immigrants' first introduction to American food was Jell-O.
Immigrants on Ellis Island were given Jell-O molds
Jell-O had all sorts of marketing tactics — cookbooks, advertising in ladies' magazines, promoting itself as a diet food, etc. One marketing tactic was giving out free Jell-O molds to immigrants arriving on Ellis Island. This was often many people's first introduction to U.S. food, a shimmering symbol of the American Dream.
Science History Institute/Wikimedia Commons
The Chicago Tribune says that Jell-O did become a favorite food of many immigrants and their families for that reason, for what it represented. Perhaps family lore recalled their ancestors being introduced to it on Ellis Island? It is a romantic vision!
NEXT: Jell-O used to be used in savory salads.
Tuna in your Jell-O mold?
Remember the Green Goddess Salad we mentioned above? That recipe called for ingredients like Jell-O, mayo, anchovies and more. Now savory Jell-O doesn't have a wide audience but it used to be all the rage back in the day. It was very commonly used by moms and wives as a "food stretcher."
To give leftovers a new life, moms and wives would stick bits of leftovers within it to make a dinner. There were recipes involving savory foods we'd never consider today, like tomato and tuna fish. People that would find that appetizing today are few and far in between.
NEXT: There's some pretty weird alternatives to Jell-O.
Is Jell-O the WD-40 of your pantry?
So, you can do other things with Jell-O besides eat it as a snack, for dessert, or to hide your leftovers in. Some cat owners sprinkle it over cat litter (to get rid of the smell we assume?), but it doesn't seem like that would be good for cats.
It can also be used as a dye for hair or clothing, made into finger paint, or used for ridding bathrooms of soap scum. People involved in Greek life or other activities demeaning to women also use it for wrestling. See — Jell-O can fit most every need.
NEXT: Jell-O was used to "part the sea."
Jell-O created miracles in this silent film
The slippery, jiggly snack was used to create an effect of keeping the Red Sea parted in the 1923 film, The Ten Commandments, directed by the legendary Cecil B. DeMille (not the 1956 Charlton Heston-starring movie of the same name, FYI.) The Red Sea parted as the Israelites escaped Egypt.
If you look closely, you might see the wall the Israelites walked through jiggle. It truly stole the show! Some questions remained unanswered: How much Jell-O was needed to create this movie magic? Also what flavor was it? That information we may never know, but it was a cool looking effect nevertheless!
10 little known facts about Tesla's Elon Musk
Use these clever tricks to snag a free gift card for Target
These Are The 25 Greatest American Muscle Cars — And How Much They're Worth Today
Premium smartphones for under $350
Medicare Advantage plans are offering new benefits — but only 10% of members will get them
Copyright © 2021 Novelty Magazines Inc. DBA 101 Network


Trust Adidas intended for mountainous, wet, snowy, or steep chaussure adidas pas cher conditions. These trail shoes were created with serious trail runners as their intended purpose who want the ideal in performance, protection, toughness, and style. Challenge by yourself to any terrain together with Adidas. When it pertains to running shoes, the Adidas Supernova is one of the best. People who wear Adidas Supernova running shoes all benefit from the GEOFIT trademark materials that offer a custom fitting casino shoe, and the FORMOTION trademark material that provides superior cushioning that tends to make this shoe adaptable in order to nearly any terrain to get running and walking. The technology place in this shoe is commendable to convey the least.
One purpose people really love this Adidas Supernova running shoe is adidas superstar femme pas cher because it offers exceptional comfort, support, and is available in a multitude of kinds and colors that allow it to become easy to wear these individuals both on and journey track. Many people have commented that they have yet to find a shoe that has so much, and at such an affordable price. Some of individuals who wear Adidas Supernova running shoes swear they have yet to find another shoe that comes near them, in fact plenty of these people will solely wear this brand involving shoe while running, taking walks, or doing other different types of fitness exercises.
Individuals that locate a shoe that loves them back, such as this brand from chaussure adidas femme pas cher Adidas, have a tendency to stay loyal to all of them, and it is obvious when contemplating an Adidas Supernova assessment, that those who use this shoe have the infinite love affair using this type of type of shoe. Reading a guide of this nature absolutely intrigues the reader into wondering if this shoe is very what all the hype is about, but having a mass of positive reviews, being elected an editor's collection of a famous running publication, definitely can inspire one to buy some these shoes. Those that buy some generally end up leaving inspiring reviews of their own.
Seldom is there a shoe that receives as much as love as the adidas noir homme Supernova, it is loved not only for the comfort it provides, but the durability, superior levels regarding cushioning, and the incredible colors and styles available. These shoes can besides be worn for health and fitness training, but also for a comfortable stroll around the mall-they go well with a pair of skinny jeans or shorts. Furthermore, Adidas has made this particular awesome shoe for people alike, making it a straight more superb shoe. On the other hand, out of all in the Adidas Supernova running shoes and boots, I must admit that my favorite is the Adidas Supernova Sequence FOUR. It won Running Network's Very best Motion Stabilizing Shoe Show up 2011. This year's model has had significant adjustments made.


Special Notice – I am bringing this item around because the 540 Lumen Model on sale right now for over 40% off. While I recommend lower quality lanterns like the Etekcity 4 pack for a quantity approach, literally nothing on the market competes with The Siege Lantern from a quality stand point. At this price this lantern or two or them belongs in your Black Out Kit. It is also an exceptional item for camping, daily use on the back porch, etc. To put this sale in perspective right now the 540 Lumen Siege Lantern is on sale for only 6 bucks more than the 200 Lumen model!
Today's TSP Amazon Item of the day is the Streamlight Siege Lantern. It was recommended recently in a comment here at the TSP blog, so I checked it out. Wow am I impressed, how about more than 1550 reviews with 4.9 stars over all. You just don't see many products so highly rated on Amazon.
Of course it is what you should expect from Streamlight, as many of you know I have recommended the Streamlight Stylus Pro for a very long time. In fact I first recommended that light all the way back in 2011.
What I love about this lantern is that is if first and foremost LED based which yields a very long battery life. Additionally it has three white light settings so you can run it low and really make it last a long time or bright when you need it.
These belong in your black out kit, the stuff you go to first when the lights go out to get your bearings and decide if you want to go to a generator, battery back up, etc. They are awesome for camping as well of course.
The light also has a red light setting, this is really good for not screwing up your night vision, it would be great for night time fishing for instance. Wonderful for lighting up your tent, etc. It wouldn't be a bad thing to keep one out in an out building or say a chicken coop that is without power either for when you need to go do something in the dark.
It comes in three configurations, a 3 AA cell model that maxes out at 200 Lumes for about 25 dollars, a 3 D cell model that maxes out at 540 Lumes and sells for 62.00, and a rechargeable version that provides a whopping 1100 Lumes but will set you back an equally whopping 98 dollars.
I personally see the 3 D Cell version as the best bang for the buck here. but I wanted to make you aware of all three options. I would recommend running good quality Duracell batteries in it as well. The other option for those that use Steven Harris approved Enloop Batteries in AA is get the AA Model or get these AA to D adapters for the D Cell model. These are my favorite AA to D adapters because you can run 2 AA batteries in each one, which is more practical capacity wise.
In the end remember though that the Streamlight Siege Lantern is pretty darn efficient in battery use so don't over sweat the need for rechargeable. The way I run my BOK (black out kit) gear is as follows. I use Duracell Alkaline Batteries which to me are the gold standard. So when I need it, I KNOW it will work. I then switch to using rechargables if the situation lasts long enough to necessitate it.
King Arthur: Go and tell your master that we have been charged by God with a sacred quest. If he will give us food and shelter for the night, he can join us in our quest for the Holy Grail.
French Soldier: Well, I'll ask him, but I don't think he will be very keen. Uh, he's already got one, you see.
Sir Galahad: He said they've already got one!
King Arthur: Are you sure he's got one?
French Soldier: Oh yes, it's very nice!
Amazon has the D-cell model of this lantern on sale today in the deal of the day for around 27 dollars.
Actually some of the best energy packed alkaline AA batteries are from Ikea and Costco's Kirkland brand.
Another great video showing how Costco & Ikea batteries have more power packed into them than Duracell or Energizer.
PS – Watch this guys other great videos, its both educational AND entertaining. If Jack had a crazy uncle from Canada, this would be the guy.


Kaara/Masala Biscuit - Institute of Mushroom Science - Mandya manufacturing : https://www.deccanherald.com/content/658052/mandyas-mushroom-man-mission-promote.html https://m.dailyhunt.in/news/india/english/deccan+herald-epaper-deccan/mandya+s+mushroom+man+on+a+mission+to+promote+its+nutritional+values-newsid-81309283 Ramakrishna, who has established the "Mushroom Science Centre" in Mandya, has been successful in bringing together the mushroom growers of Mandya, Mysuru and Tumakuru districts. Ramakrishna was affected by polio when he was two years old. However, his disability has not deterred him from pursuing his goal. Initially, he was serving the Education department as a computer operator. He tendered his resignation three years ago and is now successfully into mushroom cultivation. I ate some today, it's tasty - typical Masala biscuits. Sold at: vegetable society shop..


In a sight that's not been seen in these here parts since the Seventies, animal lovers have expressed delight that wild zebras have once again returned to Wivenhoe Woods.
The news first broke last week when nature spotter Ronny Hotdog claimed that he'd seen a zebra cavorting with his dog Sergio – a claim that wasn't believed by anyone and resulted in Ronny being banished from the village for life. However, the revelation was ruled to have been true when nature bounty hunter David 'Boaty McBoatface' Attenborough visited the woods and saw for himself the wonderful phenomena.
Asked as to why he thought the dogs on stilts had returned to the Woods, McBoatface added: "I suspect the recent dry spell has forced the lions from Chelmsford and Witham to go further afield than Costcutter for their tea, which in turn means we get to see this glorious sight once again".


I never thought I would see a cloud more terrifying than the previous one that promised a storm at sea. Yet, here I am, staring at a thick, hazy formation in the distance that's causing the hair on my arms to stand on end.
The cloud is horrific, but it's hovering over a landmass that Trent says is Ireland. If we go around that mass, we'll reach Liverpool. We're hardly a day or two from our destination, at this point.
But not one of us has moved to steer the ship in that direction. We don't know how close we want to get. It's not because we're afraid of lightning, as there doesn't seem to be any. We aren't afraid of another storm, either; a storm cloud isn't at all what's obscuring an entire country from our view.
The cloud isn't gray or black. It's purple. A dark, terrifying purple. The dense, oddly-colored fog covers the ground and stretches hundreds of feet into the sky, gradually dissipating and losing its density as it rises. Even from this distance, we can see thick funnels forming like upside-down tornados, spinning into the sky above.
It's different, seeing this fog in person. Yes, it was terrifying on the news. I worried greatly for Sara when I first saw the footage of the Renewer's effects in Australia. But here... here, mere miles from the Renewer's impact, separated by nothing but a few miles of water... It's another experience entirely.
I know we have to move toward it. We can avoid the cloud and circle Ireland. I just can't muster up the courage to steer our boat into the unknown. Even Trent and daring Jess are silently staring.
Someone has to be brave enough for the rest of us. I'm trying.


Thursday on the 3rd floor of Mondragon (91 Albert street.) for 7:30 PM, featuring Author, Media Critic Barrie Zwicker & Fromer CBC jounalist, Editor of Canadian Dimension (www.canadiandimension.com) Leslie Hughes will be discussing 9/11.
This is a prime location to get together and plan possible actions for the anniversary!
It's all Barrie Zwicker's fault. He was the first media professional on the planet to start poking holes in the Bush administration's "Official Conspiracy Theory", on cable TV. He's Canadian, so, it must be his fault!
It's funny... these TV anchors are so... different compared to say, Hannity & Colmes, for instance.


The New Version Of The Crystal Radio Initiative Calculator Is Out!
The new version of the Crystal Radio Initiative Calculator boasts a completely redesigned front end, making it even easier to use!
The Crystal Radio Initiative Calculator now features measurement units selection, reducing the clutter on screen and allowing you to display only the units that you're working with.
Fully integrated coil analysis – enter your measured frequency for the Magnification Factor section and the calculator will take care of the rest!


text:
Waqar to be bowling coach for Sunrisers
Sunrisers Hyderabad have roped in legendary Pakistan pacer Waqar Younis as its bowling coach for the upcoming Indian Premier League in April-May.'One...
Sunrisers Hyderabad have roped in legendary Pakistan pacer Waqar Younis as its bowling coach for the upcoming Indian Premier League in April-May."One of the greatest fast bowlers of all time, Waqar Younis will be the bowling coach for SunRisers Hyderabad!" the team said in a tweet.Younis was bowling coach of Pakistan and national coach till mid-2011. Sunrisers, who took over the Hyderabad franchise from Deccan, have Tom Moody as their head coach and Kris Srikkanth as their team mentor.Younis' wards in the Hyderabad team will include South Africa's Dale Steyn, Ishant Sharma, Clint McKay and Sudeep Tyagi. The 41-year-old picked 373 wickets in 87 Tests. His ODIs tally read 416 in 262 matches.


Fantastic news to see our colourful work at Greenwich Millennium Village, crafted alongside our collaborators at Sto, recognised on the Architects' Journal Specification Awards shortlist in the Colour and Finishes category.
We updated the award-winning Masterplan initiated by Ralph Erskine in the late 90s. We embraced Erskine's approach to colour with a rainbow spectrum of finishes of our own for our 1,746-home scheme.


text:
Jobbik's Unholy Alliance
November 10, 2013 /3 Comments/in Featured Articles /by Colin Liddell
It seems that these days hatred, and the right to use it, even in defence of one's nation, race, and culture, has to be offset by plenty of misplaced love. This is the take home message from Gábor Vona's recent trip to Turkey, where the president of the Hungarian nationalist party Jobbik has been declaring his "Eurasian love":
I didn't come here to talk to you about the transitory subject of diplomatic and economic relations. Others will do that on behalf of me. I came here to meet my brothers and sisters, to offer a fraternal alliance and bring you the good news: Hungarians are awakening. Our common mission and the universal task of Turanism [see also Hungarian Turanism] are to build bridges between East and West, between Muslims and Christians, to be able to fight together for a better world – to show to the world that Christians and Muslims are not enemies, but brothers and sisters. No one can accomplish this mission more effectively than Hungarians and Turks because we are connected by common blood.
That's all we need, European nationalist parties endorsing the very people most bent on colonizing and destroying Europe. Turkey, let us remember, is hostile to Greece and Golden Dawn, supports the Islamic jihad in Syria (along with Israel and the USA), harbours Chechen terrorists, and is seeking to extend neo-Ottoman influence in the Balkans through supporting ethnic cleansing in Kosovo. And this is the country that Jobbik wants to French kiss and take home to meet its mother!
Of course, "Love" is not a word usually associated with Jobbik. Thanks to the antinationalist bias of the mass media, Jobbik is better known for its hatreds of Jews, Gypsies, and the various nationalities that surround the ill-drawn borders of the Hungarian nation.
There is nothing wrong with hatred in itself. It can be good or bad, depending on circumstances; just or unjust. Without hatred of that which harms nothing can survive. So it is quite possible that Jobbik may be justified in some if not all its hatreds.
But there are two problems with Vona's hands-across-the-Bosporus approach. The first problem is the need, as shown here, to apparently offset sincere and possibly justified hatred of Hungary's enemies with an insincere, contrived, or simply misplaced love for something else. The second problem is the mythic form of history and nationalism that Jobbik is indulging in, as opposed to actual history and reality.
This offsetting of hate with 'love' has been seen before. The UK's English Defense League, not content with simply loving itself (whatever its faults) and hating the colonization of the country by Islam, felt a need to declare its undying love for Israel and homosexuality into the bargain, a policy that they perhaps filched from Geert Wilders, who has enjoyed considerable success with it in "detoxing" his anti-Islamic message in an atmosphere of political correctness.
Such moves seem designed to say, "Hey, we're not just about the hate, y'know. We've got some of the warm, gushy stuff as well."
But assuming that it's more than this, what could possibly be motivating Jobbik, a search for actual allies and support? Vona's recent declarations are somewhat suspicious in that they seem to reflect the Eurasian geopolitics that the Kremlin is currently experimenting with:
In order to create a new value system and build a new strategy for the future it is paramount to simultaneously carry both the European and the Asian point of views. European practicality and the contemplative spirit of the East should be harmonized. I see three nations that may be suitable of such a harmonization: Russia, Turkey and Hungary. These are the three peoples that due to their history, and destiny preserved both European and Asian values. Therefore, the new Eurasian alternative should be articulated by these three nations.
This sounds like something Alexandr Dugin could have come up with, and well may have. It reminds us that, whenever considering the complex geopolitics of Eurasian states, it is always necessary to filter things through a vast amount of historical and geographical knowledge. That will alert you to the possibility that one thing may have something to do with something else not being reported on at the moment, like the fact that Russia has recently had a few difficulties with the Ukraine, which is just one of several countries that Jobbik has an ancestral beef with because it occupies lands that were once occupied by Hungary.
The idea of Hungarian history that Jobbik promotes is an extremely selective and distorted one, and is therefore guaranteed to cause problems. It is also the reason why Jobbik is seeking out such unlikely bedfellows. At the heart of this view is the idea of Turanism, the notion that the Hungarians are essentially a Turkic people from Central Asia ("Turan").
There is some truth in this, and it is in fact a part of the national story, although only one part. It is nevertheless quite a distinctive and inspiring part of the national story, creating a sense of uniqueness and pride while also explaining the neighbouring enmities. But this narrative, on its own, is also highly distorting as it downplays the European elements of Hungarian identity – the Germanic, the Slavic, even the Catholic – which clearly outweigh the Asian elements.
In some way, Turkey, the country with which Vona craves mystic union, is as much a myth as Jobbik's own preferred "Khanate of the steppes." Turkey as it is now understood, essentially came into being in the 1920s, when the blonde-haired, blue-eyed Mustafa Kemal earned the title of Ataturk ("Father of the Turks") by creating the streamlined and simplified idea of a modern Turkish national state out of the ruins of a polyglot Empire that had no specific national identity. To achieve this, all sort of omissions and fabrications were of course required.
But back to Hungary: The idea of Greater Hungary that Jobbik espouses is damaging not just to the reality of Hungary, which is a much more European country than Jobbik admits, but also damaging to Europe in general, both as a concept and actuality.
First, it weakens the idea of a collective European identity with clear borders and limits; while also suggesting that Europe can Europeanize whatever the world throws at it — a very dangerous idea in this day and age. It must be stressed that the Europeanization of the original Magyars, a comparatively small group, took centuries, involved isolation from the steppes, and required repeated racial admixture with European populations.
As Tom Sunic stresses, the last thing Whites need is a continuation of petty European nationalisms.
The interethnic resentments in Eastern Europe … are very pronounced, and they often turn ugly. Thus the national identity of a Polish nationalist, who may otherwise agree on all points with his nationalist counterpart from Germany—such as their common criticism of globalism, their anticommunism and their antiliberalism — is often accompanied by strong anti- German feelings. One third of ethnic Hungarians — more than 2 million — living in Slovakia, Serbia and Romania typically define their national identity through their resentment of the peoples among whom they live. Czech nationalists seldom like to discuss with their German counterparts the issue of the forcible deportation of 3 million ethnic Germans from Czechoslovakia after World War II. Despite some semblance of peace between Serbs and Croats, these two ethnically similar, neighboring peoples identify with two entirely different historical narratives and two completely different and mutually hostile and exclusive victimhoods. (Tom Sunmic, "Ethnic Identity versus White Identity: Differences between the U.S. and Europe," The Occidental Quarterly, Winter 2012–2013, 51–64.)
Alongside these mistaken ideas, is the notion that the surest way to get ahead in a world that hates Whites is to stop identifying as White. By rebranding themselves as "Turans" and Asians, Jobbik obviously hopes to qualify for all the privileges that non-Whites enjoy – the freedom to hate and be racist, first and foremost among them. Identifying themselves with Islam offers the same advantages, especially if they make the effort to criticize the anti-Muslim parties that are common in the rest of Europe.
The trouble here is that the Hungarians are in fact too White and the world is unlikely to allow them to get away with this. Jobbik's negative attitudes toward Jews and Gypsies will ensure that, regardless of their temporary expediency for the likes of Russia and Turkey, the world will still continue to consider them as evil, White racists.
The idea that hate needs to be balanced by at least an equal amount of love expended elsewhere may well have something in it. In that case, it would make much better sense both tactically and spiritually for Jobbik to throw away its petty, divisive nationalism and myths of Eurasian glory, and instead love its neighbours in the European family of nations and direct its hatred accordingly.
https://www.theoccidentalobserver.net/wp-content/uploads/2018/06/TOO-Full-Logo-660x156-1.png 0 0 Colin Liddell https://www.theoccidentalobserver.net/wp-content/uploads/2018/06/TOO-Full-Logo-660x156-1.png Colin Liddell2013-11-10 00:00:352013-11-10 00:02:08Jobbik's Unholy Alliance