text:
Mayweather Says Pacquiao Rematch on Cards This Year
Mayweather earned an estimated $220 million from his first fight with Pacquiao. Former world welterweight champion Floyd Mayweather said Saturday he will face Manny Pacquiao later this year in a rematch of their 2015 superfight.
In a posting on Instagram, Mayweather said he will come out of retirement to fight Pacquiao, three years after scoring a comfortable points victory over the veteran Filipino.
"I'm coming back to fight Manny Pacquiao this year another 9 figure pay day on the way," Mayweather wrote on Instagram. No further details were given.
A video accompanying the post showed Mayweather and Pacquiao talking to each other at an event but their exact exchange of words could not be heard clearly.
Mayweather earned an estimated $220 million from his first fight with Pacquiao, which finally took place after years of on-off negotiations.
Pacquiao earned around $100 million from the contest.
Mayweather retired later in 2015 after his 49th victory but returned to the ring last year for a lucrative victory over mixed martial arts star Conor McGregor.
The 41-year-old's announcement on Saturday comes as Las Vegas prepared to stage the biggest fight of the year, the middleweight showdown between Gennady Golovkin and Saul "Canelo" Alvarez.
While Mayweather's remarks on Saturday are the latest in a long line of mischievous social media postings hinting at a comeback. Speculation about a rematch with Pacquiao has rumbled for years.
Pacquiao, who claimed to have been hampered by an injured shoulder in his first fight with Mayweather, has long talked enthusiastically about a rematch.
"Mayweather? If he decides to go back to boxing then that is the time we are going to call the shots," he said in July.
"I have the belt, so it's up to him. If he wants to come back in boxing let's do a second one."
Pacquiao (60-7-2, 39 knockouts) made a return to the ring in July after a one-year absence, defeating Argentina's Lucas Matthysse in the seventh round in Kuala Lumpur.
http://feedproxy.google.com/~r/breitbart/~3/f72pDqfuIW8/
Previous Previous post: Female cyclist who flipped off Trump's motorcade is running for office
Next Next post: MS-13 Victim's Mom Honored by Trump at SOTU Killed When Struck by SUV


text:
package edu.msu.nscl.olog;

/**
 * TODO
 * 1. The absence of the propertiesResource similar to logbooksResource and
 * TagsResource.
 * The key, value pairing makes it different from simple tags/logbooks but we
 * might like the ability to
 * - retrieve a list of all properties
 * - delete a property completely from all logs
 * - add/delete a property to a single log
 * all these can be implemented simply copying the tagsResources
 *
 * the operations which include setting the property value for multiple logs
 * is what will require additional work.
 */

/**
 * Service Description
 *
 * .../logbooks
 * GET      retrieving the list of logbooks in the database
 * POST     creating multiple logbooks
 *
 * .../logbooks/<logbookName>
 * GET      retrieve one logbook
 * PUT      create/replace once logbook
 * POST     update a logbook
 * DELETE   delete one logbook
 *
 * .../logbooks/<logbookName>/<logid>
 * PUT      add logbook link to the log
 * DELETE   delete logbook link from log
 *
 *
 *  .../tags
 * GET      retrieving the list of tags in the database
 * POST     creating multiple tags
 *
 * .../tags/<tagName>
 * GET      retrieve one tagName
 * PUT      create/replace once tag
 * POST     update a tag
 * DELETE   delete one tag
 *
 * .../tags/<tagName>/<logid>
 * PUT      add tag to a log
 * DELETE   delete a tag from a log
 *
 *
 * MISSSING
 *  .../properties
 * GET      retrieving the list of properties in the database
 * POST     creating multiple properties(property value in payload)
 *
 * MISSSING
 * .../properties/<propertyName>
 * GET      retrieve one propertyName
 * PUT      create/replace once property(property value in payload)
 * POST     update a property(property value in payload)
 * DELETE   delete one property
 *
 * MISSSING
 * .../properties/<propertyName>/<logid>
 * PUT      add property to a log
 * DELETE   delete a property from a log
 *
 *
 * .../logs
 * POST     create multiple log instances
 * GET      query/retrieving a collection of Log instances
 *
 * .../logs/<logId>
 * GET      retrieve single log
 * PUT      create/replace a single log
 * POST     update a single log
 * DELETE   delete single log
 *
 */

redpajama_set_name: RedPajamaGithub


text:
Ernesto Cristaldo, född den 16 mars 1984 i Asunción, är en paraguayansk fotbollsspelare som spelar för The Strongest. Vid fotbollsturneringen under OS 2004 i Aten deltog han det paraguayanska U23-laget som tog silver.

Källor
 Denna artikel är helt eller delvis översatt från motsvarande artikel på engelska wikipedia.

Externa länkar
Sports-reference.com
 Argentine Primera-statistik

 Ernesto Cristaldo video

Paraguayanska fotbollsspelare
Paraguayanska olympiska silvermedaljörer
Olympiska silvermedaljörer 2004
Tävlande vid olympiska sommarspelen 2004 från Paraguay
Tävlande i fotboll vid olympiska sommarspelen 2004
Män
Födda 1984
Levande personer
Spelare i Cerro Porteño
Spelare i Newell's Old Boys
Spelare i The Strongest
Spelare i Copa América 2004
Personer från Asunción

redpajama_set_name: RedPajamaWikipedia


This releasable Bulb Planter takes the place of the old design. I haven't ever liked the hand bulb planters because I think they're pretty messy. You screw the bottom into the ground, pull up, drop in the bulb and then you have to flip it over and force out the soil. This one is way better. You do all of the above but then just squeeze the handle and the soil falls away. Soooooo easy.
Notify me of updates to Bulb Planter releasable handle 9 1/4"


Island Packet set the benchmark for cruising yachts design almost from the get go. Their formula was to match the aspects of speed and comfort with performance, 'sailibility' and safety. Their new motorsailer extends this beyond their sail experience; they have another winner for sure.
The motorsailer market seems to have legs; its traction is evidenced by the Island Packet SP cruiser. Where else might aging sailors go? It seems like a natural progression though today I suggest the niche may be broader than that? High fuel prices have caused many to evaluate a hybrid sail/power option and the Island Packet SP bridges the gap between sail and power or trawler option. For a disciplined sailboat reviewer, the transition was a snap.
That said, the time aboard confirmed for me that there were many advantages of this production motorsailer; it offers the ability to sail in comfort or easily cruise under power at 8+ knots. Incidentally, range for this boat is upwards of 1,000 nautical miles using the engine alone when driven by the 110 hp Yanmar.
With sailing knowledge in hand, Johnson and the design team worked to develop a new hull form that provides dividends in speed both under sail and power. Broad stern sections and less dead rise typify the hull. Of note is the retention of the well-known Island Packet Full Foil that gives protection to the prop and rudder while lowering the center of gravity in its shoal draft configuration.
But clearly this boat will get strong adoption as well as offering a 'year-extending' option included. The interior is large, welcoming and offers great liveaboard space. The larger than normal superstructure, some call the 'dog house', takes a wee bit of getting used to, but once aboard you get the dividends from increased headroom, lots of interior volume, great visibility and (believe it or not) easy handling – both sailing and under power. For some one (like me) who is used to sitting on the rails getting wet, it's amazing how well you can trim and feel this boat from inside. It handles really well.
As I researched the crossover market that the motorsailer addresses, it's clear that the focal point for this boat is the helming station. And here, quite frankly, the large helm area complete with swivel chairs and wonderful visibility aided by serious windshield wipers does not disappoint. Right at hand, on a well laid out console, are electric controls for sail trim, alongside engine and anchor. Our test boat came with a suite of Raymarine electronics complete with remote autopilot that allows control of the helm anywhere aboard.
The hull is hand laid solid fibreglass with the Polycore decks fastened through a wide flange mechanically and using adhesive. From the dock you immediately notice two neat cockpits, one mid/forward and the other aft. The raised forward cockpit also boasts the ability for a large removable table.
The aft deck cockpit is a nice space, protected with a hard top. With this much additional buoyancy aft, the potential for yaw was countered by the installation of two skegs aft. Additional controls for sail trim are to starboard complete with stoppers and electric winch. When aft, one needs to get used to the high bulkheads that support the cabin top, but as mentioned previously the space dividends are wonderful.
Next, you'll see an integrated swim platform that's molded right at the waterline. Access to the deep and well-protected aft deck is through a transom door to starboard.
Moving around this boat on deck is safe and easy with decks wide enough to traverse forward with neat stainless steel pipe rails guarding your way. The wide bow pulpit complements this.
From the sailing side I was keen to see how well Island Packet had thought out their running rigging and trim options. It's interesting to see how all the halyards and sheets are run through conduits minimizing lines on the deck back to new Lewmar electric sheeting StoWinches specifically designed for this boat. They work flawlessly considering the number of turns and potential friction points that present themselves. It's neat stuff and could be quite easy to get used to.
Sailing with 15 knots apparent, we were easily able to hit 6 knots. This boat is not designed to sail tight upwind; it needs to sail freer than one of my ilk would certainly be used to. That said, the smaller sail plan (714 square feet), when set up properly, seems to work well driving the boat forward considering the pilot house windage and the overall boat's weight. Under power, the stability you need is there. However, we would seriously consider the reacher option package that augments range and speed over ground.
Another early observation counted eight opening ports, two hatches, and two dorade-type vents all providing adequate ventilation.
Entering the pilothouse, you are completely overwhelmed by the bright interior complements for the side windows and sloping windshields forward. The captain's chairs can swivel to join in on the l-shaped dinette. Ventilation characteristics are enhanced though the opening of the large windows while privacy can be guarded using the louvered Oceanair shades. The walk through the galley is neatly tucked forward to port, three steps below the main salon and features fridge/freezer compartments, a two-burner stove, double stainless steel sink and wonderful storage throughout.
The bright master cabin is forward with its "island" berth that allows easy movement to access the two large handing lockers. There is a separate entrance to the head to starboard boasting a separate shower stall, large head and again more storage.
Something I personally liked was the small workstation that lies just aft that could easily handle a 22" flat screen, computer and printer. Obviously, it can double as a nav station but my sense is that the paper charts will be up top on the dinette table (if needed at all) while underway.
Further aft the double berth guest cabin is large and bright. The center berth allows for easy access to the engine compartment if needed.
All in all, the Island Packet SP delivers!


Here you can see local times in different time zones all around the world – in real time. The clock on your device must be set correctly.
If you need an advanced functionality, please let us know using the "Feedback" button on the right.
Like it? Share with friends using the special widget on the left side (bottom for mobile) of the page.


As guitarist for indie/punk power-trio fIREHOSE, Ed Crawford had a following. After all, the band made five albums on SST and Columbia, and was well known to a generation of kids, thanks to songs like "Brave Captain" appearing in skateboard videos. fIREHOSE's road-warrior status stemmed from bassist Mike Watt and drummer George Hurley's musical legacy in punk legends The Minutemen (which ended when guitarist D. Boon died in a van accident).
Most are not aware, however, that although Crawford's band nickname was "Ed fROMOHIO," he feels close to Pittsburgh. "I grew up in Toronto, Ohio, a town of 7,000 people near Steubenville," he says. "Every Saturday, our family would drive to Pittsburgh. I went to Steelers, Pirates and Pens games, taking advantage of the good times."
Crawford studied trumpet and was offered a scholarship to Carnegie Mellon, but opted for Ohio State instead. After seeing the Minutemen twice in Columbus, he developed an admiration for their style. In 1986, when Camper Van Beethoven's bassist mentioned a rumor that Watt was looking for a new guitarist, Crawford dropped everything to fly to California. He visited Watt's San Pedro apartment, convinced Watt and Hurley to form fIREHOSE, and history was made.
"Sonic Youth had just put out Sister," Crawford says, "and they asked us to open their tour, which was a big break because they were drawing thousands at the time." But tensions grew after fIREHOSE's major-label signing; at a gig in North L.A., Watt told Crawford and Hurley he was ending the band.
Crawford moved to Chapel Hill, living in a house with Superchunk drummer Jon Wurster, and formed a band with Wurster and bassist Jenni Snyder called Grand National. Snyder and Crawford were called up by alt-country hero Ryan Adams to tour in a lineup of Whiskeytown for six months, and eventually Crawford hooked up with Southern Culture on the Skids, progressing from roadie to occasional trumpet player to touring rhythm guitarist.
However, Crawford's parents were approaching their mid-80s, so he convinced them to move up to Pittsburgh to be near his siblings. That put Crawford on a bar stool at Gooski's ("we usually went there after Southern Culture shows"), where he met stand-up bassist Brian Richmond of the Working Poor this past November and struck up a collaboration. "I've always wanted to do acoustic stuff, and Brian was the man to fill the bill," he says. "We're just a two-piece right now, and probably will be 'til we need a third."
So if you see a guy onstage at Gooski's playing acoustic guitar with Richmond on Sat., March 1, with Chris Cannon opening, you don't have to wonder who he is -- that's Ed fROMOHIO.


text:
500 £10 Just Eat vouchers up for grabs as part of Deliver-Blue Monday
Google is threatening to pull its search engine from Australia - here's why
By Rhona Shennan
Friday, 22nd January 2021, 9:44 am
Updated Friday, 22nd January 2021, 9:44 am
This is why Google is threatening to pull some of its services in Australia (Photo: Shutterstock)
Google has threatened to make its search engine unavailable in Australia if the Australian government goes ahead with plans to make the tech giant pay media outlets for their news content.
In the world-first law, Google, Facebook and potentially other tech companies could be made to share royalties with news publishers.
The government argues that because tech platforms, like Google, gain customers from people who want to read the news, then they should pay newsrooms a fair amount for their journalism.
The proposed code of conduct was drawn up by consumer rights watchdog the Australian Competition and Consumer Commission (ACCC).
Google and Facebook have both pushed back, stating that the law would make them withdraw some of their services in Australia.
This would mean that the 19 million Australians who use Google each month would no longer be able to use Google search. Additionally, the 17 million Australians who use Facebook every month would be unable to see or post any news articles on the social media platform.
'No choice but to make Google Search unavailable in Australia'
Google issued an ultimatum to the Australian government, stating that it would not be able to continue offering its search services in Australia if the code goes ahead.
Mel Silva, Google Australia's Managing Director, appeared at a public hearing of the Senate Economics Legislation Committee that is reviewing the proposed new law, called the News Media Bargaining Code.
She said that Google is "committed to achieving a workable News Media Bargaining Code", but in its current form, the code is "unworkable".
"If this version of the code were to become law, it would give [Google] no real choice but to stop making Google Search available in Australia," Silva said.
She explained that there "is a workable path forward" and suggested some changes that could be made to the bill.
'Not compatible with how search engines work'
Silva said: "There are three areas of concern which I will touch on shortly, but the most critical of these is the requirement to pay for links and snippets in Search.
"This provision in the code would set an untenable precedent for our business, and the digital economy. It's not compatible with how search engines work, or how the internet works, and this is not just Google's view - it has been cited in many of the submissions received by this inquiry."
She ended her statement by saying: "With only slight amendments, the code can support Australia as a world leader in news innovation, media diversity, and consumer choice without sacrificing the benefits that Google provides to large and small businesses in Australia."
'We don't respond to threats'
Australian Prime Minister Scott Morrison hit back at the announcement from Google, stating: "We don't respond to threats."
Speaking to reporters in Brisbane, Morrison said: "Australia makes our rules for things you can do in Australia.
"That's done in our Parliament. It's done by our government. And that's how things work here in Australia."
Facebook and WhatsApp users warned to change passwords after rise in phishing scams
Full list of HMV stores closing down - and the ones that have been saved
Novak Djokovic 'disappointed' after losing visa appeal - what he said about decision
We've been charging our phones wrong all these years - this is the best way
More from Crawley Observer

redpajama_set_name: RedPajamaCommonCrawl


The problem with health costs is that the majority of consumers do not directly bare any of the financial burden of their health care.
Initially health insurance was designed to be used for HUGE, 1/100, expenses like getting hit by a car. But now it is used for EVERYTHING including Tylenol pills at the hospital. Since the consumer rarely sees the cost o their health care, nor do they pay for it, they have no reason to shop around or even care how much something costs. So hospitals can essentially charge whatever they want, and usually get a way with it. Patients can easily get charged $20 for generic Tylenol, or acetaminophen pill.
The consumer has no reason to think of or care how much something costs, because "they are not paying". So you get to the point where not only do people make poor decisions on their health care, they make poor lifestyle decisions which impacts their health.
Example: smokers; when they get sick because of their cancerous habits, insurance will be paying more for the smoker's health care than the smoker ever put into the system. Therefor, that extra money must be paid by other people, usually the "healthy" insurance company customers. So essentially, the healthy are subsidizing the habits of the sick.
These examples and thoughts prove the cost problems of single payer health care systems. Normally only socialized medicine or government run health care systems are thought of as "single payer" heal care systems. But the argument can be made that the current Unites States system is also a single payer system where the majority of the costs are payed by a minority of companies like Blue Cross Blue Shield, Aetna, Humana, and even the Government.
In fact Medicare and Medicaid are both "socialized" or "single payer systems". Many people support only "private" systems. Those same people will also frequently support Medicare for their retirement. I believe these people are hypocrites. You cannot say you only support private systems while also supporting medicare.
It is all just a mess right now. The ideal solution would be a combination of many things, but the consumer needs to take a larger role in their health care decisions. They need to take more of the financial responsibility so that their habits change.
Then there are people who abuse the system like going into the ER with a fever and no insurance. That is a very expensive visit to treat a fever. Most doctors wouldn't accept that visit since the patient couldn't pay, nore would CVS give out medication for the fever. But the ER is required to by law. I don't know if the government covers that or the hospital eats the costs, but either way, the consumer (you and me) end up paying. Either from the hospital passing on higher prices to insurance companies which cause higher insurance premiums, or the GVT raises taxes.
Medicare Part D is also a huge problem. Seniors expect Medicare to pay for all their fancy drugs. Medicare was never intended to pay for drugs. In fact all these fancy drugs came on the market after the program started, actually, they started to come after Medicare Part D was passed in 2003. Why should I (the tax payer) be paying for their $100+ a day pills? I am not saying they should die, I am saying humans have a life span, with these drugs we are pushing that life span well beyond what it used to be.
The holly grail is the question "do we deserve health care or not". We all die. Should a wealthy person get better care because they are wealthier? People argue they shouldn't. But if they really want to argue that, than they also need to agree that the middle and lower class should be entitled to the same lavish housing and food that the higher class has come to enjoy. And they should agree that the taxpayers should pay for that. Food and shelter is just as needed for survival as health care, if not more.
The purpose of health insurance, like all insurance, is to spread out costs due to accidents and random natural occurrences. Insurance should cover 100% of medical bills. The hospitals charge whatever they want because they are for-profit corporations and they know that insurance companies will pay up. Smoking should most definitely lead to the revocation of at least part of health insurance benefits.
You can blame the for-profit health insurance companies for their insane premium policies. They don't increase the cost of health insurance to smokers until the smoking impacts their health which is only when they get older. I agree that it is wrong for the healthy to subsidize the unhealthy habits that lead to sick people.
I disagree that these prove the cost problems of single payer health systems. I believe it demonstrates more about what happens when for-profit corporations are in charge of health care.
It would be unfair to put a different burden on the sick than on the healthy. Sick people that are sick due to conditions out side their control should not be charged more than healthy people because there was nothing they could have done to prevent the additional cost and hence is the purpose of insurance.
Many people go to the ER not because they are looking for cheaper care, but because it is their only option! Many MANY people cannot afford even the most simple of care. This is more proof of the need for socialized medicine and not of cheap jerks (not that they don't exist). I believe the hospital eats the cost, it would be ironic if they had uninsured patient insurance.
Medicare Part D is necessary because drugs are part of healthcare. I believe the expensive drugs aren't proof of problems with socialized medicine, it demonstrates the problems with for-profit pharmaceutical companies. Being for-profit encourages them to develop drugs that people must take for the rest of their life instead of curing them, and it encourages them to charge as much as they can to insurance companies including medicare.
Do we deserve equal health care? Yes. Do we deserve equal shelter and food? Absolutely. I believe the problem isn't the poor people wanting more than near zero, it's the massively disproportionately filthy rich wanting even more than they already have. There are no doubt people taking advantage of the current system poor AND mega-wealthy. Even after those people are stopped, no one deserves to be punished (or not rewarded) do to conditions outside their control.
Charlie, I have some responses to some of your points.
I agree that insurance should spread the costs of large bills due to accidents and natural occurrences. But they should spread the costs among others in a related group of individuals. Example: people in hurricane prone areas should spread the cost of hurricanes, and extreme sports enthusiast should spread the costs of body repairs due to accidents.
Insurance should NOT cover all of the costs. Consumers should cover most of their day to day bills through their own insurance, or out of their pocket. This is the only way that consumers will choose based on price/quality of health care, changing the cost structure, increasing competition, and making other life decisions based on the health care ramifications.
You can blame the consumers just as much for putting up with it.
Single payer systems reduce competition. Frequently, single payer systems also lead to longer waits, and reduced proactive care. On the other side, administrative costs are greatly reduced.
I agree. BUT, many sick people are sick due to their own decisions. Extreme sports, unhealthy eating, lack of exercise, extreme sports, smoking, etc..
The ER is also the most expensive option, all other things being equal. It is actually a cyclical argument: people cant afford simple health care, healthcare is expensive because people abuse the system.
I think it would be hard to argue that all of the drugs that seniors take are medically necessary. Additionally, I hate to say this, but there is a point at which it is time to bite the bullet, and allow a senior to die of old age. If there was a new drug that cost $1 Million a week, but could keep people alive for 2 more years, would it be fair for the US population to subsidize the cost of that for all seniors?
Do people who just want to watch movies all day deserve the same food and shelter as people who contribute heavily to society? Many things are outside of their control. But many things ARE within their control. What they eat, how they act, what activities they partake in, where they live, etc..
Installing Oracle r12: Oracle Installed? Installing Oracle r12: On To Linux!


Our government insists that all workers, where exposure to Hydrogen Sulfide (H2S) is real, be provided with appropriate training to stay safe from the gas. But, why exactly? What makes H2S so dangerous that every worker at risk of exposure needs special training?
Below, are a few ways our H2S Alive training course can prove a lifesaver for at-risk workers.
The main reason every at-risk worker needs the H2S Alive training course is the fact hydrogen sulfide, at high concentrations, loses its trademark rotten egg smell. At low concentrations (0.01 to 0.03 parts per million), hydrogen sulfide gas has a characteristic rotten egg smell that makes it very easy to detect. Workers, however, must understand that relying solely on that smell can be misleading given that at higher concentrations, the smell disappears and the gas becomes odorless. Only the H2S Alive training course can help workers understand and appreciate this change in H2S characteristics.
Another major reason why the H2S Alive training course is vital is that at high concentrations (between 4.3% and 46%), H2S can catch fire and explode without notice. It doesn't end there; hydrogen sulfide is incompatible with strong oxidizers such as chlorine triflouride and nitric acid. When the gas comes in contact with any of these compounds, it can react violently or ignite spontaneously. Finally, H2S can also react with rust or corrosion deposits on equipment to form iron sulphide. Iron sulphide is pyrophoric meaning that it can ignite spontaneously when exposed to air. Workers need the H2S Alive training course to learn about and protect themselves from these situations.
Short term exposure to H2S can cause a myriad of problems. At lower concentrations, patients experience irritation to the nose, eyes, throat, and lungs. Nausea, tearing of the eyes, and compromised sense of smell are also possible. At higher concentrations, respiratory paralysis, irregular heartbeat, collapse, and death without rescue are possible. Long term exposure, meanwhile, can cause reduced lung function, damage to the cardiovascular system, and neurological effects, including personality changes.
The H2S Alive training course is meant to arm workers with the knowledge to detect and shield themselves from the gas, as well as the skills to perform first aid and H2S rescue in the unfortunate event that they or their colleague is exposed.
H2S is a dangerous and deadly gas, but its hazards can be prevented. Don't wait until it's too late. Contact us today to enroll your workers in a H2S Alive training course.
Do You Know How To Properly Inspect Fall Protection Equipment?


Sales & Service of Gretagmacbeth on-line products in North America.
Long color grade change times?
Uncertainty of your color between reels?
The inability to document color throughout the reel?
Older unreliable color measurement system?
Customer complaints for off-color product?
Ambient light, web speed and normal flutter have no effect on the accurate measurement results.
The long life Xenon flashlamp (1 year warranty) is inexpensive.
Multiple displays of measurement results.
Base color and optical brighteners are measured separately. Therefore both components can be controlled independently.
Same as in lab: Stable color measurement data even when basis weight changes. Only the opacity changes.
Excellent results with spectral resolution of 1nm.


text:
У Святого Томаша () - найстаріша пивна в Празі, один з найстаріших пивних ресторанів Європи.

Історія

Карл IV надав право варити пиво монахам-августинцям в монастирі Сент-Томас, що в місті Мала (тепер територія Праги). Пивоварний завод був заснований в 1352. Перша згадка про нього датується 1358 роком, коли при августинському монастирі була відкрита невелика броварня. З тих пір історія ресторану та історія монастиря були невіддільні одне від одного. Спочатку пиво варили лише для потреб монастиря, але через короткий проміжок часу монахи-августинці почали постачати пиво на всю околицю. Будівля пивоварного заводу спочатку була дерев'яною, пізніше вона кілька разів перебудовувалася. У 1420 році, під час гуситських воєн, будинок броварні буквально звалився під тиском натовпу людей. Ресторану крупно пощастило лише раз - за часів правління імператора Рудольфа ІІ, коли пивоварня в Малій країні стала ексклюзивним постачальником пива королівському двору. В кінці 19-го століття, зал броварні став популярним місцем зустрічей богемних художників.

Починаючи з 1352 варили тут пиво спочатку для себе, а потім і на продаж. У той час про нього казали: "Після третьої скленичкі біля Святого Томашу і душу чорту продаси!".

Таке пиво варили аж до 1951 року, але зараз тут подають чудове чорне пиво «Браник», «Фердинанд», а також світле «Радегаст» і «Будвар».

Розташування

Ресторан розташований на Малій країні, поруч з Валдштейнським палацом і його знаменитими Валдштейнськими садами, на галявинах яких можна побачити павичів, які неквапливо прогулюються. Ресторан зберіг свій неповторний, старочеський стиль, який був притаманний йому з часів Карла IV. Недалеко від ресторану знаходиться Карлів міст, Празький град.

Інтер'єр

Реконструкції, що проходили в монастирі, неминуче приводили і до реконструкції ресторану. Саме тому в образі ресторану можна знайти елементи, що належали до періодів готики, ренесансу і бароко.

Кухня

Ресторан пропонує справжні домашні страви чеської кухні, живу музику і більше 10 сортів пива (світлого і темного). Є також літній сад, де можна чудово провести час і покуштувати різні страви, приготовані на грилі. Смажені ребра і стегна з дикого часнику, червона капуста з яблуками, філе свинини в картопляної скоринці з броколі у вершковому соусі.

Ресторан У Святого Томаша розрахований на 270 місць. Оркестрова музика і середньовічні готичні склепіння інтер'єру пивної залишать яскраві враження.

Як дістатися

Адреса «У святого Томаша»: Praha 1, Malá Strana, Letenská 12). Поруч метро "Малостранська". Трамвай № 18, 22, 23.

Посилання

 Pivnice U sv. Tomáše
 Pivovar U sv.Tomáše v Praze
 Pět hvězdiček u sv. Tomáše
 Brewery u Sv. Tomáše
 Pivnice u Sv. Tomáše

Пивні ресторани Праги


Algorithm-guided research on molecular phenotypes has uncovered nexuses of regeneration to discover targetable changes with high curative potential.
An ideal target for solid tumors is a protein that is pivotal to the perpetuation of cancer and only found in cancer.
So how do we mine for these valuable protein gems: by digging deep into the connections between the biology of regeneration and cancer with the help of our SeleCTR™ process and algorithm.
We delve into the biology of cells and tissues undergoing development or renewal in search of regenerative nexuses.
A regenerative nexus represents a core aspect of tissue regeneration. Nexuses must work in concert to maintain a capacity for regeneration, and, in the case of cancer, its ability to persist and return.
A cancer-specific protein change that governs a nexus, creates a High Curative Potential™ (HCP) Target.
The nature of an HCP Protein Target means it is likely to be retained as the cancer advances and is also likely to be shared between cancer patients. This creates the possibility of serving a broad population of patients with a reliably potent T cell therapy.
Independent clinical studies have reported the retention of shared HCP target gene expression in patients with metastatic disease.
Learn how we'll get from targets to therapies.


Stepping into an unfamiliar place for the first time can be a little intimidating and maybe even uncomfortable for some people – especially when it's a church. We get that, and have prepared our weekend services to be enjoyable and hassle-free. When you visit The Harbor, you can expect to feel welcomed and accepted from the moment you drive onto the property. You'll be warmly greeted/directed to our welcome area and treated to some fresh coffee (it is Sunday morning, after all). While there, you'll probably notice people from all different backgrounds and walks of life – maybe even some people you know. While in the lobby or the auditorium, volunteers will always be close-by to answer any questions and make you feel welcome any way they can. If you've got kids, you can check them in at one of our Kids Check-In stations, where dedicated volunteers will help ensure that your child will be safe while experiencing a fun, age-appropriate experience. Once in the auditorium, you will be encouraged by our passionate live-band and worship team, relevant and inspiring presentations of the Gospel, and life-changing times of prayer. You will notice that The Harbor is contemporary, up-beat, and simply put, fun, but more importantly, that it's a Christ-centered church. That's something we never apologize for – our church revolves around the message of Jesus and works hard at communicating it in a way that is authentic and life-changing. All in all, what you can expect at The Harbor is pretty much what you could expect when visiting friends – to be respected, taken care of, and to leave feeling that you're glad you came.


text:
function openerp_pos_models(instance, module){ //module is instance.point_of_sale
    var QWeb = instance.web.qweb;

    var round_di = instance.web.round_decimals;
    var round_pr = instance.web.round_precision

    // The PosModel contains the Point Of Sale's representation of the backend.
    // Since the PoS must work in standalone ( Without connection to the server )
    // it must contains a representation of the server's PoS backend.
    // (taxes, product list, configuration options, etc.)  this representation
    // is fetched and stored by the PosModel at the initialisation.
    // this is done asynchronously, a ready deferred alows the GUI to wait interactively
    // for the loading to be completed
    // There is a single instance of the PosModel for each Front-End instance, it is usually called
    // 'pos' and is available to all widgets extending PosWidget.

    module.PosModel = Backbone.Model.extend({
        initialize: function(session, attributes) {
            Backbone.Model.prototype.initialize.call(this, attributes);
            var  self = this;
            this.session = session;
            this.ready = $.Deferred();                          // used to notify the GUI that the PosModel has loaded all resources
            this.flush_mutex = new $.Mutex();                   // used to make sure the orders are sent to the server once at time

            this.barcode_reader = new module.BarcodeReader({'pos': this});  // used to read barcodes
            this.proxy = new module.ProxyDevice();              // used to communicate to the hardware devices via a local proxy
            this.db = new module.PosLS();                       // a database used to store the products and categories
            this.db.clear('products','categories');
            this.debug = jQuery.deparam(jQuery.param.querystring()).debug !== undefined;    //debug mode

            // default attributes values. If null, it will be loaded below.
            this.set({
                'nbr_pending_operations': 0,

                'currency':         {symbol: '$', position: 'after'},
                'shop':             null,
                'company':          null,
                'user':             null,   // the user that loaded the pos
                'user_list':        null,   // list of all users
                'partner_list':     null,   // list of all partners with an ean
                'cashier':          null,   // the logged cashier, if different from user

                'orders':           new module.OrderCollection(),
                //this is the product list as seen by the product list widgets, it will change based on the category filters
                'products':         new module.ProductCollection(),
                'cashRegisters':    null,

                'bank_statements':  null,
                'taxes':            null,
                'pos_session':      null,
                'pos_config':       null,
                'units':            null,
                'units_by_id':      null,
                'pricelist':        null,

                'selectedOrder':    null,
            });

            this.get('orders').bind('remove', function(){ self.on_removed_order(); });

            // We fetch the backend data on the server asynchronously. this is done only when the pos user interface is launched,
            // Any change on this data made on the server is thus not reflected on the point of sale until it is relaunched.
            // when all the data has loaded, we compute some stuff, and declare the Pos ready to be used.
            $.when(this.load_server_data())
                .done(function(){
                    //self.log_loaded_data(); //Uncomment if you want to log the data to the console for easier debugging
                    self.ready.resolve();
                }).fail(function(){
                    //we failed to load some backend data, or the backend was badly configured.
                    //the error messages will be displayed in PosWidget
                    self.ready.reject();
                });
        },

        // helper function to load data from the server
        fetch: function(model, fields, domain, ctx){
            return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all()
        },
        // loads all the needed data on the sever. returns a deferred indicating when all the data has loaded.
        load_server_data: function(){
            var self = this;

            var loaded = self.fetch('res.users',['name','company_id'],[['id','=',this.session.uid]])
                .then(function(users){
                    self.set('user',users[0]);

                    return self.fetch('res.company',
                    [
                        'currency_id',
                        'email',
                        'website',
                        'company_registry',
                        'vat',
                        'name',
                        'phone',
                        'partner_id',
                    ],
                    [['id','=',users[0].company_id[0]]]);
                }).then(function(companies){
                    self.set('company',companies[0]);

                    return self.fetch('res.partner',['contact_address'],[['id','=',companies[0].partner_id[0]]]);
                }).then(function(company_partners){
                    self.get('company').contact_address = company_partners[0].contact_address;

                    return self.fetch('product.uom', null, null);
                }).then(function(units){
                    self.set('units',units);
                    var units_by_id = {};
                    for(var i = 0, len = units.length; i < len; i++){
                        units_by_id[units[i].id] = units[i];
                    }
                    self.set('units_by_id',units_by_id);

                    return self.fetch('product.packaging', null, null);
                }).then(function(packagings){
                    self.set('product.packaging',packagings);

                    return self.fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
                }).then(function(users){
                    self.set('user_list',users);

                    return self.fetch('res.partner', ['name','ean13'], [['ean13', '!=', false]]);
                }).then(function(partners){
                    self.set('partner_list',partners);

                    return self.fetch('account.tax', ['amount', 'price_include', 'type']);
                }).then(function(taxes){
                    self.set('taxes', taxes);

                    return self.fetch(
                        'pos.session',
                        ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
                        [['state', '=', 'opened'], ['user_id', '=', self.session.uid]]
                    );
                }).then(function(sessions){
                    self.set('pos_session', sessions[0]);

                    return self.fetch(
                        'pos.config',
                        ['name','journal_ids','shop_id','journal_id',
                         'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
                         'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
                         'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
                        [['id','=', self.get('pos_session').config_id[0]]]
                    );
                }).then(function(configs){
                    var pos_config = configs[0];
                    self.set('pos_config', pos_config);
                    self.iface_electronic_scale    =  !!pos_config.iface_electronic_scale;
                    self.iface_print_via_proxy     =  !!pos_config.iface_print_via_proxy;
                    self.iface_vkeyboard           =  !!pos_config.iface_vkeyboard;
                    self.iface_self_checkout       =  !!pos_config.iface_self_checkout;
                    self.iface_cashdrawer          =  !!pos_config.iface_cashdrawer;

                    return self.fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]);
                }).then(function(shops){
                    self.set('shop',shops[0]);

                    return self.fetch('product.pricelist',['currency_id'],[['id','=',self.get('shop').pricelist_id[0]]]);
                }).then(function(pricelists){
                    self.set('pricelist',pricelists[0]);

                    return self.fetch('res.currency',['symbol','position','rounding','accuracy'],[['id','=',self.get('pricelist').currency_id[0]]]);
                }).then(function(currencies){
                    self.set('currency',currencies[0]);

                    return self.fetch('product.packaging',['ean','product_id']);
                }).then(function(packagings){
                    self.db.add_packagings(packagings);

                    return self.fetch('pos.category', ['id','name','parent_id','child_id','image'])
                }).then(function(categories){
                    self.db.add_categories(categories);

                    return self.fetch(
                        'product.product',
                        ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 'default_code', 'variants',
                         'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'],
                        [['sale_ok','=',true],['available_in_pos','=',true]],
                        {pricelist: self.get('shop').pricelist_id[0]} // context for price
                    );
                }).then(function(products){
                    self.db.add_products(products);

                    return self.fetch(
                        'account.bank.statement',
                        ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
                        [['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]]
                    );
                }).then(function(bank_statements){
                    var journals = new Array();
                    _.each(bank_statements,function(statement) {
                        journals.push(statement.journal_id[0])
                    });
                    self.set('bank_statements', bank_statements);
                    return self.fetch('account.journal', undefined, [['id','in', journals]]);
                }).then(function(journals){
                    self.set('journals',journals);

                    // associate the bank statements with their journals.
                    var bank_statements = self.get('bank_statements');
                    for(var i = 0, ilen = bank_statements.length; i < ilen; i++){
                        for(var j = 0, jlen = journals.length; j < jlen; j++){
                            if(bank_statements[i].journal_id[0] === journals[j].id){
                                bank_statements[i].journal = journals[j];
                                bank_statements[i].self_checkout_payment_method = journals[j].self_checkout_payment_method;
                            }
                        }
                    }
                    self.set({'cashRegisters' : new module.CashRegisterCollection(self.get('bank_statements'))});
                });

            return loaded;
        },

        // logs the usefull posmodel data to the console for debug purposes
        log_loaded_data: function(){
            console.log('PosModel data has been loaded:');
            console.log('PosModel: units:',this.get('units'));
            console.log('PosModel: bank_statements:',this.get('bank_statements'));
            console.log('PosModel: journals:',this.get('journals'));
            console.log('PosModel: taxes:',this.get('taxes'));
            console.log('PosModel: pos_session:',this.get('pos_session'));
            console.log('PosModel: pos_config:',this.get('pos_config'));
            console.log('PosModel: cashRegisters:',this.get('cashRegisters'));
            console.log('PosModel: shop:',this.get('shop'));
            console.log('PosModel: company:',this.get('company'));
            console.log('PosModel: currency:',this.get('currency'));
            console.log('PosModel: user_list:',this.get('user_list'));
            console.log('PosModel: user:',this.get('user'));
            console.log('PosModel.session:',this.session);
            console.log('PosModel end of data log.');
        },

        // this is called when an order is removed from the order collection. It ensures that there is always an existing
        // order and a valid selected order
        on_removed_order: function(removed_order){
            if( this.get('orders').isEmpty()){
                this.add_new_order();
            }else{
                this.set({ selectedOrder: this.get('orders').last() });
            }
        },

        // saves the order locally and try to send it to the backend. 'record' is a bizzarely defined JSON version of the Order
        push_order: function(record) {
            this.db.add_order(record);
            this.flush();
        },

        //creates a new empty order and sets it as the current order
        add_new_order: function(){
            var order = new module.Order({pos:this});
            this.get('orders').add(order);
            this.set('selectedOrder', order);
        },

        // attemps to send all pending orders ( stored in the pos_db ) to the server,
        // and remove the successfully sent ones from the db once
        // it has been confirmed that they have been sent correctly.
        flush: function() {
            //TODO make the mutex work
            //this makes sure only one _int_flush is called at the same time
            /*
            return this.flush_mutex.exec(_.bind(function() {
                return this._flush(0);
            }, this));
            */
            this._flush(0);
        },
        // attempts to send an order of index 'index' in the list of order to send. The index
        // is used to skip orders that failed. do not call this method outside the mutex provided
        // by flush()
        _flush: function(index){
            var self = this;
            var orders = this.db.get_orders();
            self.set('nbr_pending_operations',orders.length);

            var order  = orders[index];
            if(!order){
                return;
            }
            //try to push an order to the server
            // shadow : true is to prevent a spinner to appear in case of timeout
            (new instance.web.Model('pos.order')).call('create_from_ui',[[order]],undefined,{ shadow:true })
                .fail(function(unused, event){
                    //don't show error popup if it fails
                    event.preventDefault();
                    console.error('Failed to send order:',order);
                    self._flush(index+1);
                })
                .done(function(){
                    //remove from db if success
                    self.db.remove_order(order.id);
                    self._flush(index);
                });
        },

        scan_product: function(parsed_ean){
            var self = this;
            var product = this.db.get_product_by_ean13(parsed_ean.base_ean);
            var selectedOrder = this.get('selectedOrder');

            if(!product){
                return false;
            }

            if(parsed_ean.type === 'price'){
                selectedOrder.addProduct(new module.Product(product), {price:parsed_ean.value});
            }else if(parsed_ean.type === 'weight'){
                selectedOrder.addProduct(new module.Product(product), {quantity:parsed_ean.value, merge:false});
            }else{
                selectedOrder.addProduct(new module.Product(product));
            }
            return true;
        },
    });

    module.CashRegister = Backbone.Model.extend({
    });

    module.CashRegisterCollection = Backbone.Collection.extend({
        model: module.CashRegister,
    });

    module.Product = Backbone.Model.extend({
        get_image_url: function(){
            return instance.session.url('/web/binary/image', {model: 'product.product', field: 'image', id: this.get('id')});
        },
    });

    module.ProductCollection = Backbone.Collection.extend({
        model: module.Product,
    });

    // An orderline represent one element of the content of a client's shopping cart.
    // An orderline contains a product, its quantity, its price, discount. etc.
    // An Order contains zero or more Orderlines.
    module.Orderline = Backbone.Model.extend({
        initialize: function(attr,options){
            this.pos = options.pos;
            this.order = options.order;
            this.product = options.product;
            this.price   = options.product.get('price');
            this.quantity = 1;
            this.quantityStr = '1';
            this.discount = 0;
            this.discountStr = '0';
            this.type = 'unit';
            this.selected = false;
        },
        // sets a discount [0,100]%
        set_discount: function(discount){
            var disc = Math.min(Math.max(parseFloat(discount) || 0, 0),100);
            this.discount = disc;
            this.discountStr = '' + disc;
            this.trigger('change');
        },
        // returns the discount [0,100]%
        get_discount: function(){
            return this.discount;
        },
        get_discount_str: function(){
            return this.discountStr;
        },
        get_product_type: function(){
            return this.type;
        },
        // sets the quantity of the product. The quantity will be rounded according to the
        // product's unity of measure properties. Quantities greater than zero will not get
        // rounded to zero
        set_quantity: function(quantity){
            if(quantity === 'remove'){
                this.order.removeOrderline(this);
                return;
            }else{
                var quant = Math.max(parseFloat(quantity) || 0, 0);
                var unit = this.get_unit();
                if(unit){
                    this.quantity    = Math.max(unit.rounding, round_pr(quant, unit.rounding));
                    this.quantityStr = this.quantity.toFixed(Math.max(0,Math.ceil(Math.log(1.0 / unit.rounding) / Math.log(10))));
                }else{
                    this.quantity    = quant;
                    this.quantityStr = '' + this.quantity;
                }
            }
            this.trigger('change');
        },
        // return the quantity of product
        get_quantity: function(){
            return this.quantity;
        },
        get_quantity_str: function(){
            return this.quantityStr;
        },
        get_quantity_str_with_unit: function(){
            var unit = this.get_unit();
            if(unit && unit.name !== 'Unit(s)'){
                return this.quantityStr + ' ' + unit.name;
            }else{
                return this.quantityStr;
            }
        },
        // return the unit of measure of the product
        get_unit: function(){
            var unit_id = (this.product.get('uos_id') || this.product.get('uom_id'));
            if(!unit_id){
                return undefined;
            }
            unit_id = unit_id[0];
            if(!this.pos){
                return undefined;
            }
            return this.pos.get('units_by_id')[unit_id];
        },
        // return the product of this orderline
        get_product: function(){
            return this.product;
        },
        // selects or deselects this orderline
        set_selected: function(selected){
            this.selected = selected;
            this.trigger('change');
        },
        // returns true if this orderline is selected
        is_selected: function(){
            return this.selected;
        },
        // when we add an new orderline we want to merge it with the last line to see reduce the number of items
        // in the orderline. This returns true if it makes sense to merge the two
        can_be_merged_with: function(orderline){
            if( this.get_product().get('id') !== orderline.get_product().get('id')){    //only orderline of the same product can be merged
                return false;
            }else if(this.get_product_type() !== orderline.get_product_type()){
                return false;
            }else if(this.get_discount() > 0){             // we don't merge discounted orderlines
                return false;
            }else if(this.price !== orderline.price){
                return false;
            }else{
                return true;
            }
        },
        merge: function(orderline){
            this.set_quantity(this.get_quantity() + orderline.get_quantity());
        },
        export_as_JSON: function() {
            return {
                qty: this.get_quantity(),
                price_unit: this.get_unit_price(),
                discount: this.get_discount(),
                product_id: this.get_product().get('id'),
            };
        },
        //used to create a json of the ticket, to be sent to the printer
        export_for_printing: function(){
            return {
                quantity:           this.get_quantity(),
                unit_name:          this.get_unit().name,
                price:              this.get_unit_price(),
                discount:           this.get_discount(),
                product_name:       this.get_product().get('name'),
                price_display :     this.get_display_price(),
                price_with_tax :    this.get_price_with_tax(),
                price_without_tax:  this.get_price_without_tax(),
                tax:                this.get_tax(),
                product_description:      this.get_product().get('description'),
                product_description_sale: this.get_product().get('description_sale'),
            };
        },
        // changes the base price of the product for this orderline
        set_unit_price: function(price){
            this.price = round_di(parseFloat(price) || 0, 2);
            this.trigger('change');
        },
        get_unit_price: function(){
            var rounding = this.pos.get('currency').rounding;
            return round_pr(this.price,rounding);
        },
        get_display_price: function(){
            var rounding = this.pos.get('currency').rounding;
            return  round_pr(round_pr(this.get_unit_price() * this.get_quantity(),rounding) * (1- this.get_discount()/100.0),rounding);
        },
        get_price_without_tax: function(){
            return this.get_all_prices().priceWithoutTax;
        },
        get_price_with_tax: function(){
            return this.get_all_prices().priceWithTax;
        },
        get_tax: function(){
            return this.get_all_prices().tax;
        },
        get_all_prices: function(){
            var self = this;
            var currency_rounding = this.pos.get('currency').rounding;
            var base = round_pr(this.get_quantity() * this.get_unit_price() * (1.0 - (this.get_discount() / 100.0)), currency_rounding);
            var totalTax = base;
            var totalNoTax = base;

            var product_list = this.pos.get('product_list');
            var product =  this.get_product();
            var taxes_ids = product.get('taxes_id');;
            var taxes =  self.pos.get('taxes');
            var taxtotal = 0;
            _.each(taxes_ids, function(el) {
                var tax = _.detect(taxes, function(t) {return t.id === el;});
                if (tax.price_include) {
                    var tmp;
                    if (tax.type === "percent") {
                        tmp =  base - round_pr(base / (1 + tax.amount),currency_rounding);
                    } else if (tax.type === "fixed") {
                        tmp = round_pr(tax.amount * self.get_quantity(),currency_rounding);
                    } else {
                        throw "This type of tax is not supported by the point of sale: " + tax.type;
                    }
                    tmp = round_pr(tmp,currency_rounding);
                    taxtotal += tmp;
                    totalNoTax -= tmp;
                } else {
                    var tmp;
                    if (tax.type === "percent") {
                        tmp = tax.amount * base;
                    } else if (tax.type === "fixed") {
                        tmp = tax.amount * self.get_quantity();
                    } else {
                        throw "This type of tax is not supported by the point of sale: " + tax.type;
                    }
                    tmp = round_pr(tmp,currency_rounding);
                    taxtotal += tmp;
                    totalTax += tmp;
                }
            });
            return {
                "priceWithTax": totalTax,
                "priceWithoutTax": totalNoTax,
                "tax": taxtotal,
            };
        },
    });

    module.OrderlineCollection = Backbone.Collection.extend({
        model: module.Orderline,
    });

    // Every PaymentLine contains a cashregister and an amount of money.
    module.Paymentline = Backbone.Model.extend({
        initialize: function(attributes, options) {
            this.amount = 0;
            this.cashregister = options.cashRegister;
        },
        //sets the amount of money on this payment line
        set_amount: function(value){
            this.amount = parseFloat(value) || 0;
            this.trigger('change');
        },
        // returns the amount of money on this paymentline
        get_amount: function(){
            return this.amount;
        },
        // returns the associated cashRegister
        get_cashregister: function(){
            return this.cashregister;
        },
        //exports as JSON for server communication
        export_as_JSON: function(){
            return {
                name: instance.web.datetime_to_str(new Date()),
                statement_id: this.cashregister.get('id'),
                account_id: (this.cashregister.get('account_id'))[0],
                journal_id: (this.cashregister.get('journal_id'))[0],
                amount: this.get_amount()
            };
        },
        //exports as JSON for receipt printing
        export_for_printing: function(){
            return {
                amount: this.get_amount(),
                journal: this.cashregister.get('journal_id')[1],
            };
        },
    });

    module.PaymentlineCollection = Backbone.Collection.extend({
        model: module.Paymentline,
    });

    // An order more or less represents the content of a client's shopping cart (the OrderLines)
    // plus the associated payment information (the PaymentLines)
    // there is always an active ('selected') order in the Pos, a new one is created
    // automaticaly once an order is completed and sent to the server.
    module.Order = Backbone.Model.extend({
        initialize: function(attributes){
            Backbone.Model.prototype.initialize.apply(this, arguments);
            this.set({
                creationDate:   new Date(),
                orderLines:     new module.OrderlineCollection(),
                paymentLines:   new module.PaymentlineCollection(),
                name:           "Order " + this.generateUniqueId(),
                client:         null,
            });
            this.pos =     attributes.pos;
            this.selected_orderline = undefined;
            this.screen_data = {};  // see ScreenSelector
            this.receipt_type = 'receipt';  // 'receipt' || 'invoice'
            return this;
        },
        generateUniqueId: function() {
            return new Date().getTime();
        },
        addProduct: function(product, options){
            options = options || {};
            var attr = product.toJSON();
            attr.pos = this.pos;
            attr.order = this;
            var line = new module.Orderline({}, {pos: this.pos, order: this, product: product});

            if(options.quantity !== undefined){
                line.set_quantity(options.quantity);
            }
            if(options.price !== undefined){
                line.set_unit_price(options.price);
            }

            var last_orderline = this.getLastOrderline();
            if( last_orderline && last_orderline.can_be_merged_with(line) && options.merge !== false){
                last_orderline.merge(line);
            }else{
                this.get('orderLines').add(line);
            }
            this.selectLine(this.getLastOrderline());
        },
        removeOrderline: function( line ){
            this.get('orderLines').remove(line);
            this.selectLine(this.getLastOrderline());
        },
        getLastOrderline: function(){
            return this.get('orderLines').at(this.get('orderLines').length -1);
        },
        addPaymentLine: function(cashRegister) {
            var paymentLines = this.get('paymentLines');
            var newPaymentline = new module.Paymentline({},{cashRegister:cashRegister});
            if(cashRegister.get('journal').type !== 'cash'){
                newPaymentline.set_amount( this.getDueLeft() );
            }
            paymentLines.add(newPaymentline);
        },
        getName: function() {
            return this.get('name');
        },
        getSubtotal : function(){
            return (this.get('orderLines')).reduce((function(sum, orderLine){
                return sum + orderLine.get_display_price();
            }), 0);
        },
        getTotalTaxIncluded: function() {
            return (this.get('orderLines')).reduce((function(sum, orderLine) {
                return sum + orderLine.get_price_with_tax();
            }), 0);
        },
        getDiscountTotal: function() {
            return (this.get('orderLines')).reduce((function(sum, orderLine) {
                return sum + (orderLine.get_unit_price() * (orderLine.get_discount()/100) * orderLine.get_quantity());
            }), 0);
        },
        getTotalTaxExcluded: function() {
            return (this.get('orderLines')).reduce((function(sum, orderLine) {
                return sum + orderLine.get_price_without_tax();
            }), 0);
        },
        getTax: function() {
            return (this.get('orderLines')).reduce((function(sum, orderLine) {
                return sum + orderLine.get_tax();
            }), 0);
        },
        getPaidTotal: function() {
            return (this.get('paymentLines')).reduce((function(sum, paymentLine) {
                return sum + paymentLine.get_amount();
            }), 0);
        },
        getChange: function() {
            return this.getPaidTotal() - this.getTotalTaxIncluded();
        },
        getDueLeft: function() {
            return this.getTotalTaxIncluded() - this.getPaidTotal();
        },
        // sets the type of receipt 'receipt'(default) or 'invoice'
        set_receipt_type: function(type){
            this.receipt_type = type;
        },
        get_receipt_type: function(){
            return this.receipt_type;
        },
        // the client related to the current order.
        set_client: function(client){
            this.set('client',client);
        },
        get_client: function(){
            return this.get('client');
        },
        get_client_name: function(){
            var client = this.get('client');
            return client ? client.name : "";
        },
        // the order also stores the screen status, as the PoS supports
        // different active screens per order. This method is used to
        // store the screen status.
        set_screen_data: function(key,value){
            if(arguments.length === 2){
                this.screen_data[key] = value;
            }else if(arguments.length === 1){
                for(key in arguments[0]){
                    this.screen_data[key] = arguments[0][key];
                }
            }
        },
        //see set_screen_data
        get_screen_data: function(key){
            return this.screen_data[key];
        },
        // exports a JSON for receipt printing
        export_for_printing: function(){
            var orderlines = [];
            this.get('orderLines').each(function(orderline){
                orderlines.push(orderline.export_for_printing());
            });

            var paymentlines = [];
            this.get('paymentLines').each(function(paymentline){
                paymentlines.push(paymentline.export_for_printing());
            });
            var client  = this.get('client');
            var cashier = this.pos.get('cashier') || this.pos.get('user');
            var company = this.pos.get('company');
            var shop    = this.pos.get('shop');
            var date = new Date();

            return {
                orderlines: orderlines,
                paymentlines: paymentlines,
                subtotal: this.getSubtotal(),
                total_with_tax: this.getTotalTaxIncluded(),
                total_without_tax: this.getTotalTaxExcluded(),
                total_tax: this.getTax(),
                total_paid: this.getPaidTotal(),
                total_discount: this.getDiscountTotal(),
                change: this.getChange(),
                name : this.getName(),
                client: client ? client.name : null ,
                invoice_id: null,   //TODO
                cashier: cashier ? cashier.name : null,
                date: {
                    year: date.getFullYear(),
                    month: date.getMonth(),
                    date: date.getDate(),       // day of the month
                    day: date.getDay(),         // day of the week
                    hour: date.getHours(),
                    minute: date.getMinutes()
                },
                company:{
                    email: company.email,
                    website: company.website,
                    company_registry: company.company_registry,
                    contact_address: company.contact_address,
                    vat: company.vat,
                    name: company.name,
                    phone: company.phone,
                },
                shop:{
                    name: shop.name,
                },
                currency: this.pos.get('currency'),
            };
        },
        exportAsJSON: function() {
            var orderLines, paymentLines;
            orderLines = [];
            (this.get('orderLines')).each(_.bind( function(item) {
                return orderLines.push([0, 0, item.export_as_JSON()]);
            }, this));
            paymentLines = [];
            (this.get('paymentLines')).each(_.bind( function(item) {
                return paymentLines.push([0, 0, item.export_as_JSON()]);
            }, this));
            return {
                name: this.getName(),
                amount_paid: this.getPaidTotal(),
                amount_total: this.getTotalTaxIncluded(),
                amount_tax: this.getTax(),
                amount_return: this.getChange(),
                lines: orderLines,
                statement_ids: paymentLines,
                pos_session_id: this.pos.get('pos_session').id,
                partner_id: this.get('client') ? this.get('client').id : undefined,
                user_id: this.pos.get('cashier') ? this.pos.get('cashier').id : this.pos.get('user').id,
            };
        },
        getSelectedLine: function(){
            return this.selected_orderline;
        },
        selectLine: function(line){
            if(line){
                if(line !== this.selected_orderline){
                    if(this.selected_orderline){
                        this.selected_orderline.set_selected(false);
                    }
                    this.selected_orderline = line;
                    this.selected_orderline.set_selected(true);
                }
            }else{
                this.selected_orderline = undefined;
            }
        },
    });

    module.OrderCollection = Backbone.Collection.extend({
        model: module.Order,
    });

    /*
     The numpad handles both the choice of the property currently being modified
     (quantity, price or discount) and the edition of the corresponding numeric value.
     */
    module.NumpadState = Backbone.Model.extend({
        defaults: {
            buffer: "0",
            mode: "quantity"
        },
        appendNewChar: function(newChar) {
            var oldBuffer;
            oldBuffer = this.get('buffer');
            if (oldBuffer === '0') {
                this.set({
                    buffer: newChar
                });
            } else if (oldBuffer === '-0') {
                this.set({
                    buffer: "-" + newChar
                });
            } else {
                this.set({
                    buffer: (this.get('buffer')) + newChar
                });
            }
            this.trigger('set_value',this.get('buffer'));
        },
        deleteLastChar: function() {
            if(this.get('buffer') === ""){
                if(this.get('mode') === 'quantity'){
                    this.trigger('set_value','remove');
                }else{
                    this.trigger('set_value',this.get('buffer'));
                }
            }else{
                var newBuffer = this.get('buffer').slice(0,-1) || "";
                this.set({ buffer: newBuffer });
                this.trigger('set_value',this.get('buffer'));
            }
        },
        switchSign: function() {
            var oldBuffer;
            oldBuffer = this.get('buffer');
            this.set({
                buffer: oldBuffer[0] === '-' ? oldBuffer.substr(1) : "-" + oldBuffer
            });
            this.trigger('set_value',this.get('buffer'));
        },
        changeMode: function(newMode) {
            this.set({
                buffer: "0",
                mode: newMode
            });
        },
        reset: function() {
            this.set({
                buffer: "0",
                mode: "quantity"
            });
        },
        resetValue: function(){
            this.set({buffer:'0'});
        },
    });
}


text:
Daffodil Days fundraiser coming in March
Todd G. Higdon
The American Cancer Society is having spring fever.
Once again, it is time to purchase daffodils to spread hope for a world free of cancer. "Give Daffodils. Give Hope," is the theme for the annual ACS's Daffodil Days.
"The main purpose of Daffodil Days is to raise money for the American Cancer Society," said Donna Hood, Newton County Daffodil Days chairwoman.
This is the 35th annual fundraiser. Hood said Newton County has participated in the event for the past 10 years.
According to literature provided by the ACS, "(Daffodil Days) celebrates the society's mission to eliminate cancer as a life-threatening disease by offering daffodils to donors in appreciation of their contributions. For more than 30 years, Daffodil Days has enabled people to join the ACS's fight against cancer by raising funds and sharing hope for a future where the disease no longer threatens those we love."
The daffodil is the first flower of spring and the official flower of the ACS. It is a symbol of hope, renewal and the promise that one day the world will be cancer free.
"I encourage all of us to participate in Daffodil Days," noted Hood. "I would also like to encourage your participation in a great new event that was created by volunteers within our churches and faith-based groups called 'Daffodil Sunday.' The daffodils are then displayed on the altar of the church in memory, or in honor, of those who have been impacted by cancer."
According to Hood, funds raised are used for research, education, advocacy, and service.
According to Mary Valloni, with the ACS office in Springfield, the Neosho area is included in the Springfield and Bolivar ACS district.
"Last year, these areas raised just over $7,000 during the Daffodil Days," Valloni said. "We have a goal of $15,000 this year."
Last year, Hood said there were 109 orders from the local area and that total was up from 2006.
Hood said she would like to see businesses compete during Daffodil Days.
"I think that it would be great on March 11, the day that we deliver them, that any business that you walk in, you see daffodils," she said. "I would also like to see it get really big again."
The deadline for pre-orders is Feb. 20. There are a number of different types of arrangement that one can purchase. There is a Bear and a Bunch for $25, a Sunshine Bouquet for $15, an Individual Bouquet for $10, a Gift of Hope for $15, a Corporate Case (500 flowers) for $500 and a Corporate Half Case (250 flowers) for $250. Orders may be mailed (by check or credit card: MasterCard, American Express, Visa or Discover) to Donna Hood, Newton County Daffodil Chair, 1303 Sunshine, Neosho, 64850.
Once the orders are turned in, the daffodils will arrive the first week of March, coinciding with the beginning of spring, and will be delivered in Neosho on Tuesday, March 11. They will then be delivered to the address given on the order form. The orders can also be picked up at the First Baptist Church between 9 a.m. to 1 p.m. on March 11.
For more information, contact Donna Hood at 451-4880 or donna.hood@la-z-boy.com.


ACHRON, JOSEPH (1886–1943), composer and violinist. Achron made his debut at the age of eight, touring Russia as a prodigy violinist. He studied with *Auer and Liadow at St. Petersburg, and later taught at the Kharkov Conservatory (1913–18). Achron began his composing career by writing light music. His association in St. Petersburg with the group of Jewish writers and musicians who founded the Society for Jewish Folk Music brought about a change in musical interests, and manifested itself in his Hebrew Melody (1911). After attempting to settle in Berlin (1918–22) and Palestine (1924), he went to New York in 1925. There he wrote music for Yiddish plays and was commissioned to compose Evening Service for the Sabbath for Temple Emanu-El (1932). In 1934 he moved to Hollywood, wrote film music, but continued serious composition. Achron's work shows the stresses resulting from his double role as a performing musician and a composer. He composed more than 80 works, including violin sonatas and concertos, Symphonic Variations and Sonata on the Folk Song "El Yivneh ha-Galil" (1915), Concerto for Piano Alone (1941), Golem Suite (1932), Sextet for Woodwinds (1942), and incidental music to plays by *Goldfaden, *Shalom Aleichem, Peretz, and Sholem *Asch. The bulk of his manuscripts is preserved in the National and University Library, Jerusalem.
isidor (1892–1948), brother of Joseph, born in Warsaw, was a pianist and composer. He studied in St. Petersburg and toured Europe and the U.S., where he settled in 1922.
A. Weisser, Modern Renaissance of Jewish Music (1954), 81–91; P. Gradenwitz, Musikgeschichte Israels (1961), 160; J. Stutschewsky, Mein Weg zur juedischen Musik (1935), 24 ff.; Sendrey, Music, index; P. Moddel, Joseph Achron (Eng., 1966).
"Achron, Joseph." Encyclopaedia Judaica. . Encyclopedia.com. 19 Apr. 2019 <https://www.encyclopedia.com>.


text:
Ohio Politics
Gov. Ted Strickland reverses earlier decision, calls for minimum age of 21 to play Ohio slots
Updated: Mar. 27, 2019, 9:11 p.m. | Published: Sep. 14, 2009, 4:38 p.m.
By Jane Kahoun, cleveland.com
COLUMBUS, Ohio — Gov. Ted Strickland has changed his mind about what the minimum age should be for slot machine players at Ohio racetracks. He has asked the Lottery Commission to require players to be 21, rather than 18 as previously recommended.
Strickland had been criticized for proposed rules that would allow younger players to use the slots, also known as video lottery terminals, which are to be installed at the state's seven horse racing tracks.
In a statement issued Monday, the governor said he reached his decision "after careful consideration of articulated concerns, and the views of the directors of the Ohio Lottery and the Department of Public Safety."
Strickland hopes the slots can be up and running by next May to begin generating money for the state budget. He is counting on the slots raising $933 million over the next two years.


Discover How You can Look and Feel Amazing, Get in Shape, Stay Active and Start Living a Healthy Life... for FREE!
A revealing talk on how to lose weight for real and keep it off forever!
My information packed "Fitness-4-Life Newletter to help you stay on track with your fitness goals.
And my special Ebook on 100 Ways to Lose Weight and Live a Heart-Healthy Life.
"How to Burn Calories While You Sleep."
Go to Optimum Body Sculpting right now to sign up!


Clinical Nurse Specialist Northern California " Oakland Establishes and monitors care standards and makes recommendations for changes in area of clinical practice. Collaborates with nursing staff in assessing patient, family age-specific nursing needs and develops plan of care for complex high-risk patients. Ideal CNS candidate has: - 1+ years of CNS experience - Master's degree " Clinical Nurse Specialist - Current California RN license. - Clinical Nurse Specialist certification by the California Board of Registered Nursing in area of specialty. -Current BLS certificate required. -Nat'l Provider Identifier (NPI) have or obtain an NPI, prior to start date -ACLS or PALS Certification preferred Develops and ensures quality standards for nursing practice for a specific patient population. Provides advanced clinical practice education, consultation, research and administration.


text:
Chicago Area 9-1-1 System Under Scrutiny
External News Source February 12, 2014 Industry
Software was causing significant problems: prone to freezes, giving wrong callback numbers and mishandling transferred calls.
Austrian firm Frequentis agreed to build an emergency dispatch system for the SouthCom 9-1-1 Dispatch Center in Matteson (Ill.) that would be a showcase to the nation.
Instead, the innovative, million-dollar system that Southland police officers, firefighters and dispatchers rely on every day is riddled with so many glitches that a local official at a SouthCom board meeting last year called it a "lemon" and wondered publicly, "What does Frequentis do right?"
At that May 29 meeting, SouthCom officials considered suing Frequentis to get their money back and questioned whether the system, which began operating in 2011, could jeopardize residents and emergency responders in Olympia Fields, Park Forest, Matteson and Richton Park – the municipalities that SouthCom serves.
"We all want to sit and believe it's going to get better, but in our minds it's probably not going to," Park Forest Police Chief Cliff Butz said during the meeting. "It's been four years, and if they (Frequentis) can't figure out in four years, are they going to figure it out?"
The recording of the meeting was released last month to the SouthtownStar after the newspaper challenged SouthCom's denial of its request for the recording under Illinois' freedom of information law.
The recording contains some of the strongest public criticism of the system designed by Frequentis, which got more than $9.1 million in dispatch system contracts in Florida and Maryland in 2012 despite the problems with the SouthCom system.
SouthCom, which is funded in part by taxpayers in its four towns, has paid Frequentis $864,000 so far and owes $1 million more in debt payments during the next six years.
"This is not a question of the 'laptop isn't working, throw it out and get a new one and pay $2,500 tops,' " Park Forest village manager Tom Mick said during the meeting. "I would guess we are probably looking at three quarters of a million dollars for a fix to go in a different direction."
SouthCom chairman John Krull told the SouthtownStar last month that SouthCom planned to continue to work with Frequentis to improve the system, but he declined further comment.
Calls to Frequentis USA seeking comment for this story were not returned.
Persistent, major errors
The SouthtownStar reported in 2012 that the Frequentis software was having significant problems – prone to freezes, giving dispatchers the wrong 9-1-1 callback numbers and mishandling transferred calls to local police and fire departments, among other things.
At the time, SouthCom executive director Denise Pavlik and former SouthCom director Robert Wilcox, who had recommended Frequentis to the SouthCom's board, downplayed the malfunctions. They said the glitches in the system, which was purchased in 2008, had been resolved or were being addressed.
But SouthCom officials were less optimistic about the system's outlook by the May 2013 meeting.
"You have to judge the future by the past, and the past is not good," Butz said at the meeting.
He said a glaring problem with the Frequentis system is that police officers in the SouthCom towns often are unable to share potentially important records with each other because of problems with the database.
"You're going to have an incident one day (where it's) essential to get the records from Olympia Fields or Matteson or Richton Park to apprehend a dangerous criminal or terrorist, and the system is going to fail," Olympia Fields village manager David Mekarski said during the meeting.
SouthCom IT worker Kelly Pyles told SouthCom officials that the system was error-prone from the outset – programmed on a platform that's not designed to handle data-heavy activity. And Pyles said Frequentis' subsequent tweaks to the system had created new problems.
Butz said at the meeting that the SouthCom board was to blame in part for the mess because it should have hired a technology expert.
Weighing the options
The SouthCom board ended the May meeting talking about how it might get its money back from Frequentis.
"One of the final questions would be somewhere along the lines of, 'This isn't working for us and for that car that doesn't work and it's a lemon, you get your money back,' " Mick said. "Where do we get our money back? I think that's a question we have to look at because … if we look at going in another direction, it does comes down to dollars and cents."
Mick mentioned the possibility of suing Frequentis but pointed out that it might not be worth it financially and that SouthCom could lose a lawsuit. He said he wondered if SouthCom could get Frequentis to agree to a $250,000 refund.
The SouthCom 9-1-1 Dispatch Center in Matteson provides 9-1-1 service for Matteson, Richton Park, Park Forest and Olympia Fields.
Previous article For Telecommunicators, No One Calls to Chat
Next article Case Study: BayRICS and BayWEB


Invite a Real Mermaid to your Pool Party!
Invite a real swimming mermaid to your pool party! Mermaid Blossom will visit in her lifelike silicone tail with a few of her sea-friends for a one or two hour celebration*. Each visit includes special performances, email us at pixietribeentertainment@gmail.com to learn more!
Requirements:Pool must be heated to 90 degrees, clean and well kept. A secure, private changing area (not a bathroom) must be provide for the Mermaid's transformation.


text:
Q: What does 'Don't know how to build task 'bootstrap' mean? I was trying to build Mirah, following the instructions here. On the step 'rake gem', I got several warnings and a failure notice. A sample of the output follows:

warning: org/dynalang/dynalink/MonomorphicCallSite.class(org/dynalang/dynalink:MonomorphicCallSite.class): major version 51 is newer than 50, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
  Note: /Users/paul/dev/interesting/mirah/src/org/mirah/DynalangBootstrap.java uses or overrides a deprecated API.
  Note: Recompile with -Xlint:deprecation for details.
  4 warnings
  Building jar: /Users/paul/dev/interesting/mirah/javalib/mirah-bootstrap.jar
  rake aborted!
  Don't know how to build task 'bootstrap'

How should I begin troubleshooting this? For example, which compiler should be upgraded, and how can that be done?

A: This issue is fixed on master by https://github.com/mirah/mirah/commit/fac6bd5a13be6d818b9ac362650f5f540d771682, so you should be able to pull master and build just fine now.
If you're using an old tree intentionally, there another option to build the gem:
rake jar:bootstrap
gem build mirah.gemspec

Your error message is happening because prior to Charles' fix, the :gem task erroneously refers to "jar:bootstrap" as just "bootstrap".

redpajama_set_name: RedPajamaStackExchange


Heating Ventilation and Air Conditioning systems (HVAC) systems are fundamental to the operation and control of laboratories, in particular where barriers and containment systems are in use. Our 'Fingerprinting Survey' is extremely useful in determining how well such systems are functioning at a given point in time.
Rigorous Method Statements and Risk Assessments are conducted prior to the undertaking of any survey work in a laboratory or Biological Support Unit (BSU).
The "Fingerprinting Survey" includes a condition survey, where we comment on the condition of the systems and carry out performance testing measured against the originally specified Commissioning figures for the building.
The main air handling, extract plant and equipment is surveyed and electrical loads – voltage and current are measured.
The operation and settings on variable speed drives and the Building Management System are reviewed and the outputs noted against actual performance.
In addition to the above, mechanical drives are checked and inspected for signs of damage or wear that may impact on performance. Pre-filters, bag filters and HEPA filtration are inspected and any pressure drops noted.
Fixed and dynamic dampers in ductwork are inspected and tested. Duct traverses are performed to measure volume supply and extract flow rates against specified commissioning schedules.
The Fingerprint Survey findings are utilised as part of the BPO process to identify improvements that can be undertaken for the facility.
In many cases we find they are critical to a correct understanding of how a facility actually operates and when coupled with our other information are useful for identifying ongoing problems and the potential to produce rogue outcomes together with associated risks and costs during research programmes.


text:
The Aurum Film Encyclopedia is a multi-volume reference work on cinema, published in the UK by Aurum Press and edited by Phil Hardy.  The first volume, devoted to  western films, appeared in 1983, with eight subsequent volumes announced at that time as "forthcoming".  However, only three additional entries were issued.  All four volumes have been published in the U.S. by The Overlook Press, with the same contents as the UK editions but with the title changed to The Overlook Film Encyclopedia.

The Foreword to all four volumes is the same, describing the proposed nine-volume encyclopedia as "covering the principal film categories or genres which have developed since the birth of the industry."  The intent was to produce a "complete and authoritative" body of information that, upon completion, would be seen as "a truly comprehensive and enduring reference guide to the fabulous world of film."

Each book provides a decade by decade overview of that volume's respective genre.  Capsule reviews of individual films are provided per year of release. Each year's films are listed alphabetically, and feature brief cast and credit details.

Tim Lucas described the first three volumes as "essential reference tools" and "eminently collectable as a set."

Volume One

Published in 1983, The Aurum Film Encyclopedia:  The Western is a chronological history of the genre from 1930 - 1983.  The book is credited solely to Phil Hardy, and all reviews are ostensibly his work alone.  All subsequent volumes credit Hardy as editor, and provide a list of the contributing reviewers on the main title page.  Hardy made the decision not to include any silent films in this first volume because, as he  explained in his Preface, "space is at a premium" and "only a few silent Westerns are available for viewing." In addition, hundreds of "minor" sound westerns were not included in the main text, again because of noted space issues; the titles of all excluded sound films are provided in a massive, 20-page appendix entitled "All Other Sound Westerns".  Many serials and Italian westerns are relegated to this appendix.  No such listing is provided for the missing silent films.  Other appendices include a list of the top box office western hits, top ten lists from critics, and all Academy Award-winning westerns.  Sixteen pages of color stills are provided in a center insert.

A second edition of the book was published in 1991, with its chronology expanded through 1990 and a different set of appendices.  Ten pages were added to the new edition, covering the few films produced during the years 1984 - 1990.   This edition was reprinted in 1995.  The color section was omitted.

Volume Two

Published in 1984, The Aurum Film Encyclopedia: Science Fiction, followed the history of the genre chronologically, from 1897 – 1983.  Unlike the previous volume,  silent genre titles are included, and even minor genre films are reviewed in the main text.  Also unlike the first volume, Hardy mentions the names of the various critics who provided the reviews in the text, which in this book were Denis Gifford, Anthony Masters, Paul Taylor, and Paul Willemen.  However, none of the film reviews are signed, so it is not possible to determine what material each writer contributed to the book.  Like the first, this volume includes supplemental material including all-time box-office hits, critics' top ten lists and all science fiction films that have won Academy Awards.  The book includes sixteen pages of color stills in a center insert.

Tim Lucas wrote of the first edition that "no self-respecting film library should be without it", and further noted that it was "particularly recommended for its coverage of the early silent trick films - perhaps the most complete document of its kind ever published."

An expanded second edition was published in 1995, with new entries on all films that had received a theatrical release through 1994.  Longer by 62 pages than the original version, the edition dropped most of the appendices due to space issues.

Volume Three

Published in 1984, The Aurum Film Encyclopedia: Horror, provides a chronological history of the horror film since its inception in 1896 through 1983.  Like the science fiction volume, all known theatrically released films, including those from the silent era, have entries.  More than either of the two previous books, the horror volume is international in scope, providing coverage of all films from all countries that have ever produced a horror-related title.  The contributors to this volume were Tom Milne, Paul Willemen, Julian Petley, and Tim Pulleine.  The writers' specific contributions are not possible to determine, as none of the film reviews are signed. Sixteen pages of color stills are featured in a center insert.  In 1987, it was published in an edition titled The Encyclopedia of Horror Movies: The Complete Film Reference.

Tim Lucas has acclaimed the first edition as "the greatest and most influential of all books on the subject". In a later review, he described the book as "an intoxicating road map to further study and the enthusiasms of its authors(...)planted the seeds for the rediscovery and reappraisal of such cinéastes as Jesús Franco, José Mojica Marins, Pupi Avati, and Jean Rollin...Hardy's hefty tome redefined how horror cinema was perceived by its admirers more so than any other single work..."

An expanded second edition was published in 1993, with new entries on all films released through 1992.  This edition is approximately 90 pages longer than the first, with three of the appendices dropped for space reasons. As noted by Hardy in his Preface to the updated edition, Kim Newman wrote nearly all of the book's new material.  This second edition was reprinted in 1995.  Tim Lucas felt the second edition would probably disappoint many readers as it was not "as rich in international selection this time around", concentrating mainly on films produced in the United States and United Kingdom.

Volume Four

Published in 1998,  The Aurum Film Encyclopedia: The Gangster Film follows the same basic format of the previous books, offering a chronological, decade-by-decade history of the genre.  Hardy starts his history in 1928, noting in his introductory material that the genre did not exist prior to that.   All films released through 1997 have capsule review entries.   The contributors were Jeremy Clarke, Richard Coombs, David McGillivray, Tom Milne, Kim Newman, Tim Pulleine, and Paul Willemen. As with previous volumes, the film reviews are unsigned, and so details regarding what material each writer contributed to the book has not been made available to the reader.  Two appendices are included, listings of the top grossing gangster films through 1998 and all Academy Award winning and nominated films in the genre.  Unlike the other three books in the series, this entry does not have a center color stills insert. The book has not been updated or reprinted.

Future volumes
In his introduction to The Gangster Film, Hardy noted that work on a crime-themed "companion work" to that volume was in preparation.  This book was to be devoted to private eyes, femmes fatales, murderers, and serial killers.  To date, no such volume has been published.

The first book in the series, The Western, had laid out the complete plans for all future volumes.  In addition to the published Western, Science Fiction, and Horror volumes, the remaining six "forthcoming" books were to be:  Comedy, Romance, War, Epics, Musicals, and Thrillers.

Phil Hardy passed away in April 2014.

References

Film guides
Books about film
Encyclopedias of art
20th-century encyclopedias
Aurum Press books