|
CatacombsRoman civilization innovated many great things, such as paved roads, advanced sewage systems, the practice of crucifixion and, of course, the vomitorium.Unfortunately, despite all this innovation, Rome was woefully unimaginative when it came to the mortuary arts. Roman citizens were cremated and efficiently stored in a vault, or sepulcher. Non-Romans, many of whom had elaborate burial rituals, were dumped in a generic mass grave (called a necropolis). For Jews living in Rome (a category that included the early Christians), that wasn't an appealing fate, and cremation was against Jewish law. So Jews who had enough money and status looked for another option. The earth around and under Rome is riddled with tunnels and passageways. Much of this is due to stone quarrying and utilitarian underground construction, but some is the result of Romans just building on top of pre-existing ruins. Burial under the city began as simple pragmatism. Prior to the rise of Christianity, the Jewish catacombs were located along the edges of Rome, or just outside, marked as burial sites by the engraved image of a menorah. During the early years of Christianity, Christians were just Jews with a few minor variations, yet were still closely integrated with the Jewish community. But with the rise of Paul and the fall of Jerusalem, Christians began actively recruiting among the Gentiles. The pagan converts presented a tricky problem for Pauline Christians. Do you require them to adhere to all Jewish customs? Or is there an important distinction between becoming a Christian and converting to Judaism? As far as burial practices, it was a fairly easy call. With the exception of some Gnostic sects, early Christians preached the resurrection of the body. It was an important doctrinal point that both body and soul would be raised to glory when the kingdom eventually came. "All things are possible with God," but that doesn't mean that people should pointlessly complicate God's life.  Wealthy Roman converts to Christianity therefore adopted burial over cremation, modeling their tombs on the Jewish catacombs but placing them more conveniently within the city. Christianity was quickly deemed a threat to the Roman power structure, and the converts were driven underground -- figuratively -- within a few short years of Christ's death. It didn't take long for the figurative to become literal. The underground tombs made a convenient meeting place for covert Christians. The idea of a tomb with an actual carcass inside was unsavory to Roman culture, and disturbing a burial site was illegal under ancient Roman laws, a disincentive to nosy neighbors. The protection offered by the catacombs went beyond superstition and good taste, however. As previously noted, the city of Rome was honeycombed with tunnels and underground passages. First, there were the quarry tunnels. The city's builders had simply dug their stone materials out from under the city itself, creating a maze of rough tunnels. The city also had aqueducts and sewers running beneath it. In other words, there were plenty of places to run and hide in the event that a raid interrupted your secret worship on behalf of a banned sect. The Romans persecuted Christians pretty aggressively through the fourth century, peaking with the reign of Diocletian. More than 50 catacombs were eventually built in and around the city during this time. While the catacombs were, at first, an improvised solution, they soon became entrenched in tradition. When people began to learn that the Christians were carrying on in cemeteries -- well, you can imagine the rumors. There were allegations of midnight debauchery and grave defilement. Some accused the Christians of drinking blood, a charge likely derived from the symbolic cannibalism embedded in the sacrament of Communion. The early Christians also marked the walls and tombs with various secret symbols, meant to convey important but classified information about their beliefs. These included the vesica pisces, otherwise known as the "Christian fish" and the "PX" symbol which has confused young Catholics everywhere. (It's the "initials" of Christ in Greek letters, with "X" (Chi) for "Ch" and "P" (Rho) for "r." Which isn't really even an initial, but an abbreviation. Whatever.) The early Christians were also frequently moved to artistic expression, and covered the walls of the catacombs with graffiti depicting Jesus, Jesus as the Lamb of God, Jesus as a phoenix rising from the ashes, Jesus on the half-shell, and so forth. Legend has it that St. Paul was interred in one of the earliest catacombs beneath the Vatican. Over time, more and more were built, many of which were converted from family sepulchers. Often, the catacomb where a martyr was buried would attract other graves and heighten the appeal of the site as a meeting place (the nucleus of what would become an extensive history of Catholic veneration of relics) and martyrs). The reliquary aspect of the catacombs was enhanced when Rome fell to the barbarians at the beginning of the Dark Ages. After the last great Roman persecution, the catacombs had become major sites of worship. The church often erected grand basilicas or built above-ground cemeteries over the catacombs. The invading Goths targeted these sites for plunder, prompting the pope to remove as many relics as possible before the city fell. By the middle of the Middle Ages, the catacombs had been largely forgotten. It wasn't until the early Renaissance that anyone took an interest. The tombs were re-excavated and continue to be a source of interest to archaeologists. Today, of course, the catacombs have suffered the eventual and inevitable fate of all places of religious significance -- the final transformation from pilgrimage site to tourist spot. "It's a hole new world" gushed the headline of a 1998 travel article in London's Sunday Telegraph, while clubs like the International Catacomb Society offer helpful tips on the hottest, hippest dank burial crypts frequented by the glitterati. Just hope that the Resurrection of the Dead doesn't take place while you're traipsing about moblogging everything in sight. There's nothing worse than a mob of angry Christian martyr zombies with a taste for blood. And flash photography really pisses them off.
|


It's just a flag to tell which state the element's in right now, or even if it doesn't have a state. The only place I've seen it used so far is STKM figuring out which particles it can spark...?
(elements.)ST_SOLID = Solid
(elements.)ST_LIQUID = Liquid
(elements.)ST_GAS = Gas
(elements.)ST_NONE = None of the above.
State = ST_SOLID;


What is pair programming?
Pair programming is the process of working with one other developer on a single project. One of the benefits of pair programming is that it helps reduce errors that might occur if one was working by oneself. Also, having another person to bounce ideas off of is advantageous because you might come up with an idea that is even better than what only either individual could have accomplished. It also helps keep each person in check when working, because you need to be able to justify your code as you collaborate.
Why is pair programming important to DBC?
It is important because pair programming is getting to be a more common practice in this industry. We might find ourself in a position in the future where we have to pair program, and it is good to be able to practice it now while we are also learning to program. Also, by doing this during DBC, it keeps us socializing with each other. We get to learn how other people work, and it is important to be able to adapt to someones work style to be productive if needed. Another important aspect of pair programming in DBC is getting the feedback from your pair. That way you can work on how you interact with other people and adjust where necessary.
Compare Driver and Navigator
The navigator takes the role that is looking at the map, thinking about the big picture, and where the project is going. They want to make sure the work is focused and does not stray from what is actually tying to be accomplished. The Driver is the one that is actually doing the writing the code, must be sure to be engaged with the navigator, and comment when appropriate. In either role, communication with each other is the key to be productive and successful.


| Class | Description |
|---|---|
| AbsoluteEvaluation |
Example showing how to use absolute constraint
Created by IntelliJ IDEA.
|
| AirPlaneLanding |
OR-LIBRARY:
"Given a set of planes and runways, the objective is to minimize the total (weighted) deviation from the target landing time for each plane. |
| AirPlanePara |
OR-LIBRARY:
"Given a set of planes and runways, the objective is to minimize the total (weighted) deviation from the target landing time for each plane. |
| AllIntervalSeries |
CSPLib prob007:
"Given n in N, find a vector s = (s_1, ..., s_n), such that s is a permutation of Z_n = {0,1,... |
| Alpha |
A verbal arithmetic puzzle:
Attribute a value to each letter, such that the equations are correct. |
| BACP |
A curriculum is a set of courses with prerequisites.
|
| BIBD |
CSPLib prob028:
"A Balanced Incomplete Block Design (BIBD) is defined as an arrangement of v distinct objects into b blocks such that each block contains exactly k distinct objects, each object occurs in exactly r different blocks, and every two distinct objects occur together in exactly lambda blocks. |
| BigLeq |
Simple example which sorts m integers in range [0,m-1]
by using an allDifferent constraint and arithmetic constraints (leq)
|
| BigSum |
Simple example using a sum constraint on a large set of variables
|
| BinPacking |
Bin packing example
put items into bins so that bin load is balanced
Illustrates the enumeration of optimal solutions
|
| CarSequencing |
CSPLib prob001:
"A number of cars are to be produced; they are not identical, because different options are available as variants on the basic model. |
| Contrived |
It consists of two vectors v and w.
|
| CostasArrays |
Costas Arrays
"Given n in N, find an array s = [s_1, ..., s_n], such that
s is a permutation of Z_n = {0,1,...
|
| CostasPara | |
| CumulativeSample | |
| CumulativeSample2 | |
| DominatingSetOfQueens | |
| Donald |
A verbal arithmetic puzzle:
D O N A L D + G E R A L D ======== R O B E R T Attribute a different value to each letter, such that the equation is correct. |
| Eq20 |
|
| Eq5 |
A system of equations provided by N.
|
| GolombRuler |
CSPLib prob006:
A Golomb ruler may be defined as a set of m integers 0 = a_1 < a_2 < ... < a_m such that the m(m-1)/2 differences a_j - a_i, 1 <= i < j <= m are distinct. |
| Grocery |
mozart-oz:
"A kid goes into a grocery store and buys four items. |
| Knapsack |
wikipedia:
"Given a set of items, each with a weight and a value, determine the count of each item to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible. |
| KnightTourProblem_Circuit |
Solves the Knight's Tour Problem
|
| Langford |
CSPLib prob024:
"Consider two sets of the numbers from 1 to 4. |
| LatinSquare |
wikipedia:
"A Latin square is an n x n array filled with n different Latin letters, each occurring exactly once in each row and exactly once in each column" |
| MagicSequence | |
| MagicSeries |
CSPLib prob019:
"A magic sequence of length n is a sequence of integers x0 . . xn-1 between 0 and n-1, such that for all i in 0 to n-1, the number i occurs exactly xi times in the sequence." |
| MagicSquare |
CSPLib prob019:
"An order n magic square is a n by n matrix containing the numbers 1 to n^2, with each row, column and main diagonal equal the same sum. |
| MarioKart |
Path Constraint Problem
The Problem The path problem a simple problem where we are trying to find the best path in a directed graph.
|
| MeetingScheduling |
CSPLib prob046:
"Informally, a set of agents want to meet.
|
| Nonogram |
CSPLib prob012:
"Nonograms are a popular puzzles, which goes by different names in different countries. |
| OpenStacks |
|
| Ordering |
Simple example which orders a set of integer variables
|
| OrthoLatinSquare |
Orthogonal latin square
|
| Pareto |
Multi-objective optimization illustration to compute pareto solutions
|
| Partition |
CSPLib prob049:
"This problem consists in finding a partition of numbers 1..N into two sets A and B such that: A and B have the same cardinality sum of numbers in A = sum of numbers in B sum of squares of numbers in A = sum of squares of numbers in B More constraints can thus be added, e.g also impose the equality on the sum of cubes. |
| Photo |
gecode:
"A group of people wants to take a group photo. |
| Pigeons |
N pigeons nest in N-1 nests.
|
| ReifSample |
Small example enumerating solutions of
(x>y && y>z && z>x) || not(AllDifferent(x,y,z)
(the left part being always false, it ensures that AllDifferent is violated
|
| RLFAP |
CELAR Radio Link Frequency Assignment Problem:
"The Radio Link frequency Assignment Problem consists in assigning frequencies to a set of radio links defined between pairs of sites in order to avoid interferences. |
| SchurLemma |
CSPLib: prob015:
"The problem is to put n balls labelled {1,...n} into 3 boxes so that for any triple of balls (x,y,z) with x+y=z, not all are in the same box. |
| SendMoreMoney |
The famous SEND + MORE = MONEY problem.
|
| SMPTSP |
simple CP model to solve a toy SMPTSP instance
(see Fages and Lapègue, CP'13 or Artificial Intelligence journal)
Enumeration of all optimal solutions
|
| SocialGolfer |
CSPLib prob010:
"The coordinator of a local golf club has come to you with the following problem. |
| StableMarriage | |
| Sudoku |
wikipedia:
"The objective is to fill a 9? |
| Table |
Small illustration of a table constraint
|
| WarehouseLocation |
CSPLib prob034:
"In the Warehouse Location problem (WLP), a company considers opening warehouses at some candidate locations in order to supply its existing stores. |
Copyright © 2015. All rights reserved.


{# templates/image/images_for_one_voter.html #}
{% extends "template_base.html" %}
{% block title %}
{% if voter_id %}{{ voter_id }} voter_id
{% else %}No Voter Found{% endif %}
{% endblock %}
{% block content %}
< Back to Voter List Analysis
< Back to Cache images locally for all voters
| We Vote ID | display_kind_of_image | we_vote_image_url | ||
| {{ forloop.counter }} | {{ one_image_row.voter_we_vote_id }} | {{ one_image_row.display_kind_of_image }} / {{ one_image_row.display_image_size }} | {% if one_image_row.display_image_size != "original" %} {# Don't show image if too big #} {% endif %} | {% if one_image_row.we_vote_image_url %} {{ one_image_row.we_vote_image_url }} {% else %}{% endif %} |
(no voter images found)
{% endif %}


Block A, Building 3, Unitech Infospace,
Hyderabad 500090
Make An Appointment
Book the first available Appointment
Wednesday, Ahgust, 15, 2017
10, Appointment available
3.00 PM
5.00 PM
7.00 PM
9.00 PM
9.00 PM
9.00 PM
Average Appointment Duration
BOOK NOW
Need to select a different date? Simply tap “Show More Days” and EXOS
will allow you to select from calendar mode.


--- layout: post title: Racing Simulation for Linux post_id: 277 categories: - odds & ends date: 2004-04-25 09:53:00.000000000 -06:00 author: Jamis permalink: 2004/4/25/racing-simulation-for-linux.html ---
TORCS is a dang cool racing game for Linux. It originated as a racing simulator, in which you would have robots race against robots. It has evolved into a game where you can actually drive one of the cars yourself.
The graphics are amazing. Some of the tracks (like Alpine, or CG 2) are commercial quality, and many of the cars are painstakingly detailed as well.
It is almost the perfect racing game for Linux. If only it allowed network play, multiple paths through a track (ie, a city or something), and stunts (jumps, loops, etc.), then it would truly rock.
Do I want these features badly enough to dig into the TORCS code and add them myself?
Hmm. Probably not…


Toggle navigation
English (does nothing)
English
Русский
tweet
Video not supported
Tweetor.fm
You unlikely like this, but still
Enjoy if you can
Tweetor username
Play
{% for tweet in tweets %}
{{tweet}}
{% end %}


I have worked in customer service for almost three years and have learned many skills in the process. Skills I have acquired include engaging customer service, multitasking, dealing with tough situations, and many others that will come in handy in future jobs and careers. Attending and graduating from a University Preparatory school has taught me how to continue learning and use what I have learned in everything I do.
In addition to that, I have started work in web development with UC Berkeley Extention's Bootcamps to learn new skills and start a career in web development.
Links:
GitHub Here you can see all my projects and repositories worked on throught the span of my bootcamp
LinkedIn Here is my LinkedIn profile for more information and seeing what I have been up to lately
Resume Here is my resume. You can see my work experience and other important information


JAWBREAKER
Reviewed by Harvey Karten, Ph.D. Columbia TriStar Pictures Director: Darren Stein Writer: Darren Stein Cast: Rose McGowan, Rebecca Gayheart, Julie Benz, Judy Evans Greer, Chad Christ, Charlotte Roldan, Pam Grier, Carol Kane, Tatyana Ali, Ethan Erickson
Columbia Picture is hitting the high-school and children's market hard this year. Movies that the core teen audience can look forward to include "Dick," about two women students who wander off during a class trip to the White House, meet President Richard Nixon, and end up as the official walkers of his dog, Checkers. Yet another is "Idle Hands," a comedy- horror movie that details the terror and fun that occurs when the Devil possesses the right hand of a clueless 17-year-old slacker. Why should we look forward to these without knowing more about them? Simply because they sound original, an advantage notably missing from the typical offering of the genre. Which brings us to Columbia/TriStar's "Jawbreakers," unoriginal and almost admittedly so, as its writer-director, Darren Stein, heralds his mission to relive the teen movies of his own high-school days and put together a story which is a collage of their themes.
"Jawbreaker" is the sort of film that allows movie buffs to take pride in their ability to recognize scenes appropriated from previous works. You should be able without much difficulty to pick out motifs from "Carrie," "Grease," and "Clueless," and even "Frankenstein" is evoked by Mr. Stein's imagination. But the film--which calls itself a satirical horror- comedy, is not particularly funny, nor does it display much of the standard horror routines. There are no scary, false-alarm scenes of people coming at you from behind but turn out to be friends. Nobody is slashed or beheaded and not a single girl or boy turns into an octopus or even a lowly slug. Though the movie features a strong performance by Rose McGowan in the role of the tightly controlled and attractive Courtney Shayne, it is no more involving or imaginative than fare that can be picked up on the tube--a seven o'clock feature film, perhaps.
The eponymous jawbreaker is its main metaphor. A jawbreaker is a hunk of round candy that's sweet on the outside but, if chewed up, will disjoin your jaw and allow your dentist to put a down payment on a new Porsche. Director Stein aims to portray the most popular girl in school as one who is easy to look out but watch out: she has nerves of steel and will have you for breakfast with her diet-conscious fat-free yogurt toasted English. (In this regard, the jawbreaker is the diametrical opposite of the sabra, or prickly pear, which is tough as nails on the outside but dulcet within.)
The story centers on Courtney (Rose McGowan), a high- school senior who would be a shoo-in for prom queen in the upcoming dance were it not for the thoroughly sweet and beautiful Liz Purr (Charlotte Roldan), who is considered the cat's meow. Courtney conspires with her dense friend Marcie Fox (Julie Benz--who looks like a young Sally Kellerman) and her hesitant pal Julie (Rebecca Gayheart) to kidnap Liz on her 17th birthday and stuff her with pancakes. She and her pals break into Liz's home, stuff a jawbreaker into her mouth, gag her, and pile her into the trunk of a car, but when they open the back of the auto after arriving at the pancake house, they discover that Liz is dead of asphyxiation. When the wallflowerish school nerd, Fern Mayo (Judy Evans Greer) Greer), catches the trio trying to make Liz appear the victim of a rape-murderer, she is bribed into silence by a beauty makeover, which transforms her into a virtual princess named Vylette.
Customs of the high-school girls are ribbed together with the character of the principal and some teachers, however ineffectively. A quick scene of the cooking class (where one girl breaks open a bloody egg described by an onlooker as a stillborn) is not amusing and of anatomy class hardly rib- tickling. As principal Miss Sherman, Carol Kane is not in the same class as her counterpart in "Grease." While Courtney-- who is to meet her comeuppance at the school prom-- thankfully does not possess the telekinetic powers whose excesses sank both the movie and the Broadway musical "Carrie," her character displays not even a modicum of originality. Nor does her dialogue contain any of the wit that can easily be found in a humdrum tale by Stephen King.  And the class caterpillar can turn into a vain butterfly. But then we always knew that.
Rated R. Running Time: 89 minutes. (C) 1999 Harvey Karten
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Google Maps tests follow feature for local guides
by Diana GoovaertsGoogle announced plans to trial a new feature for Maps which will allow users to follow posts from so-called local guides, in an apparent effort to make it easier to find relevant recommendations.
Like Yelp, the company’s Local Guides programme relies on reviews of restaurants, shops and other local outlets from ordinary people. Google said the new Maps feature will allow users to quickly access recent reviews from their favourite local guides in the app’s For You tab.
It added the idea is to inspire users with “ideas of things to do and places to go” as they search for new experiences.
The company said it already has 120 million active local guides in 24,000 cities across the globe and will soon launch a pilot of features in nine of those: Bangkok, Delhi, London, Mexico City, New York, Osaka, San Francisco, São Paulo and Tokyo.


pyglet Documentation Index¶
Pyglet is a pure python cross-platform application framework intended for game development. It supports windowing, user interface event handling, OpenGL graphics, loading images and videos and playing sounds and music. It works on Windows, OS X and Linux.
Programming Guide¶
- Chapters
- Installation
- Writing a pyglet application
- Creating an OpenGL context
- The OpenGL interface
- Graphics
- Windowing
- The application event loop
- The pyglet event framework
- Working with the keyboard
- Working with the mouse
- Working with other input devices
- Keeping track of time
- Displaying text
- Images
- Sound and video
- Application resources
- Debugging tools
- Appendix: Migrating to pyglet 1.1


Organizations helpers¶
What is this?¶
The following methods are added to clients instantiated using Betterboto:
Methods¶
-
betterboto.organizations.
convert_path_to_ou
(self, ou)[source]¶ This method accepts an ou and returns the path from the root account down to the ou
- Parameters
self – organizations client
ou – the account
- Returns
the path from the root account down to the ou
-
betterboto.organizations.
list_children_nested
(self, **kwargs)[source]¶ This method will return a list of all children (either ACCOUNT or ORGANIZATIONAL_UNIT) for the given ParentId. It includes children, grandchildren lower levels of nesting.
- Parameters
self – organizations client
kwargs – these are passed onto the list_children method call
- Returns
list of children in the structure of [{‘Id’: “0123456789010”}, {‘Id’: “1009876543210”}]
-
betterboto.organizations.
list_children_single_page
(self, **kwargs)[source]¶ This will continue to call list_children until there are no more pages left to retrieve. It will return the aggregated response in the same structure as list_children does.
- Parameters
self – organizations client
kwargs – these are passed onto the list_children method call
- Returns
organizations_client.list_children.response


R e v i e w : B A T T L E F I E L D E A R T H
by K. Harris - Copyright © 2000
Disclaimer: I'm not a professional film critic, and I don't play one on TV either This review is intended only as a comparison between the film and the novel - for a review of the film itself, check other sources
Any film based on a book, especially a well-known book, must invariably be compared to that book. In this case, the spectacular L. Ron Hubbard sci-fi novel BATTLEFIELD EARTH is vastly superior to its film version in every respect. Having read the paperback twice and being more familiar with the complexities of the story than the majority of the film's critics, I found countless major discrepancies between the two, as will anyone else who has read the book even once. The screenwriter has taken very broad liberties with the story and, in doing so, has created a script full of events which seen to occur almost at random and often without discernible reason.
A great many of the film's elements with which critics have found fault are due to the merciless hatchet job which was performed on the original story. It would take far too long to detail the many differences between the book and the film, particularly in the finer details of the story, most of which were hacked to bits or ignored completely. To be fair, it is a rather lengthy tome - over a thousand pages in paperback form - and any attempt to turn such a large novel into a screenplay will undoubtedly require some amount of cutting and rewriting, but the screenwriter seems to have edited the story with a chainsaw.
In fact, only the most basic plot remains: In the year 3000, Jonnie Goodboy Tyler - one of Earth's last remaining humans after an invasion and takeover by the alien Psychlo race a thousand years prior - leaves his secluded mountain village, is captured by the evil Psychlo Terl [security chief of planet Earth], is taught the Psychlo language and basic mining techniques courtesy of an instruction machine [a device invented by an extinct alien race called "Chinkos" in the book and, for some reason, "Clinkos" in the film] and, as a secret experiment, is forced with other humans ["man-animals"] to mine a huge gold deposit in the Rocky Mountains near the ruins of Denver. Anxious to end his tour of duty on the hideously ugly, weak-gravity, poisonous planet Earth, Terl plans to teleport this cache of gold back to his home planet in coffins normally used for shipping dead Psychlos, dig up the coffins after a time, and retire an incredibly wealthy and powerful Psychlo.
What the film only hints at, by way of several small unexplained flashes of fire in the cockpit of Terl's personal transport plane, is that this gold deposit is in an area full of uranium ore pockets, which means that no Psychlo can get anywhere near it because radiation makes their "breathe-gas" explode. It also makes no mention of the point that this vast gold deposit had been buried until recently, when an earthquake and resulting rock slide uncovered it, allowing it to be discovered by Terl's reconnaissance drone. Since it is impossible for any Psychlo to mine the gold, Terl forces "man-animals" to do the work for him after determining, in his initial experiments on our hero, that humans can in fact be trained to perform certain tasks. But, he underestimates humans and refers to them as "rat brains" - what he doesn't know is that Jonnie Tyler has learned what radiation does to Psychlo breathe-gas. Tyler procures a supply of old nuclear warheads from an ancient U.S. Air Force base and substitutes them for Terl's gold in the lead coffins [marked "Radiation-Killed" by Terl so that no Psychlo will want to open them]; they are then teleported to planet Psychlo and detonated.
In the book, the Psychlos, in their infinite greed, have mined the crust of their own planet [using their "deep-core mining technique"] to the point where it resembles so much Swiss cheese, making it a bit fragile and easily vulnerable to a nuclear blast - which, when Tyler's warheads are detonated, punches a hole in the planet's crust reaching nearly to the core because the teleportation receiving platform on Psychlo had been sealed off in every other direction by an emergency force field, giving the full force of the blast nowhere to go but down. The film does show the result of this blast and of a large amount of radiation being released into the breathe-gas atmosphere of planet Psychlo, but it does so in such an anti-climactic way that you have to wonder what just happened and why it happened in the first place. There is no clue that this is, in fact, one of the most crucial plot points in the original story - the film basically depicts this event as "...and then planet Psychlo exploded." In the film, planet Psychlo is reduced to a cloud of dust; in the book, it becomes what amounts to a small star, a point which is more than a little bit important to the remainder of the story.
The very concept of teleportation, one of the most crucial elements of the original story, is only a minor element of the film - I can only recall its having been used twice, and even then only as a third-rate special effect. It is in fact the very key to the Psychlos' vast power; having an exclusive monopoly on teleportation, the technology and mathematics of which they will guard to the point of berzerker suicide, they control sixteen universes. The film doesn't even begin to hint at any of this, and in its absence, we learn almost nothing about the Psychlo race itself - little more than that they come from a purple planet and claim to have conquered Earth in nine minutes.
This, in broad summary, is the plot of the FIRST HALF of the original L. Ron Hubbard novel - the second half presumably will be used as the basis of the sequel, should anybody actually want to see one after this debacle. Personally, I do want to see a sequel, but only in the hope that they can get it right next time. As a fan of the novel, I eagerly awaited the film.
_O_ <\_/> _/ \_ Crossfire. ---------------------- "...and the greatest of men would be silly and lazy," so I would be king, if the world was crazy" - Shel Silverstein
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Collective Calendar
Settings
X
Select Your Color Theme
Authenticate Your Accounts
Google
TODAY
CALENDARS
<
Month
>
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday


-15
Code Quiz!
Restart
Highscores
Start Quiz!
Are you ready?
possible answer
possible answer
possible answer
possible answer
0


- Main Configuration (configuration of primary scheduler settings, transactions)
- Configuration of ThreadPool (tune resources for job execution)
- Configuration of Listeners (your application can receive notification of scheduled events)
- Configuration of Plug-Ins (add functionality to your scheduler)
- Configuration of RMI Server and Client (use a Quartz instance from a remote process)
- Configuration of RAMJobStore (store jobs and triggers in memory)
- Configuration of JDBC-JobStoreTX (store jobs and triggers in a database via JDBC)
- Configuration of JDBC-JobStoreCMT (JDBC with JTA container-managed transactions)
- Configuration of DataSources (for use by the JDBC-JobStores)
- Configuration of Database Clustering (achieve fail-over and load-balancing with JDBC-JobStore)
Configuration of Quartz is typically done through the use of a properties file, in conjunction with the use of StdSchedulerFactory
(which consumes the configuration file and instantiates a scheduler).
By default, StdSchedulerFactory
load a properties file named quartz.properties
from the "current working directory". If that fails, then the quartz.properties
file located (as a resource) in the org/quartz
package is loaded. If you wish to use a file other than these defaults, you must define the system property org.quartz.properties
to point to the file you want.
Alternatively, you can explicitly initialize the factory by calling one of the initialize(xx)
methods before calling getScheduler()
on the StdSchedulerFactory
.
Instances of the specified JobStore, ThreadPool, and other SPI classes will be created by name, and then any additional properties specified for them in the config file will be set on the instance by calling an equivalent set
method. For example if the properties file contains the property org.quartz.jobStore.myProp = 10
then after the JobStore class has been instantiated, the method setMyProp()
will be called on it. Type conversion to primitive Java types (int, long, float, double, boolean, and String) are performed before calling the property’s setter method.
One property can reference another property’s value by specifying a value following the convention of<EMAIL_ADDRESS>, for example, to reference the scheduler’s instance name as the value for some other property, you would use<EMAIL_ADDRESS>.
The properties for configuring various aspect of a scheduler are described in these sub-documents: Choose a topic:
Main Configuration (configuration of primary scheduler settings, transactions)
Configure Main Scheduler Settings
These properties configure the identification of the scheduler, and various other "top level" settings.
| Property Name | Req'd | Type | Default Value |
|---|---|---|---|
| org.quartz.scheduler.instanceName | no | string | 'QuartzScheduler' |
| org.quartz.scheduler.instanceId | no | string | 'NON_CLUSTERED' |
| org.quartz.scheduler.instanceIdGenerator.class | no | string (class name) | org.quartz.simpl .SimpleInstanceIdGenerator |
| org.quartz.scheduler.threadName | no | string | instanceName + '_QuartzSchedulerThread' |
| org.quartz.scheduler .makeSchedulerThreadDaemon |
no | boolean | false |
| org.quartz.scheduler .threadsInheritContextClassLoaderOfInitializer |
no | boolean | false |
| org.quartz.scheduler.idleWaitTime | no | long | 30000 |
| org.quartz.scheduler.dbFailureRetryInterval | no | long | 15000 |
| org.quartz.scheduler.classLoadHelper.class | no | string (class name) | org.quartz.simpl .CascadingClassLoadHelper |
| org.quartz.scheduler.jobFactory.class | no | string (class name) | org.quartz.simpl.PropertySettingJobFactory |
| org.quartz.context.key.SOME_KEY | no | string | none |
| org.quartz.scheduler.userTransactionURL | no | string (url) | 'java:comp/UserTransaction' |
| org.quartz.scheduler .wrapJobExecutionInUserTransaction |
no | boolean | false |
| org.quartz.scheduler.skipUpdateCheck | no | boolean | false |
| org.quartz.scheduler .batchTriggerAcquisitionMaxCount |
no | int | 1 |
| org.quartz.scheduler .batchTriggerAcquisitionFireAheadTimeWindow |
no | long | 0 |
org.quartz.scheduler.instanceName
Can be any string, and the value has no meaning to the scheduler itself - but rather serves as a mechanism for client code to distinguish schedulers when multiple instances are used within the same program. If you are using the clustering features, you must use the same name for every instance in the cluster that is 'logically' the same Scheduler.
org.quartz.scheduler.instanceId
Can be any string, but must be unique for all schedulers working as if they are the same 'logical' Scheduler within a cluster. You may use the value "AUTO" as the instanceId if you wish the Id to be generated for you. Or the value "SYS_PROP" if you want the value to come from the system property "org.quartz.scheduler.instanceId".
org.quartz.scheduler.instanceIdGenerator.class
Only used if org.quartz.scheduler.instanceId is set to "AUTO". Defaults to "org.quartz.simpl.SimpleInstanceIdGenerator", which generates an instance id based upon host name and time stamp. Other IntanceIdGenerator implementations include SystemPropertyInstanceIdGenerator (which gets the instance id from the system property "org.quartz.scheduler.instanceId", and HostnameInstanceIdGenerator which uses the local host name (InetAddress.getLocalHost().getHostName()). You can also implement the InstanceIdGenerator interface your self.
org.quartz.scheduler.threadName
Can be any String that is a valid name for a java thread. If this property is not specified, the thread will receive the scheduler’s name ("org.quartz.scheduler.instanceName") plus an the appended string '_QuartzSchedulerThread'.
org.quartz.scheduler.makeSchedulerThreadDaemon
A boolean value ('true' or 'false') that specifies whether the main thread of the scheduler should be a daemon thread or
not. See also the org.quartz.scheduler.makeSchedulerThreadDaemon property for tuning the SimpleThreadPool
if that is the thread pool implementation you are using (which is most likely the case).
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer
A boolean value ('true' or 'false') that specifies whether the threads spawned by Quartz will inherit the context ClassLoader of the initializing thread (thread that initializes the Quartz instance). This will affect Quartz main scheduling thread, JDBCJobStore’s misfire handling thread (if JDBCJobStore is used), cluster recovery thread (if clustering is used), and threads in SimpleThreadPool (if SimpleThreadPool is used). Setting this value to 'true' may help with class loading, JNDI look-ups, and other issues related to using Quartz within an application server.
org.quartz.scheduler.idleWaitTime
Is the amount of time in milliseconds that the scheduler will wait before re-queries for available triggers when the scheduler is otherwise idle. Normally you should not have to 'tune' this parameter, unless you’re using XA transactions, and are having problems with delayed firings of triggers that should fire immediately. Values less than 5000 ms are not recommended as it will cause excessive database querying. Values less than 1000 are not legal.
org.quartz.scheduler.dbFailureRetryInterval
Is the amount of time in milliseconds that the scheduler will wait between re-tries when it has detected a loss of connectivity within the JobStore (e.g. to the database). This parameter is obviously not very meaningful when using RamJobStore.
org.quartz.scheduler.classLoadHelper.class
Defaults to the most robust approach, which is to use the "org.quartz.simpl.CascadingClassLoadHelper" class - which in turn uses every other ClassLoadHelper class until one works. You should probably not find the need to specify any other class for this property, though strange things seem to happen within application servers. All of the current possible ClassLoadHelper implementation can be found in the org.quartz.simpl package.
org.quartz.scheduler.jobFactory.class
The class name of the JobFactory to use. A JobFatcory is responsible for producing instances of JobClasses. The default is 'org.quartz.simpl.PropertySettingJobFactory', which simply calls newInstance() on the class to produce a new instance each time execution is about to occur. PropertySettingJobFactory also reflectively sets the job’s bean properties using the contents of the SchedulerContext and Job and Trigger JobDataMaps.
org.quartz.context.key.SOME_KEY
Represent a name-value pair that will be placed into the "scheduler context" as strings. (see Scheduler.getContext()). So for example, the setting "org.quartz.context.key.MyKey = MyValue" would perform the equivalent of scheduler.getContext().put("MyKey", "MyValue").
NOTE: The Transaction-Related properties should be left out of the config file unless you are using JTA transactions.
org.quartz.scheduler.userTransactionURL
Should be set to the JNDI URL at which Quartz can locate the Application Server’s UserTransaction manager. The default value (if not specified) is "java:comp/UserTransaction" - which works for almost all Application Servers. Websphere users may need to set this property to "jta/usertransaction". This is only used if Quartz is configured to use JobStoreCMT, and org.quartz.scheduler.wrapJobExecutionInUserTransaction is set to true.
org.quartz.scheduler.wrapJobExecutionInUserTransaction
Should be set to "true" if you want Quartz to start a UserTransaction before calling execute on your job. The Tx will commit after the job’s execute method completes, and after the JobDataMap is updated (if it is a StatefulJob). The default value is "false". You may also be interested in using the @ExecuteInJTATransaction annotation on your job class, which lets you control for an individual job whether Quartz should start a JTA transaction - whereas this property causes it to occur for all jobs.
org.quartz.scheduler.skipUpdateCheck
Whether or not to skip running a quick web request to determine if there is an updated version of Quartz available for download. If the check runs, and an update is found, it will be reported as available in Quartz’s logs. You can also disable the update check with the system property "org.terracotta.quartz.skipUpdateCheck=true" (which you can set in your system environment or as a -D on the java command line). It is recommended that you disable the update check for production deployments.
org.quartz.scheduler.batchTriggerAcquisitionMaxCount
The maximum number of triggers that a scheduler node is allowed to acquire (for firing) at once. Default value is 1. The larger the number, the more efficient firing is (in situations where there are very many triggers needing to be fired all at once) - but at the cost of possible imbalanced load between cluster nodes. If the value of this property is set to > 1, and JDBC JobStore is used, then the property "org.quartz.jobStore.acquireTriggersWithinLock" must be set to "true" to avoid data corruption.
org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow
The amount of time in milliseconds that a trigger is allowed to be acquired and fired ahead of its scheduled fire time. Defaults to 0. The larger the number, the more likely batch acquisition of triggers to fire will be able to select and fire more than 1 trigger at a time - at the cost of trigger schedule not being honored precisely (triggers may fire this amount early). This may be useful (for performance’s sake) in situations where the scheduler has very large numbers of triggers that need to be fired at or near the same time.
Configuration of ThreadPool (tune resources for job execution)
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.threadPool.class | yes | string (class name) | null |
| org.quartz.threadPool.threadCount | yes | int | -1 |
| org.quartz.threadPool.threadPriority | no | int | Thread.NORM_PRIORITY (5) |
org.quartz.threadPool.class
Is the name of the ThreadPool implementation you wish to use. The threadpool that ships with Quartz is "org.quartz.simpl.SimpleThreadPool", and should meet the needs of nearly every user. It has very simple behavior and is very well tested. It provides a fixed-size pool of threads that 'live' the lifetime of the Scheduler.
org.quartz.threadPool.threadCount
Can be any positive integer, although you should realize that only numbers between 1 and 100 are very practical. This is the number of threads that are available for concurrent execution of jobs. If you only have a few jobs that fire a few times a day, then 1 thread is plenty! If you have tens of thousands of jobs, with many firing every minute, then you probably want a thread count more like 50 or 100 (this highly depends on the nature of the work that your jobs perform, and your systems resources!).
org.quartz.threadPool.threadPriority
Can be any int between Thread.MIN_PRIORITY (which is 1) and Thread.MAX_PRIORITY (which is 10). The default is Thread.NORM_PRIORITY (5).
SimpleThreadPool-Specific Properties
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.threadPool.makeThreadsDaemons | no | boolean | false |
| org.quartz.threadPool.threadsInheritGroupOfInitializingThread | no | boolean | true |
| org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread | no | boolean | false |
| org.quartz.threadPool.threadNamePrefix | no | string | [Scheduler Name]_Worker |
org.quartz.threadPool.makeThreadsDaemons
Can be set to "true" to have the threads in the pool created as daemon threads. Default is "false". See also the ConfigMain org.quartz.scheduler.makeSchedulerThreadDaemon
property.
org.quartz.threadPool.threadsInheritGroupOfInitializingThread
Can be "true" or "false", and defaults to true.
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread
Can be "true" or "false", and defaults to false.
org.quartz.threadPool.threadNamePrefix
The prefix for thread names in the worker pool - will be postpended with a number.
Custom ThreadPools
If you use your own implementation of a thread pool, you can have properties set on it reflectively simply by naming the property as thus:
Setting Properties on a Custom ThreadPool
org.quartz.threadPool.class = com.mycompany.goo.FooThreadPool org.quartz.threadPool.somePropOfFooThreadPool = someValue
Configuration of Listeners (your application can receive notification of scheduled events)
Global listeners can be instantiated and configured by StdSchedulerFactory
, or your application can do it itself
at runtime, and then register the listeners with the scheduler. "Global" listeners listen to the events of every
job/trigger rather than just the jobs/triggers that directly reference them.
Configuring listeners through the configuration file consists of giving then a name, and then specifying the class name, and any other properties to be set on the instance. The class must have a no-arg constructor, and the properties are set reflectively. Only primitive data type values (including Strings) are supported.
Thus, the general pattern for defining a "global" TriggerListener is:
Configuring a Global TriggerListener
org.quartz.triggerListener.NAME.class = com.foo.MyListenerClass org.quartz.triggerListener.NAME.propName = propValue org.quartz.triggerListener.NAME.prop2Name = prop2Value
And the general pattern for defining a "global" JobListener is:
Configuring a Global JobListener
org.quartz.jobListener.NAME.class = com.foo.MyListenerClass org.quartz.jobListener.NAME.propName = propValue org.quartz.jobListener.NAME.prop2Name = prop2Value
Configuration of Plug-Ins (add functionality to your scheduler)
Like listeners configuring plugins through the configuration file consists of giving then a name, and then specifying the class name, and any other properties to be set on the instance. The class must have a no-arg constructor, and the properties are set reflectively. Only primitive data type values (including Strings) are supported.
Thus, the general pattern for defining a plug-in is:
Configuring a Plugin
org.quartz.plugin.NAME.class = com.foo.MyPluginClass org.quartz.plugin.NAME.propName = propValue org.quartz.plugin.NAME.prop2Name = prop2Value
There are several Plugins that come with Quartz, that can be found in the org.quartz.plugins package (and subpackages). Example of configuring a few of them are as follows:
Sample configuration of Logging Trigger History Plugin
The logging trigger history plugin catches trigger events (it is also a trigger listener) and logs then with slf4j. See the class’s JavaDoc for a list of all the possible parameters.
Sample configuration of Logging Trigger History Plugin
org.quartz.plugin.triggHistory.class = \ org.quartz.plugins.history.LoggingTriggerHistoryPlugin org.quartz.plugin.triggHistory.triggerFiredMessage = \ Trigger \{1\}.\{0\} fired job \{6\}.\{5\} at: \{4, date, HH:mm:ss MM/dd/yyyy} org.quartz.plugin.triggHistory.triggerCompleteMessage = \ Trigger \{1\}.\{0\} completed firing job \{6\}.\{5\} at \{4, date, HH:mm:ss MM/dd/yyyy\}.
Sample configuration of XML Scheduling Data Processor Plugin
Job initialization plugin reads a set of jobs and triggers from an XML file, and adds them to the scheduler during initialization. It can also delete exiting data. See the class’s JavaDoc for more details.
Sample configuration of JobInitializationPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = data/my_job_data.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true
The XML schema definition for the file can be found here:
Sample configuration of Shutdown Hook Plugin
The shutdown-hook plugin catches the event of the JVM terminating, and calls shutdown on the scheduler.
Sample configuration of ShutdownHookPlugin
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin org.quartz.plugin.shutdownhook.cleanShutdown = true
Configuration of RMI Server and Client (use a Quartz instance from a remote process)
None of the primary properties are required, and all have 'reasonable' defaults. When using Quartz via RMI, you need to start an instance of Quartz with it configured to "export" its services via RMI. You then create clients to the server by configuring a Quartz scheduler to "proxy" its work to the server.
NOTE: Some users experience problems with class availability (namely Job classes) between the client and server. To work through these problems you’ll need an understanding of RMI’s "codebase" and RMI security managers. You may find these resources to be useful:
An excellent description of RMI and codebase: http://www.kedwards.com/jini/codebase.html. One of the important points is to realize that "codebase" is used by the client!
Quick info about security managers: http://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0500.asp
And finally from the Java API docs, read the docs for the RMISecurityManager.
| Property Name | Required | Default Value |
|---|---|---|
| org.quartz.scheduler.rmi.export | no | false |
| org.quartz.scheduler.rmi.registryHost | no | 'localhost' |
| org.quartz.scheduler.rmi.registryPort | no | 1099 |
| org.quartz.scheduler.rmi.createRegistry | no | 'never' |
| org.quartz.scheduler.rmi.serverPort | no | random |
| org.quartz.scheduler.rmi.proxy | no | false |
org.quartz.scheduler.rmi.export
If you want the Quartz Scheduler to export itself via RMI as a server then set the 'rmi.export' flag to true.
org.quartz.scheduler.rmi.registryHost
The host at which the RMI Registry can be found (often 'localhost').
org.quartz.scheduler.rmi.registryPort
The port on which the RMI Registry is listening (usually 1099).
org.quartz.scheduler.rmi.createRegistry
Set the 'rmi.createRegistry' flag according to how you want Quartz to cause the creation of an RMI Registry. Use "false" or "never" if you don’t want Quartz to create a registry (e.g. if you already have an external registry running). Use "true" or "as_needed" if you want Quartz to first attempt to use an existing registry, and then fall back to creating one. Use "always" if you want Quartz to attempt creating a Registry, and then fall back to using an existing one. If a registry is created, it will be bound to port number in the given 'org.quartz.scheduler.rmi.registryPort' property, and 'org.quartz.rmi.registryHost' should be "localhost".
org.quartz.scheduler.rmi.serverPort
The port on which the Quartz Scheduler service will bind and listen for connections. By default, the RMI service will 'randomly' select a port as the scheduler is bound to the RMI Registry.
org.quartz.scheduler.rmi.proxy
If you want to connect to (use) a remotely served scheduler, then set the 'org.quartz.scheduler.rmi.proxy' flag to true. You must also then specify a host and port for the RMI Registry process - which is typically 'localhost' port 1099.
NOTE: It does not make sense to specify a 'true' value for both 'org.quartz.scheduler.rmi.export' and 'org.quartz.scheduler.rmi.proxy' in the same config file - if you do, the 'export' option will be ignored. A value of 'false' for both 'export' and 'proxy' properties is of course valid, if you’re not using Quartz via RMI.
Configuration of RAMJobStore (store jobs and triggers in memory)
RAMJobStore is used to store scheduling information (job, triggers and calendars) within memory. RAMJobStore is fast and lightweight, but all scheduling information is lost when the process terminates.
RAMJobStore
is selected by setting the org.quartz.jobStore.class
property as such:
Setting The Scheduler’s JobStore
to RAMJobStore
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
RAMJobStore can be tuned with the following properties:
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.jobStore.misfireThreshold | no | int | 60000 |
org.quartz.jobStore.misfireThreshold
The number of milliseconds the scheduler will 'tolerate' a trigger to pass its next-fire-time by, before being considered "misfired". The default value (if you don’t make an entry of this property in your configuration) is 60000 (60 seconds).
Configuration of JDBC-JobStoreTX (store jobs and triggers in a database via JDBC)
JDBCJobStore is used to store scheduling information (job, triggers and calendars) within a relational database. There are actually two seperate JDBCJobStore classes that you can select between, depending on the transactional behaviour you need.
JobStoreTX manages all transactions itself by calling commit() (or rollback()) on the database connection after every action (such as the addition of a job). JDBCJobStore is appropriate if you are using Quartz in a stand-alone application, or within a servlet container if the application is not using JTA transactions.
The JobStoreTX is selected by setting the org.quartz.jobStore.class
property as such:
Setting The Scheduler’s JobStore
to JobStoreTX
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
JobStoreTX
can be tuned with the following properties:
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.jobStore.driverDelegateClass | yes | string | null |
| org.quartz.jobStore.dataSource | yes | string | null |
| org.quartz.jobStore.tablePrefix | no | string | "QRTZ_" |
| org.quartz.jobStore.useProperties | no | boolean | false |
| org.quartz.jobStore.misfireThreshold | no | int | 60000 |
| org.quartz.jobStore.isClustered | no | boolean | false |
| org.quartz.jobStore.clusterCheckinInterval | no | long | 15000 |
| org.quartz.jobStore.maxMisfiresToHandleAtATime | no | int | 20 |
| org.quartz.jobStore.dontSetAutoCommitFalse | no | boolean | false |
| org.quartz.jobStore.selectWithLockSQL | no | string | "SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE" |
| org.quartz.jobStore.txIsolationLevelSerializable | no | boolean | false |
| org.quartz.jobStore.acquireTriggersWithinLock | no | boolean | false (or true - see doc below) |
| org.quartz.jobStore.lockHandler.class | no | string | null |
| org.quartz.jobStore.driverDelegateInitString | no | string | null |
org.quartz.jobStore.driverDelegateClass
Driver delegates understand the particular 'dialects' of varies database systems. Possible choices include:
-
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
(for fully JDBC-compliant drivers) -
org.quartz.impl.jdbcjobstore.MSSQLDelegate
(for Microsoft SQL Server, and Sybase) -
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
-
org.quartz.impl.jdbcjobstore.WebLogicDelegate
(for WebLogic drivers) -
org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
-
org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate
(for Oracle drivers used within Weblogic) -
org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
(for Oracle drivers used within Weblogic) -
org.quartz.impl.jdbcjobstore.CloudscapeDelegate
-
org.quartz.impl.jdbcjobstore.DB2v6Delegate
-
org.quartz.impl.jdbcjobstore.DB2v7Delegate
-
org.quartz.impl.jdbcjobstore.DB2v8Delegate
-
org.quartz.impl.jdbcjobstore.HSQLDBDelegate
-
org.quartz.impl.jdbcjobstore.PointbaseDelegate
-
org.quartz.impl.jdbcjobstore.SybaseDelegate
Note that many databases are known to work with the StdJDBCDelegate, while others are known to work with delegates for other databases, for example Derby works well with the Cloudscape delegate (no surprise there).
org.quartz.jobStore.dataSource
The value of this property must be the name of one the DataSources defined in the configuration properties file. See the ConfigDataSources configuration docs for DataSources for more information.
org.quartz.jobStore.tablePrefix
JDBCJobStore’s "table prefix" property is a string equal to the prefix given to Quartz’s tables that were created in your database. You can have multiple sets of Quartz’s tables within the same database if they use different table prefixes.
org.quartz.jobStore.useProperties
The "use properties" flag instructs JDBCJobStore that all values in JobDataMaps will be Strings, and therefore can be stored as name-value pairs, rather than storing more complex objects in their serialized form in the BLOB column. This is can be handy, as you avoid the class versioning issues that can arise from serializing your non-String classes into a BLOB.
org.quartz.jobStore.misfireThreshold
The number of milliseconds the scheduler will 'tolerate' a trigger to pass its next-fire-time by, before being considered "misfired". The default value (if you don’t make an entry of this property in your configuration) is 60000 (60 seconds).
org.quartz.jobStore.isClustered
Set to "true" in order to turn on clustering features. This property must be set to "true" if you are having multiple instances of Quartz use the same set of database tables… otherwise you will experience havoc. See the configuration docs for clustering for more information.
org.quartz.jobStore.clusterCheckinInterval
Set the frequency (in milliseconds) at which this instance "checks-in"* with the other instances of the cluster. Affects the quickness of detecting failed instances.
org.quartz.jobStore.maxMisfiresToHandleAtATime
The maximum number of misfired triggers the jobstore will handle in a given pass. Handling many (more than a couple dozen) at once can cause the database tables to be locked long enough that the performance of firing other (not yet misfired) triggers may be hampered.
org.quartz.jobStore.dontSetAutoCommitFalse
Setting this parameter to "true" tells Quartz not to call setAutoCommit(false) on connections obtained from the DataSource(s). This can be helpful in a few situations, such as if you have a driver that complains if it is called when it is already off. This property defaults to false, because most drivers require that setAutoCommit(false) is called.
org.quartz.jobStore.selectWithLockSQL
Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. If not set, the default is "SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE", which works for most databases. The "{0}" is replaced during run-time with the TABLE_PREFIX that you configured above. The "{1}" is replaced with the scheduler’s name.
org.quartz.jobStore.txIsolationLevelSerializable
A value of "true" tells Quartz (when using JobStoreTX or CMT) to call setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) on JDBC connections. This can be helpful to prevent lock timeouts with some databases under high load, and "long-lasting" transactions.
org.quartz.jobStore.acquireTriggersWithinLock
Whether or not the acquisition of next triggers to fire should occur within an explicit database lock. This was once necessary (in previous versions of Quartz) to avoid dead-locks with particular databases, but is no longer considered necessary, hence the default value is "false".
If "org.quartz.scheduler.batchTriggerAcquisitionMaxCount" is set to > 1, and JDBC JobStore is used, then this property must be set to "true" to avoid data corruption (as of Quartz 2.1.1 "true" is now the default if batchTriggerAcquisitionMaxCount is set > 1).
org.quartz.jobStore.lockHandler.class
The class name to be used to produce an instance of a org.quartz.impl.jdbcjobstore.Semaphore
to be used for locking control on the job store data. This is an advanced configuration feature, which should not be used by most users. By default, Quartz will select the most appropriate (pre-bundled) Semaphore implementation to use. org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore
QUARTZ-497 may be of interest to MS SQL Server users. See QUARTZ-441.
Customizing StdRowLockSemaphore
If you explicitly choose to use this DB Semaphore, you can customize it further on how frequent to poll for DB locks.
Example of Using a Custom StdRowLockSemaphore
Implementation
org.quartz.jobStore.lockHandler.class = org.quartz.impl.jdbcjobstore.StdRowLockSemaphore org.quartz.jobStore.lockHandler.maxRetry = 7 # Default is 3 org.quartz.jobStore.lockHandler.retryPeriod = 3000 # Default is 1000 millis
org.quartz.jobStore.driverDelegateInitString
A pipe-delimited list of properties (and their values) that can be passed to the DriverDelegate during initialization time.
The format of the string is as such:
settingName=settingValue|otherSettingName=otherSettingValue|...
The StdJDBCDelegate and all of its descendants (all delegates that ship with Quartz) support a property called 'triggerPersistenceDelegateClasses' which can be set to a comma-separated list of classes that implement the TriggerPersistenceDelegate interface for storing custom trigger types. See the Java classes SimplePropertiesTriggerPersistenceDelegateSupport and SimplePropertiesTriggerPersistenceDelegateSupport for examples of writing a persistence delegate for a custom trigger.
Configuration of JDBC-JobStoreCMT (JDBC with JTA container-managed transactions)
JDBCJobStore is used to store scheduling information (job, triggers and calendars) within a relational database. There are actually two separate JDBCJobStore classes that you can select between, depending on the transactional behaviour you need.
JobStoreCMT relies upon transactions being managed by the application which is using Quartz. A JTA transaction must be in progress before attempt to schedule (or unschedule) jobs/triggers. This allows the "work" of scheduling to be part of the applications "larger" transaction. JobStoreCMT actually requires the use of two datasources - one that has it’s connection’s transactions managed by the application server (via JTA) and one datasource that has connections that do not participate in global (JTA) transactions. JobStoreCMT is appropriate when applications are using JTA transactions (such as via EJB Session Beans) to perform their work.
The JobStore is selected by setting the org.quartz.jobStore.class
property as such:
Setting The Scheduler’s JobStore
to JobStoreCMT
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT
JobStoreCMT
can be tuned with the following properties:
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.jobStore.driverDelegateClass | yes | string | null |
| org.quartz.jobStore.dataSource | yes | string | null |
| org.quartz.jobStore.nonManagedTXDataSource | yes | string | null |
| org.quartz.jobStore.tablePrefix | no | string | "QRTZ_" |
| org.quartz.jobStore.useProperties | no | boolean | false |
| org.quartz.jobStore.misfireThreshold | no | int | 60000 |
| org.quartz.jobStore.isClustered | no | boolean | false |
| org.quartz.jobStore.clusterCheckinInterval | no | long | 15000 |
| org.quartz.jobStore.maxMisfiresToHandleAtATime | no | int | 20 |
| org.quartz.jobStore.dontSetAutoCommitFalse | no | boolean | false |
| org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse | no | boolean | false |
| org.quartz.jobStore.selectWithLockSQL | no | string | "SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE" |
| org.quartz.jobStore.txIsolationLevelSerializable | no | boolean | false |
| org.quartz.jobStore.txIsolationLevelReadCommitted | no | boolean | false |
| org.quartz.jobStore.acquireTriggersWithinLock | no | boolean | false (or true - see doc below) |
| org.quartz.jobStore.lockHandler.class | no | string | null |
| org.quartz.jobStore.driverDelegateInitString | no | string | null |
org.quartz.jobStore.driverDelegateClass
Driver delegates understand the particular 'dialects' of varies database systems. Possible choices include:
-
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
(for fully JDBC-compliant drivers) -
org.quartz.impl.jdbcjobstore.MSSQLDelegate
(for Microsoft SQL Server, and Sybase) -
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
-
org.quartz.impl.jdbcjobstore.WebLogicDelegate
(for WebLogic drivers) -
org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
-
org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate
(for Oracle drivers used within Weblogic) -
org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
(for Oracle drivers used within Weblogic) -
org.quartz.impl.jdbcjobstore.CloudscapeDelegate
-
org.quartz.impl.jdbcjobstore.DB2v6Delegate
-
org.quartz.impl.jdbcjobstore.DB2v7Delegate
-
org.quartz.impl.jdbcjobstore.DB2v8Delegate
-
org.quartz.impl.jdbcjobstore.HSQLDBDelegate
-
org.quartz.impl.jdbcjobstore.PointbaseDelegate
-
org.quartz.impl.jdbcjobstore.SybaseDelegate
Note that many databases are known to work with the StdJDBCDelegate, while others are known to work with delegates for other databases, for example Derby works well with the Cloudscape delegate (no surprise there).
org.quartz.jobStore.dataSource
The value of this property must be the name of one the DataSources defined in the configuration properties file. For JobStoreCMT, it is required that this DataSource contains connections that are capable of participating in JTA (e.g. container-managed) transactions. This typically means that the DataSource will be configured and maintained within and by the application server, and Quartz will obtain a handle to it via JNDI. See the ConfigDataSources configuration docs for DataSources for more information.
org.quartz.jobStore.nonManagedTXDataSource
JobStoreCMT requires a (second) datasource that contains connections that will not be part of container-managed transactions. The value of this property must be the name of one the DataSources defined in the configuration properties file. This datasource must contain non-CMT connections, or in other words, connections for which it is legal for Quartz to directly call commit() and rollback() on.
org.quartz.jobStore.tablePrefix
JDBCJobStore’s "table prefix" property is a string equal to the prefix given to Quartz’s tables that were created in your database. You can have multiple sets of Quartz’s tables within the same database if they use different table prefixes.
org.quartz.jobStore.useProperties
The "use properties" flag instructs JDBCJobStore that all values in JobDataMaps will be Strings, and therefore can be stored as name-value pairs, rather than storing more complex objects in their serialized form in the BLOB column. This is can be handy, as you avoid the class versioning issues that can arise from serializing your non-String classes into a BLOB.
org.quartz.jobStore.misfireThreshold
The number of milliseconds the scheduler will 'tolerate' a trigger to pass its next-fire-time by, before being considered "misfired". The default value (if you don’t make an entry of this property in your configuration) is 60000 (60 seconds).
org.quartz.jobStore.isClustered
Set to "true" in order to turn on clustering features. This property must be set to "true" if you are having multiple instances of Quartz use the same set of database tables… otherwise you will experience havoc. See the configuration docs for clustering for more information.
org.quartz.jobStore.clusterCheckinInterval
Set the frequency (in milliseconds) at which this instance "checks-in"* with the other instances of the cluster. Affects the quickness of detecting failed instances.
org.quartz.jobStore.maxMisfiresToHandleAtATime
The maximum number of misfired triggers the jobstore will handle in a given pass. Handling many (more than a couple dozen) at once can cause the database tables to be locked long enough that the performance of firing other (not yet misfired) triggers may be hampered.
org.quartz.jobStore.dontSetAutoCommitFalse
Setting this parameter to "true" tells Quartz not to call setAutoCommit(false) on connections obtained from the DataSource(s). This can be helpful in a few situations, such as if you have a driver that complains if it is called when it is already off. This property defaults to false, because most drivers require that setAutoCommit(false) is called.
org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse
The same as the property org.quartz.jobStore.dontSetAutoCommitFalse, except that it applies to the nonManagedTXDataSource.
org.quartz.jobStore.selectWithLockSQL
Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. If not set, the default is "SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE", which works for most databases. The "{0}" is replaced during run-time with the TABLE_PREFIX that you configured above. The "{1}" is replaced with the scheduler’s name.
org.quartz.jobStore.txIsolationLevelSerializable
A value of "true" tells Quartz to call setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) on JDBC connections. This can be helpful to prevent lock timeouts with some databases under high load, and "long-lasting" transactions.
org.quartz.jobStore.txIsolationLevelReadCommitted
When set to "true", this property tells Quartz to call setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED) on the non-managed JDBC connections. This can be helpful to prevent lock timeouts with some databases (such as DB2) under high load, and "long-lasting" transactions.
org.quartz.jobStore.acquireTriggersWithinLock
Whether or not the acquisition of next triggers to fire should occur within an explicit database lock. This was once necessary (in previous versions of Quartz) to avoid dead-locks with particular databases, but is no longer considered necessary, hence the default value is "false".
If "org.quartz.scheduler.batchTriggerAcquisitionMaxCount" is set to > 1, and JDBC JobStore is used, then this property must be set to "true" to avoid data corruption (as of Quartz 2.1.1 "true" is now the default if batchTriggerAcquisitionMaxCount is set > 1).
org.quartz.jobStore.lockHandler.class
The class name to be used to produce an instance of a org.quartz.impl.jdbcjobstore.Semaphore
to be used for locking control on the job store data. This is an advanced configuration feature, which should not be used by most users. By default, Quartz will select the most appropriate (pre-bundled) Semaphore implementation to use. org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore
QUARTZ-497 may be of interest to MS SQL Server users. See QUARTZ-441.
org.quartz.jobStore.driverDelegateInitString
A pipe-delimited list of properties (and their values) that can be passed to the DriverDelegate during initialization time.
The format of the string is as such:
settingName=settingValue|otherSettingName=otherSettingValue|...
The StdJDBCDelegate and all of its descendants (all delegates that ship with Quartz) support a property called 'triggerPersistenceDelegateClasses' which can be set to a comma-separated list of classes that implement the TriggerPersistenceDelegate interface for storing custom trigger types. See the Java classes SimplePropertiesTriggerPersistenceDelegateSupport and SimplePropertiesTriggerPersistenceDelegateSupport for examples of writing a persistence delegate for a custom trigger.
Configuration of DataSources (for use by the JDBC-JobStores)
If you’re using JDBC-Jobstore, you’ll be needing a DataSource for its use (or two DataSources, if you’re using JobStoreCMT).
DataSources can be configured in three ways:
-
All pool properties specified in the quartz.properties file, so that Quartz can create the DataSource itself.
-
The JNDI location of an application server managed Datasource can be specified, so that Quartz can use it.
-
Custom defined org.quartz.utils.ConnectionProvider implementations.
It is recommended that your Datasource max connection size be configured to be at least the number of worker threads in the thread pool plus three. You may need additional connections if your application is also making frequent calls to the scheduler API. If you are using JobStoreCMT, the "non managed" datasource should have a max connection size of at least four.
Each DataSource you define (typically one or two) must be given a name, and the properties you define for each must contain that name, as shown below. The DataSource’s "NAME" can be anything you want, and has no meaning other than being able to identify it when it is assigned to the JDBCJobStore.
Quartz-created DataSources are defined with the following properties:
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.dataSource.NAME.driver | yes | String | null |
| org.quartz.dataSource.NAME.URL | yes | String | null |
| org.quartz.dataSource.NAME.user | no | String | "" |
| org.quartz.dataSource.NAME.password | no | String | "" |
| org.quartz.dataSource.NAME.maxConnections | no | int | 10 |
| org.quartz.dataSource.NAME.validationQuery | no | String | null |
| org.quartz.dataSource.NAME.idleConnectionValidationSeconds | no | int | 50 |
| org.quartz.dataSource.NAME.validateOnCheckout | no | boolean | false |
| org.quartz.dataSource.NAME.discardIdleConnectionsSeconds | no | int | 0 (disabled) |
org.quartz.dataSource.NAME.driver
Must be the java class name of the JDBC driver for your database.
org.quartz.dataSource.NAME.URL
The connection URL (host, port, etc.) for connection to your database.
org.quartz.dataSource.NAME.user
The user name to use when connecting to your database.
org.quartz.dataSource.NAME.password
The password to use when connecting to your database.
org.quartz.dataSource.NAME.maxConnections
The maximum number of connections that the DataSource can create in it’s pool of connections.
org.quartz.dataSource.NAME.validationQuery
Is an optional SQL query string that the DataSource can use to detect and replace failed/corrupt connections. For example an oracle user might choose "select table_name from user_tables" - which is a query that should never fail - unless the connection is actually bad.
org.quartz.dataSource.NAME.idleConnectionValidationSeconds
The number of seconds between tests of idle connections - only enabled if the validation query property is set. Default is 50 seconds.
org.quartz.dataSource.NAME.validateOnCheckout
Whether the database sql query to validate connections should be executed every time a connection is retrieved from the pool to ensure that it is still valid. If false, then validation will occur on check-in. Default is false.
org.quartz.dataSource.NAME.discardIdleConnectionsSeconds
Discard connections after they have been idle this many seconds. 0 disables the feature. Default is 0.
Example of a Quartz-defined DataSource
org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@<IP_ADDRESS>:1521:demodb org.quartz.dataSource.myDS.user = myUser org.quartz.dataSource.myDS.password = myPassword org.quartz.dataSource.myDS.maxConnections = 30
References to Application Server DataSources are defined with the following properties:
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.dataSource.NAME.jndiURL | yes | String | null |
| org.quartz.dataSource.NAME.java.naming.factory.initial | no | String | null |
| org.quartz.dataSource.NAME.java.naming.provider.url | no | String | null |
| org.quartz.dataSource.NAME.java.naming.security.principal | no | String | null |
| org.quartz.dataSource.NAME.java.naming.security.credentials | no | String | null |
org.quartz.dataSource.NAME.jndiURL
The JNDI URL for a DataSource that is managed by your application server.
org.quartz.dataSource.NAME.java.naming.factory.initial
The (optional) class name of the JNDI InitialContextFactory that you wish to use.
org.quartz.dataSource.NAME.java.naming.provider.url
The (optional) URL for connecting to the JNDI context.
org.quartz.dataSource.NAME.java.naming.security.principal
The (optional) user principal for connecting to the JNDI context.
org.quartz.dataSource.NAME.java.naming.security.credentials
The (optional) user credentials for connecting to the JNDI context.
Example of a Datasource referenced from an Application Server
org.quartz.dataSource.myOtherDS.jndiURL=jdbc/myDataSource org.quartz.dataSource.myOtherDS.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory org.quartz.dataSource.myOtherDS.java.naming.provider.url=ormi:<span class="code-comment">//localhost </span>org.quartz.dataSource.myOtherDS.java.naming.security.principal=admin org.quartz.dataSource.myOtherDS.java.naming.security.credentials=123
Custom ConnectionProvider Implementations
| Property Name | Required | Type | Default Value |
|---|---|---|---|
| org.quartz.dataSource.NAME.connectionProvider.class | yes | String (class name) | null |
org.quartz.dataSource.NAME.connectionProvider.class
The class name of the ConnectionProvider to use. After instantiating the class, Quartz can automatically set configuration properties on the instance, bean-style.
Example of Using a Custom ConnectionProvider
Implementation
org.quartz.dataSource.myCustomDS.connectionProvider.class = com.foo.FooConnectionProvider org.quartz.dataSource.myCustomDS.someStringProperty = someValue org.quartz.dataSource.myCustomDS.someIntProperty = 5
Configuration of Database Clustering (achieve fail-over and load-balancing with JDBC-JobStore)
Quartz’s clustering features bring both high availability and scalability to your scheduler via fail-over and load balancing functionality.
Clustering currently only works with the JDBC-Jobstore (JobStoreTX or JobStoreCMT), and essentially works by having each node of the cluster share the same database.
Load-balancing occurs automatically, with each node of the cluster firing jobs as quickly as it can. When a trigger’s firing time occurs, the first node to acquire it (by placing a lock on it) is the node that will fire it.
Only one node will fire the job for each firing. What I mean by that is, if the job has a repeating trigger that tells it to fire every 10 seconds, then at 12:00:00 exactly one node will run the job, and at 12:00:10 exactly one node will run the job, etc. It won’t necessarily be the same node each time - it will more or less be random which node runs it. The load balancing mechanism is near-random for busy schedulers (lots of triggers) but favors the same node for non-busy (e.g. few triggers) schedulers.
Fail-over occurs when one of the nodes fails while in the midst of executing one or more jobs. When a node fails, the other nodes detect the condition and identify the jobs in the database that were in progress within the failed node. Any jobs marked for recovery (with the "requests recovery" property on the JobDetail) will be re-executed by the remaining nodes. Jobs not marked for recovery will simply be freed up for execution at the next time a related trigger fires.
The clustering feature works best for scaling out long-running and/or cpu-intensive jobs (distributing the work-load over multiple nodes). If you need to scale out to support thousands of short-running (e.g 1 second) jobs, consider partitioning the set of jobs by using multiple distinct schedulers (including multiple clustered schedulers for HA). The scheduler makes use of a cluster-wide lock, a pattern that degrades performance as you add more nodes (when going beyond about three nodes - depending upon your database’s capabilities, etc.).
Enable clustering by setting the "org.quartz.jobStore.isClustered" property to "true". Each instance in the cluster should use the same copy of the quartz.properties file. Exceptions of this would be to use properties files that are identical, with the following allowable exceptions: Different thread pool size, and different value for the "org.quartz.scheduler.instanceId" property. Each node in the cluster MUST have a unique instanceId, which is easily done (without needing different properties files) by placing "AUTO" as the value of this property. See the info about the configuration properties of JDBC-JobStore for more information.
NOTE: Never run clustering on separate machines, unless their clocks are synchronized using some form of time-sync service (daemon) that runs very regularly (the clocks must be within a second of each other). See https://www.nist.gov/pml/time-and-frequency-division/services/internet-time-service-its if you are unfamiliar with how to do this.
NOTE: Never start (scheduler.start()) a non-clustered instance against the same set of database tables that any other instance is running (start()ed) against. You may get serious data corruption, and will definitely experience erratic behavior.
Example Properties For A Clustered Scheduler
#============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = MyClusteredScheduler org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 25 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate org.quartz.jobStore.useProperties = <span class="code-keyword">false</span> org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = <span class="code-keyword">true</span> org.quartz.jobStore.clusterCheckinInterval = 20000 #============================================================================ # Configure Datasources #============================================================================ org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@polarbear:1521:dev org.quartz.dataSource.myDS.user = quartz org.quartz.dataSource.myDS.password = quartz org.quartz.dataSource.myDS.maxConnections = 5 org.quartz.dataSource.myDS.validationQuery=select 0 from dual


People from Ghana name their children after the day they were born. Enter your birthday & gender below and click submit to find out your Akan name.


Welcome - Maven Discord Bot
MAVEN
Scrims
Configuration
Management
Docs
About Us
Support Server
Login
Scrims
Configuration
Management
Docs
About Us
Support Server
Coming Soon...
Maven's Dashboard isn't done yet! Still working out a few bugs.
Add To Server
Learn More
Maven
Copyright © 2020 - 2022 Max Development
Home
Scrims
Configurations
Management
FAQ
Support server
Discord Terms
Team
Contact


@import models.forms.SearchFilterForm @(searchFilterForm:SearchFilterForm, searchFieldArray: List[String] )


name: inverse layout: true --- class: center, middle, inverse # OpenStack Juno Summit ## Feedback and announcements Sylvain Bauza Python User Group Grenoble, 22/05/2014 --- ## The Summit ### Held in Atlanta, GA ### Regular sessions ### Booths ### Design Summit ### (New) Ops Summit --- ## News from the Foundation ### Super-Users : http://superuser.openstack.org/ ### OpenStack Marketplace : http://www.openstack.org/marketplace/?url=/marketplace --- class: center, middle, inverse ## Roadmap --- ### Nova * Live upgrades (cont.) * Split Scheduler * Docker driver to come ### Keystone * Split AuthZ and AuthN ### Glance * Becomes a global store library ### Neutron * Nuage driver * NFV subteam * HA in progress ### Cinder * DRBD driver


Contact Us @chaud food plug
Contact Us
Contact
<EMAIL_ADDRESS>Based in
Akinfenwa estate oluyole,ibadan.


#{extends 'main.html' /} #{set title:'PubMed Watcher' /} #{menu '.home-link' /}
Tailored biomedical literature feed based on the articles that matter to you.
What does it mean?


Here you may provide any other information / requirements, which may be relevant. For example, if you can only work part of a session, or you want to work in the same area as a friend, you should mention it here


I find this method easier than all of the others that use lemon juice or acetic acid.
Here's how I extracted:
1. I blended up about 20 grams of seeds
2a. I got about 200ml water and lowered the ph to like 4 using about 10 or 15 drops of muriatic acid.
2b. The beta-carbolines are more soluble in warm water, but you dont want to boil water with the acid in it already as metal will leach into the water. so if your going to boil your water do it before you put the acid in. I didnt boil at all, but it would probably work better if I did.
3. I put the acidified water in a jar with the crushed up seeds.
4. I let it sit for a couple hours.
5.
6. I did steps 2 through 5 four times and put all the liquid together. If you look at the liquid under a black light you can see that it glows, thats the beta-carbolines (harmala/harmaline). I also looked at the seeds that were left over and I could still see some glowing, but probly 80% at least of the beta carbs were in the final liquid.
7. I kept using cotton balls in a funnel to sepperate more of the seed matter from the final liquid until. At this point the water is a orange redish color.
8. This is where I would normaly boil the liquid down to make it more consentrated, but with hydrochloric acid you dont want to use metal for anything as you will get metal in the final product, I dont have any glass pans. So I put it in a big pyrex dish and put it in the oven for 300 degrees. when the liquid was greatly reduced until almost dry I turned downt the temp. to 200 degrees just because I felt like it (and it's not so hot for the next step).
9. I took it out of the oven and scraped it all up, put it in a bag and weighd it with my digital scale (200 x .01) to find that I now have 5 grams of extract.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Milky is an app that helps the user organize tasks and milestones in achieving goals. This was our entry to WebHacks2017 where we won 1st place in. We spent 6 days designing and developing this app. The company that sponsored this hackathon wrote about us here.
AMuseBrain was our project for MHacks2017. We integrated EEGs with the platform and the webpage would produce analysis of four brain waves such as anxiety levels, attention levels, and more. We also integrated a feature that detects whether a user blinked using analysis of brain waves to authenticate users.
Open Dictionary was our entry to the TechCrunch Hackathon 2018. This is a platform like Wikipedia but for words & definitions. People are able to request translations, add their own translations, and query the dictionary.
In my internship at a company, they wanted me to create a NodeJS module that periodically compresses their backup and uploads them to the ALI-OSS platform. This module greatly simplifies the process and has received almost 550 downloads.
Project Magnifi is an NGO founded by Michelle Sun created for those that suffer from Body Dysmorphia. She wanted a way for people to privately converse with her and I created this chatroom entirely from scratch using SocketIO, MongoDB, Node.js.
Ornament is my team that creates websites for clients. It comprises of Katie Li, the graphic designer, and me, who codes the entire websites from scratch and deploy them on servers. This is the website.
CID Organizer is a project I am doing for my school. This platform aims to provide a better platform for teachers to book classrooms and for students to know where they are supposed to go (as opposed to walking up to a designed display in an arbitrary location). This is my IB Computer Science HL IA project.
This is my website project for Shanghai Highschool Socer Association. It was another work by our Ornament team. It uses Keystone CMS.
As part of my job as the Chief Technical Officer, I've build this website from scratch and maintain it to promote our musicians and events. It uses KeystoneJS as the backend CMS that allows others without a coding background to be able to easily edit the webpage. It uses SocketIO, MongoDB, Node.js, and more.


Plugin Information |
|---|
View Create Job Advanced on the plugin site for more information. |
This plugin extends creating job.
When you create a job, it automatically adds all permissions for the creator.
Source code
Changelog
1.8 (Dec 29, 2013)
- update core dependency to 1.532
- fix compatibility issues with the maven-plugin since refactoring of the MavenMailer
1.7 (Okt 7, 2012)
- add support for two default values of maven projects (pull #2):
- Disable auto archiving - to save disc space per default
- Disable one mail per failed module - to not spam the users
1.6 (Aug 5, 2011)
- Updates to text/help.
1.5 (Oct 25, 2010)
- Dynamic permission definitions allow you to automatically grant
permissions to specifig groups at job creation time. You can define a
regular expression to get information from the jobs name. e.g. if all
your jobs follow a naming standard, like this: 'group.GROUP.FreeForm',
you can define a pattern like 'group.(.).(.)' and reuse the
regular expression groups in the group format.
(special thanks to domi)
1.4
- Add documentation
- activate/desactivate automatically set anonymous rights
- (special tks to jsiirola)
1.3
- Create an interface in Jenkins configuration
- activate/desactivate automatically set owner rights
- activate/desactivate replace space with "-" in the job name
- define default log rotator value
1.2
- Fix to work on version 1.334
1.1
- Fix bug if you create a job with template
1.0
- Initial Import


Since it’s establishment in 1872, Yellowstone National Park has attracted millions of visitors to view its expansive wildlife, breathtaking geysers, and hike its over 900 miles of trails. Several key moments have shaped Yellowstone in the last 30 years. Those moment’s impact can be seen in part in the change of annual visitors each year.
Below are a few key moments in Yellowstone’s history since they began to digitize their visitor metrics. Use the buttons to navigate and explore the moments that have shaped Yellowstone through the years.


\begin{itemize} \item First item \item Second item .... \end{itemize}
The itemize environment produces a list with "tick-marks" (typically "bullets" for first level). Itemizations can be nested within one another, up to four levels deep.
Each item of an itemized list begins with an \item command. There must be at least one \item command within the environment.
The default optional label argument of the \item command is given by the \labelitemi, \labelitemii, \labelitemiii, \labelitemiv commands, respectively, depending on the nesting level. These may be redefined with the \renewcommand command. For example, to make the first level marks nice five-point stars,
\renewcommand{\labelitemi}{$\star$}
See also Environments,
Lists,
Counters
See also \item
Return to the LaTeX Table of Contents


Grace Mugabe sets thugs on land claimants
by Staff ReporterThere was pandemonium at a Harare farm that is occupied by erratic former first lady Grace Mugabe and her children, after she recently unleashed thugs on people who had been granted the right to occupy part of the property.
This comes as questions marks continue to linger over future of the many properties that were grabbed by the late former president Robert Mugabe and his family during the ruinous rule – especially in Mazowe where authorities have allowed people that were dispossessed of their land claim it back.
More to follow…


<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier<EMAIL_ADDRESS>* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */
namespace Symfony\Component\HttpKernel\HttpCache; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response;
interface SurrogateInterface { /** * Returns surrogate name. * * @return string */ public function getName(); /** * Returns a new cache strategy instance. * * @return ResponseCacheStrategyInterface A ResponseCacheStrategyInterface instance */ public function createCacheStrategy(); /** * Checks that at least one surrogate has Surrogate capability. * * @return bool true if one surrogate has Surrogate capability, false otherwise */ public function hasSurrogateCapability(Request $request); /** * Adds Surrogate-capability to the given Request. */ public function addSurrogateCapability(Request $request); /** * Adds HTTP headers to specify that the Response needs to be parsed for Surrogate. * * This method only adds an Surrogate HTTP header if the Response has some Surrogate tags. */ public function addSurrogateControl(Response $response); /** * Checks that the Response needs to be parsed for Surrogate tags. * * @return bool true if the Response needs to be parsed, false otherwise */ public function needsParsing(Response $response); /** * Renders a Surrogate tag. * * @param string $alt An alternate URI * @param string $comment A comment to add as an esi:include tag * * @return string */ public function renderIncludeTag(string $uri, string $alt = null, bool $ignoreErrors = true, string $comment = ''); /** * Replaces a Response Surrogate tags with the included resource content. * * @return Response */ public function process(Request $request, Response $response); /** * Handles a Surrogate from the cache. * * @param string $alt An alternative URI * * @return string * * @throws \RuntimeException * @throws \Exception */ public function handle(HttpCache $cache, string $uri, string $alt, bool $ignoreErrors); }


| Path: | README.rdoc |
| Last Update: | Tue Aug 03 10:40:05 +0200 2010 |
Hey Mailmal.. lie to me!
Very simple library for mocking a
Net::POP3.start( ... ) do |pop| <any code here> end
call
$ [sudo] gem install fibber_mailman
or
$ script/plugin install git://github.com/fguillen/FibberMailman.git
require 'fibber_mailman' raw_mails = [ File.read( "/fixtures/mail1.raw_mail" ) ), File.read( "/fixtures/mail2.raw_mail" ) ), ] FibberMailman.lie_to_me( raw_mails ) do <your code that uses the Net::POP3.start on any point> end
Not any real POP call will be done.
The mock will simulate that the mails received was the fake raw_mails.
See the test folder.
Only
pop.each_mail do |m| <code here> end
is supported.
| Author: | Fernando Guillen: fernandoguillen.info |
| Copyright: | Copyright (c) 2010 Fernando Guillen |
| License: | Released under the MIT license. |


CalculateMetrics
class.ReadJarFileData
class,
add to the Key section of a Map and create a new Metric Object as the value (See the populateMap method in this class).ReadJarFileData
class,
add to the Key section of a Map and create a new Metric Object as the value (See the populateMap method in this class).ListClassable
interface and delegates calls to the java.util.list package,
which performs a number of required operations.ListClass
class.CalculateMetrics
class.Metric
class.CalculateMetrics
class.


--- layout: post status: publish published: true title: Podcast Episode 4.05 - Des Moines Double High-Five author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 6910 wordpress_url: http://ivyenvy.com/?p=6910 date: '2012-03-13 23:22:17 +0000' date_gmt: '2012-03-14 04:22:17 +0000' categories: - Podcast - Spring Training tags: - Carlos Marmol - Jeff Samardzija - Spring Training - Mesa - Gerardo Concepcion - Joe Martin comments: [] ---
Andy and Corey look at vastly improved statistical categories for the Cubs and consider whether we should be encouraged by these numbers. We discuss more of the changes this team is experiencing, mainly transforming from a home run reliant team to a small-ball team that is aggressive on the base-paths.
While the offensive and defensive numbers are improved, the pitching staff is struggling early in Spring Training. We look at the bright spots on the pitching staff and then look at the one major pitching concern - Carlos Marmol. After the 2nd half of 2011 and what we've seen this Spring, it's safe to wonder if we will ever see Carlos Marmol return to his dominant production.
Then we get Joe Martin on the phone from Mesa. Joe spent all day Tuesday at the minor league camp and tells us what he saw. He also spent about 30 minutes with Gerardo Concepcion. The write-up of that conversation will be coming on Wednesday.


Team Lemon
Lillian Gales
Before Code Fellows, I was an Office Manager at a tech startup in Seattle. I was drawn to problem solving and creativity in coding, and decided to make the career shift. My hobbies include aerial yoga, traveling, and eating my way around Seattle.
Matthew Heyert
Prior to Code Fellows, I spent the majority of my career in the service industry as a bartender, followed by three years as an attorney doing criminal work and legal consulting. What brought me to coding and by extension Code Fellows was a love of problem solving and being able to have a career relevant creative outlet. In my free time I enjoy spending time with my wife and dogs on the road.
Na'ama Bar-Ilan
Coming from the world of online video and ad tech, my background is in managing client relations. I’ve always loved creating and building new things and coding is a fun new way to do it. Outside of work I enjoy watching movies, cooking, gardening, and exploring the beautiful PNW.