Joe Marler calls for 'cowardly' scrum acts to be outlawed in a passively aggressive Twitter rant
by Online EditorsEngland and Harlequins prop Joe Marler has caused a stir on social media by tweeting about required changes to the scrum laws following his side’s massive 53-28 defeat at the hands of Clermont.
Marler took aim at rival front-rowers who ‘push after the scrum collapses’ in order to convince the ref that they were the dominant force, labeling they behaviour ‘cowardly’ and that the act needs to be outlawed.
Marler’s tweet gained immediate traction with over a thousand reactions.
It is unclear whether the tweet was a reaction to Clermont specifically, who won penalties on the first two scrums of the matchand a free kick on the third against the feed.
The scrum continually collapsed in the first half leading to time-consuming resets, but when it held up Clermont generally had their way as Harlequins’ front-row, missing key England stars Kyle Sinckler and Marler, buckled under the pressure.
Clermont’s scrum dominance was highlighted by a 39th-minute push that parted the Harlequins’ pack like the red sea and had Number 8 Tom Lawaday scrambling to pick the ball up as to avoid conceding a certain penalty. Head coach Paul Gustard was the first to admit that following the match, pinpointing the scrum as the ‘Achilles heel’.
“Our scrum was kind of our Achilles heel in the first half,” he explained.
“Second half we turned the scrum around and gained ascendancy, but unfortunately then our lineout suffered a little bit.
“We lost three lineouts in a row, which gave them a bit of momentum and Clermont hit a hot streak that really hurt us.”
Marler has been a passionate advocate of scrummaging in the game, and is often seen enjoying the work of his fellow front-rowers during games.
The Season with Hamilton Boys High School – Episode 2:


open class UpdateOperation : CRUDOperation
Author
Boston Vanseghi
Since
2.3.0
<init> |
UpdateOperation(publisher: BodyPublisher = HttpRequest.BodyPublishers.noBody()) |
publisher |
var publisher: BodyPublisher |
PATCH |
class PATCH : UpdateOperation |
POST |
class POST : UpdateOperation |
PUT |
class PUT : UpdateOperation |


Issue: RESULT-LISTS-SHAREDForum: Editorial
References: DIRECTORY (p427), LIST-ALL-PACKAGES (p184)
Category: CLARIFICATION
Edit history: 02-Mar-91, Version 1 by Pitman
15-Mar-91, Version 2 by Pitman (repair current practice)
Status: For X3J13 consideration
Problem Description:
CLtL does not specify whether the list returned by each of these
functions is freshly-consed each time, or whether it must be treated
as immutable: LIST-ALL-PACKAGES, DIRECTORY.
Proposal (RESULT-LISTS-SHARED:SPECIFY):
Specify that the lists returned by LIST-ALL-PACKAGES and DIRECTORY are
freshly consed on every call. The list resulting from calls to these
functions may therefore be freely modified by the caller.
Example:
;Example of recycling list structure from LIST-ALL-PACKAGES
(DEFUN ALIST-ALL-PACKAGES ()
(LET ((P (LIST-ALL-PACKAGES)))
((NULL L) P)
(PACKAGE-NAME (CAR L))
(PACKAGE-NICKNAMES (CAR L)))))))
;Example of recycling list structure from DIRECTORY
(DEFUN FULL-DIRECTORY (SPEC)
((NULL L) D)
:AUTHOR (FILE-AUTHOR (CAR L))
:WRITE-DATE (FILE-WRITE-DATE (CAR L))
:LENGTH (IGNORE-ERRORS
(WITH-OPEN-FILE (S (CAR L))
(FILE-LENGTH S))))))))
Rationale:
In most implementations, packages are stored in a hash table for
faster access by the reader, so the list returned by LIST-ALL-PACKAGES
is probably freshly consed already. Also, LIST-ALL-PACKAGES is
probably called sufficiently seldom that there is no serious
efficiency issue here.
In most implementations, information about the file system is external
to Lisp and must be freshly computed each time a directory listing is
done anyway. Better not to force the caller to do a COPY-LIST on a
call when the list can easily be guaranteed to be fresh to begin with.
Even in situations where it was possible to return a
non-freshly-consed list, this might put internal data structures of
the implementation at risk for no really good efficiency reason.
Current Practice:
Symbolics Genera freshly conses the list returned by DIRECTORY.
Symbolics Genera does not freshly cons the list returned by LIST-ALL-PACKAGES.
Cost to Implementors:
Very small.
Cost to Users:
None.
Cost of Non-Adoption:
Users wouldn't know what to expect and would be forced to do a
COPY-LIST just to be sure when they planned to modify the result. If
they forgot, and the implementation decided to return a
non-freshly-consed list, an attempt to modify that list might
compromise the integrity of the running Lisp.
Benefits:
Clearer specfication
Aesthetics:
Negligible effect.
Discussion:
Pitman supports this proposal. (He's more than once wanted to modify
the result list of DIRECTORY and had to do a gratuitous COPY-LIST just
to be safe.)


Call of the Ancients
Ticket Center
Check Status
Check out the Let's Play:
Smileman66's Ludum Dare First Look


TOC Curve Generator
Zhen Liu
TOC Curve Generator is a computer program to make TOC curves. Users can generate TOC curves from various file formats and customize TOC curves for research.
How to Download and Run TOC Curve Generator
Click the right top button "Download" to download the program. Click "TOC_curve_generator.exe" to start the progam. The instruction slide is in the folder "instruction".
Papers describing the algorithms
Pontius, R. G., & Si, K. (2014) "The total operating characteristic to measure diagnostic ability for multiple thresholds". International Journal of Geographical Information Science, 28(3), 570–583.
Citation
If you make public a diagram that you worked out and/or checked with TOC Curve Generator, you may cite the software as follows:
Zhen Liu (2020) "TOC Curve Generator," software package, https://lazygis.github.io/projects/TOCCurveGenerator
Presentations
Zhen Liu presented the concepts and applications of the TOC from stratified random sampling in 2021 AAG-GISSG Student Honors Paper Competition and got the second prize.
Please click the link and the presentation starts at 45:25
Version Update
-
v.1.2.5
- add "no marker" option in the display panel.
-
v.1.2.4
- The correct corner message on the axis is changed to be flexible.
-
v.1.2.3
- The marker will not be clipped around the coordinate axis.
-
v.1.2.2
- Users can select whether to show correct corner or uniform line in the display module.
- Eliminate the maximum and minimum boundary.
-
v.1.2.1
- Combine Three interfaces into one.
- The AUC can be calculated even though the number of pixels is large.
- The axis labels obey the rule.
- User can change the name of TOC curve and the unit name of each element.
- Speed up the startup.
- Remember the filefolder used last time.
- The cumstomized thresholds are determined by the start threshold.
- Avoid the shutdown when error occurs.
- The grey areas which represent non-interest are shown on the diagram.
Last modified April 4, 2021


Temporally autocorrelated populations are correlated in their vital rates (growth, death, etc.) from year to year. It is very common for populations, whether they be bacteria, plants, or humans, to be temporally autocorrelated. This poses a challenge for stochastic population modeling, because a temporally correlated population will behave differently from an uncorrelated one. This package provides tools for simulating populations with white noise (no temporal autocorrelation), red noise (positive temporal autocorrelation), and blue noise (negative temporal autocorrelation). The algebraic formulation for autocorrelated noise comes from Ruokolainen et al. (2009) <doi:10.1016/j.tree.2009.04.009>. Models for unstructured populations and for structured populations (matrix models) are available.
| Version: | 1.0.3 |
| Depends: | R (≥ 3.3.0) |
| Imports: | stats (≥ 3.3.2), dplyr (≥ 0.7.3), purrr (≥ 0.2.3), tidyr (≥ 0.8.0) |
| LinkingTo: | Rcpp, RcppArmadillo |
| Suggests: | ggplot2 (≥ 2.2.1), knitr (≥ 1.17), rmarkdown (≥ 1.6), testthat (≥ 1.0.2), covr (≥ 3.0.0) |
| Published: | 2018-06-01 |
| Author: | Julia Pilowsky |
| Maintainer: | Julia Pilowsky <jap2178 at caa.columbia.edu> |
| BugReports: | http://github.com/japilo/colorednoise/issues |
| License: | GPL-3 |
| NeedsCompilation: | yes |
| Materials: | README NEWS |
| CRAN checks: | colorednoise results |
| Reference manual: | colorednoise.pdf |
| Vignettes: |
Simulate noise |
| Package source: | colorednoise_1.0.3.tar.gz |
| Windows binaries: | r-devel: colorednoise_1.0.3.zip, r-release: colorednoise_1.0.3.zip, r-oldrel: colorednoise_1.0.3.zip |
| OS X binaries: | r-release: colorednoise_1.0.3.tgz, r-oldrel: colorednoise_1.0.3.tgz |
| Old sources: | colorednoise archive |
Please use the canonical form https://CRAN.R-project.org/package=colorednoise to link to this page.


Gateway
BOT
10-Sep-19 08:42 AM
[dscrd-hush] <dukeleto> i would pay a bounty
[dscrd-hush] <Privatoshi> Okay NP
[dscrd-hush] <dukeleto> @pal I would like to see us get listed on TradeOgre, they have ignored all comms from Hush in the past. If you know a guy, make it happen
[dscrd-hush] <dukeleto> most other exchanges I heard mentioned don't interest me much, maybe crex24. I feel like we were on that exchange, they added us for free but maybe delisted us for low volume? Can't remember
[dscrd-hush] <Privatoshi> A thing or two, might be altered here and there...
U know how privacy apps and time work.. Sometimes they make decisions that require them to be taken off and a new one out in their place
[dscrd-hush] <dukeleto> @Privatoshi yeah, i am looking for high level advice with a few specific pointers, versus babyfeeding. The docs can assume a knowledgeable reader, just unfamiliar with that particular niche
[dscrd-hush] <dukeleto> everything has changed since I last look at this stuff in maybe 2009
[dscrd-hush] <Privatoshi> ok.. Hardened, not offensive, correct?
[dscrd-hush] <dukeleto> Cyanogen was a thing
[dscrd-hush] <Privatoshi> TBH it hasn't changed much
[dscrd-hush] <Privatoshi> Cyanogen got bought by Google
[dscrd-hush] <dukeleto> @Privatoshi offensive intrigues me, but pentesting/hacking/redteam is not the focus. Blue team is actually the goal
[dscrd-hush] <dukeleto> if you were Blue team, what android would you use?
[dscrd-hush] <Milo> @Berg sent you a DM
[dscrd-hush] <Privatoshi> Well I would use a clean stock ROM
[dscrd-hush] <Privatoshi> Firewall and ip tables
[dscrd-hush] <Privatoshi> limit what comes in and what goes out of the network
[dscrd-hush] <Privatoshi> modify some of the developer options
[dscrd-hush] <Privatoshi> modify a bunch of settings
[dscrd-hush] <Privatoshi> encrypt it
[dscrd-hush] <Privatoshi> signal
[dscrd-hush] <Privatoshi> orbot
[dscrd-hush] <Privatoshi> tor
[dscrd-hush] <Privatoshi> fdroid
[dscrd-hush] <Privatoshi> Netguard
[dscrd-hush] <Privatoshi> ClassyShark3xodus
[dscrd-hush] <Privatoshi> Wireguard
[dscrd-hush] <Privatoshi> OpenVPN
[dscrd-hush] <Privatoshi> Keybase
[dscrd-hush] <Privatoshi> Generic Gallery
[dscrd-hush] <Privatoshi> EXIF Eraser
[dscrd-hush] <Privatoshi> K-9 for email
[dscrd-hush] <Privatoshi> Something for Certs
[dscrd-hush] <Privatoshi> That's where I would start
[dscrd-hush] <Privatoshi> Download all through fdroid
[dscrd-hush] <Privatoshi> Get rid of GAPPS
[dscrd-hush] <Privatoshi> Maybe use LinageOS
[dscrd-hush] <dukeleto> @Privatoshi dump it into a github gist and you are mostly there
[dscrd-hush] <Privatoshi> Haha
[dscrd-hush] <dukeleto> @Privatoshi did Cyanogen become Copperhead ?
[dscrd-hush] <dukeleto> or is that a diff codebase?
[dscrd-hush] <Privatoshi> Cyanogen went into Google
[dscrd-hush] <dukeleto> good lort
[dscrd-hush] <dukeleto> into the G-hole, we say
[dscrd-hush] <dukeleto> so many people I knew, friends, colleagues. Once you get hired by Google, most go "into the G-hole", never to be heard from again
[dscrd-hush] <dukeleto> it's rare to keep interacting with the filthy non-Googler masses
[dscrd-hush] <Privatoshi> It says it has moved away from Cyanogen code altogether
[dscrd-hush] <dukeleto> good
[dscrd-hush] <Privatoshi> Haha
[dscrd-hush] <Privatoshi> Ones I like to use remove GAPPS
[dscrd-hush] <dukeleto> because cyanogen was paperclip and duct tape, on it's best day
[dscrd-hush] <Privatoshi> That's what the big deal is
[dscrd-hush] <Privatoshi> GAPPS
[dscrd-hush] <Privatoshi> It wraps around everything
[dscrd-hush] <Privatoshi> U can't be private with GAPPS
[dscrd-hush] <Privatoshi> U have to disable the Play Store
[dscrd-hush] <Privatoshi> Use FDroid
[dscrd-hush] <Privatoshi> U can network into TOR on fdroid to download repos
[dscrd-hush] <Privatoshi> Cyanogen was okay Duke
[dscrd-hush] <Privatoshi> Good for a community project
[dscrd-hush] <dukeleto> yes, i mostly kid
[dscrd-hush] <dukeleto> at the time, it was the only choice and it was good
[dscrd-hush] <dukeleto> GAPPS
[dscrd-hush] <dukeleto> i hear many people speak of the evils
[dscrd-hush] <dukeleto> it's constantly sending metadata to those G servers
[dscrd-hush] <Privatoshi> I mean, what do we expect
[dscrd-hush] <Privatoshi> I'm just glad facebook didn't get into phone software OS
[dscrd-hush] <Privatoshi> They missed it
[dscrd-hush] <Privatoshi> That's why they want crypto
Android stuff. GitHub Gist: instantly share code, notes, and snippets.
[dscrd-hush] <dukeleto> "clean stock rom", where to download, how to trust it, configure it, etc?
[dscrd-hush] <dukeleto> binary blobs are going to be somewhere
[dscrd-hush] <dukeleto> in the baseband, etc
[dscrd-hush] <dukeleto> i want to know who i am trusting, when
[dscrd-hush] <dukeleto> @Privatoshi you can easily fork that gist and update it in a browser, and if you dont' have a github account they take about 3.6 seconds to make
[dscrd-hush] <dukeleto> or you can braindump in here, it's entertaining
[dscrd-hush] <Privatoshi> I DM u
[dscrd-hush] <Privatoshi> Download this app
XDA
[dscrd-hush] <Privatoshi> Select on the side, My Device
[dscrd-hush] <Privatoshi> This is what you'll see ..
And these are custom ROMS..
But usually there is a clean rom..
Or there is a debloating script.
[dscrd-hush] <Privatoshi> If I can keep my os, get rid of gapps, and debloat any bs completely, I'll do that.
[dscrd-hush] <Privatoshi> But Linage OS & Copperhead OS do make it easier.
[dscrd-hush] <Privatoshi> Since we will emphasize security, we have to go with one of those two.
[dscrd-hush] <Privatoshi> Bc I cant tear down a custom rom and ensure its 100%
Security and privacy focused mobile OS with Android app compatibility. Much of the past privacy and security work still needs to be added back.


09. Connect to the Ethereum Network
Connect to the Ethereum Network
Here you'll make your connection to the Ethereum main network. Using this connection, you'll be able to run basic commands to search the network from your command line.
This will be done using a tool known as Infura. By connecting web3 to Infura, you will be able to access the Ethereum main and test networks using the Infura API.
Objectives
Our goal is to help you do the following things.
- Define the importance of Infura and describe how it helps you develop DApps.
- Create an Infura account
- Establish a connection between web3 and an Ethereum network.
- Use your web3-infura connection to run basic commands that search the Ethereum network.
1. Introduction to Infura
In the following video I'll go over why Infura was created and the value it brings to your future blockchain applications.
9.1-Introduction-To-Infura
Reflect
QUESTION:
In 3 sentences or less, describe the main benefits of using Infura.
ANSWER:
Infura allows you to connect to the Ethereum blockchain without running a full node. It's a lightweight alternative to downloading the entire blockchain to your local device. It makes the connection that allows you to use the functionality provided by web3.
2. Up and Running with Infura
Now that you understand why infura such a useful tool, you can create an account to access the Ethereum network. To create an infura account, go to infura.io.
From there you can navigate to your dashboard and find the endpoints required to establish a connection to the blockchain. Below is a look at the Infura dashboard. If you can see this, you're all set!
SOLUTION:
- Mainnet
- Ropsten
- Kovan
- Rinkeby
3. Connect web3 with Infura
Having set up both web3 and Infura, you're now ready to make your connection to the blockchain. In the next video, well quickly go over how to set up this connection.
9.3-Connect-Web3-To-Infura
Connect to Infura text overview
Written below are the details outlined in the previous video.
Task Description:
You can use this checklist to keep track of your progress on the steps written below.
Task Feedback:
Great job! You're now connected to the Ethereum blockchain from your terminal.
Step 1: Choose a network from the list of endpoints in the Infura dashboard.
Step 2: Set a variable url to a string containing this endpoint url.
var url = 'YOUR ENDPOINT URL HERE'
Step 3: Set a variable web3 = to a new instance of Web3 connected to the url.
var web3 = new Web3(url)
Step 4: Call this new web3 variable
web3
You are now connected to the Ethereum network.
4. Read an Ethereum Account
Now that you have a connection, you're able to run any of the web3 commands shown throughout the documentation. In the next video, I'll help get you started by showing you how to read account information using web3.
9.4-Read-An-Ethereum-Account
Task Description:
You can use this checklist to keep track of your progress on the steps listed above.
Task Feedback:
Great job! You're now reading data directly from the Ethereum blockchain.
**Step 1: ** Navigate to etherscan.io
Choose a transaction. Next, choose the sender or receiver of that transaction. We can use this address as an example to search using web3.
Example address: '0x8E21D1CE02fD6Cec455Da473b9D969424bAa9678'
Step 2: Set a variable equal to a string of the address you chose.
var address = '0x8E21D1CE02fD6Cec455Da473b9D969424bAa9678'
Step 3: Use web3 to read the balance of this account and set it to the variable balance.
web3.eth.getBalance(address, (err, bal) => { balance = bal })
Visit the documentation for more information on web3.eth.getBalance.
Step 4: Read the variable balance to the terminal
balance
If done successfully, you should have a balance for this account read to your terminal as shown below.
Now that you've established your connection, feel free to read through the web3 to experiment with more terminal commands. We'll continue walking through more of these commands as we learn more about the Ethereum blockchain in future concepts.
Exercise
Earlier in the lesson, you received your first ether on the Ethereum testnet. That account and transaction exist on the network, and you can now search that from your terminal. Try finding that transaction now by going through the following steps.
Task Description:
Find your Ether Transaction
Task Feedback:
Awesome work! You're really getting good at working with data on the Ethereum blockchain.
Review
Here you learned about infura, made an infura account, connected it to web3, and searched the command Ethereum main network from your command line.
Skill Tracker
Task Description:
Select each of the objectives that you feel you have gained the skills to complete.
Task Feedback:
Congratulations on gaining new skills!


Hello I'm Mariam , Welcome to my web page
- Seattle
- Tokyo
- Dubai
- Paris
- Lima
This is a list of locations in my website:
Open hours:(6am , 7am , 8am, 9am, 10am, 11am, 12pm , 1pm , 2pm , 3pm , 4pm , 5pm , 6pm , 7pm)
- Contact With Us:
- Location:Irbid-Arramtha.
- Phone:0781761751.
-<EMAIL_ADDRESS>WE ARE SO HAPPY TO SEE YOU WITH US , ENJOY!
ENJOY TO SEE MORE IMAGES ABOUT FISH


Nothing is selected
No template selected
Template has no properties
String:
Float:
Integer:
Boolean:
Enum:
Cat
Dog
Bird


This topic answers some frequently asked questions on querying functionality. It provides examples to help you get started with Geode querying.
For additional information on Geode querying, see Querying.
- How do I write and execute a query against a Geode region?
- Can I see query string examples, listed by query type?
- Which APIs should I use to write my queries?
- How do I invoke an object’s method in a query?
- Can I invoke a static method on an object in a query?
- How do I write a reusable query?
- When should I create indexes to use in my queries?
- How do I create an index?
- Can I query a partitioned region? Can I perform a join query on a partitioned region?
- How can I improve the performance of a partitioned region query?
- Which query language elements are supported in Geode?
- How do I debug queries?
- Can I use implicit attributes or methods in my query?
- How do I perform a case-insensitive search on a field in OQL?
How do I write and execute a query against a Geode region?
To write and execute a query in Geode, you can use any of the following mechanisms. Sample query code follows.
- Geode querying APIs
- gfsh command-line interface; in particular the query command
- REST API query endpoints
Sample Geode Query Code (Java)
// Identify your query string.
String queryString = "SELECT * FROM /exampleRegion";
// Get QueryService from Cache.
QueryService queryService = cache.getQueryService();
// Create the Query Object.
Query query = queryService.newQuery(queryString);
// Execute Query locally. Returns results set.
SelectResults results = (SelectResults)query.execute();
// Find the Size of the ResultSet.
int size = results.size();
// Iterate through your ResultSet.
Portfolio p = (Portfolio)results.iterator().next(); /* Region containing Portfolio object. */
Can I see query string examples, listed by query type?
The following example query strings use the /exampleRegion
whose keys are the portfolio ID and whose values correspond to the summarized data shown in the following class definitions:
class Portfolio implements DataSerializable {
int ID;
String type;
String status;
Map positions;
}
class Position implements DataSerializable {
String secId;
double mktValue;
double qty;
}
Basic WHERE Clause Examples
In the following examples, the status field is type String and the ID field is type int. See Supported Literals for a complete list of literals supported in Geode querying.
Select all active portfolios.
SELECT * FROM /exampleRegion WHERE status = 'active'
Select all portfolios whose status begins with ‘activ’.
SELECT * FROM /exampleRegion p WHERE p.status LIKE 'activ%'
Select all portfolios whose ID is greater than 100.
SELECT * from /exampleRegion p WHERE p.ID > 100
Using DISTINCT
Select distinct Objects from the region that satisfy the where clause condition of status = 'active’.
SELECT DISTINCT * FROM /exampleRegion WHERE status = 'active'
Aliases and Synonyms
In the query string, the path expressions (region and its objects) can be defined using an alias. This alias can be used or referred to in other places in the query.
SELECT DISTINCT * FROM /exampleRegion p WHERE p.status = 'active'
SELECT p.ID, p.status FROM /exampleRegion p WHERE p.ID > 0
Using the NOT Operator
See Operators for a complete list of supported operators.
SELECT DISTINCT * FROM /exampleRegion WHERE NOT (status = 'active') AND ID = 2
SELECT * FROM /exampleRegion WHERE NOT (ID IN SET(1,2))
Using the AND and OR Operators
See Operators for a complete list of supported operators.
SELECT * FROM /exampleRegion WHERE ID > 4 AND ID < 9
SELECT * FROM /exampleRegion WHERE ID = 0 OR ID = 1
SELECT DISTINCT p.status FROM /exampleRegion p
WHERE (p.createTime IN SET (10|) OR p.status IN SET ('active')) AND p.ID > 0
Using not equal to
SELECT * FROM /exampleRegion portfolio WHERE portfolio.ID <> 2
SELECT * FROM /exampleRegion portfolio WHERE portfolio.ID != 2
Projection attribute example
SELECT p.get('account') FROM /exampleRegion p
Querying nested collections
The following query uses Positions of type HashMap.
SELECT p, pos FROM /exampleRegion p, p.positions.values pos WHERE pos.secId = 'VMW'
Using LIMIT
SELECT * FROM /exampleRegion p WHERE p.ID > 0 LIMIT 2
Using COUNT
See COUNT for more information.
 In the following examples, 'version’ is one of the keys in the hashmap.

SELECT * FROM /exampleRegion portfolio WHERE portfolio.ID IN SET(1, 2)
SELECT * FROM /exampleRegion portfolio, portfolio.positions.values positions
WHERE portfolio.Pk IN SET ('1', '2') AND positions.secId = '1'
SELECT * FROM /exampleRegion portfolio, portfolio.positions.values positions
WHERE portfolio.Pk IN SET ('1', '2') OR positions.secId IN SET ('1', '2', '3')
SELECT * FROM /exampleRegion portfolio, portfolio.positions.values positions
WHERE portfolio.Pk IN SET ('1', '2') OR positions.secId IN SET ('1', '2', '3')
AND portfolio.status = 'active'
Querying for Set values
In the following query, sp is of type Set.
SELECT * FROM /exampleRegion WHERE sp = set('20', '21', '22')
If the Set (sp) only contains '20’ and '21’, then the query will evaluate to false. The query compares the two sets and looks for the presence of elements in both sets.
For other collection types like list (sp is of type List), the query can be written as follows:
SELECT * FROM /exampleRegion WHERE sp.containsAll(set('20', '21', '22'))
Invoking Methods on Objects
See Method Invocations for more information.
 (If you are using an IMPORT statement, include it before the IMPORT).
<trace>
SELECT * from /exampleRegion, positions.values TYPE myclass
Using Reserved Words in Queries
To access any method, attribute, or named object that has the same name as a query language reserved word, enclose the name within double quotation marks.
SELECT * FROM /exampleRegion WHERE status = 'active' AND "type" = 'XYZ'
SELECT DISTINCT "type" FROM /exampleRegion WHERE status = 'active'
Using IMPORT
In the case where the same class name resides in two different namescopes (packages), there needs to be a means of referring to different classes of the same name. The IMPORT statement is used to establish a namescope for a class in a query.
IMPORT package.Position;
SELECT DISTINCT * FROM /exampleRegion, positions.values positions TYPE Position WHERE positions.mktValue >= 25.00
Using TYPE
Specifying object type helps the query engine to process the query at optimal speed. Apart from specifying the object types during configuration (using key-constraint and value-constraint), type can be explicitly specified in the query string.
SELECT DISTINCT * FROM /exampleRegion, positions.values positions TYPE Position WHERE positions.mktValue >= 25.00
Using ELEMENT
Using ELEMENT(expr) extracts a single element from a collection or array. This function throws a FunctionDomainException
if the argument is not a collection or array with exactly one element.
ELEMENT(SELECT DISTINCT * FROM /exampleRegion WHERE id = 'XYZ-1').status = 'active'
Which APIs should I use to write my queries?
If you are querying a Java application’s local cache or querying other members, use org.apache.geode.cache.Cache.getQueryService.
If you are writing a Java client to server query, use org.apache.geode.cache.client.Pool.getQueryService.
How do I invoke an object’s method in a query?
To use a method in a query, use the attribute name that maps to the public method you want to invoke. For example:
/*valid method invocation*/
SELECT DISTINCT * FROM /exampleRegion p WHERE p.positions.size >= 2 - maps to positions.size()
Can I invoke a static method on an object in a query?
No, you cannot invoke a static method on an object. For example, the following query is invalid.
/*invalid method invocation*/
SELECT DISTINCT * FROM /exampleRegion WHERE aDay = Day.Wednesday
To work around this limitation, write a reusable query that uses a query bind parameter to invoke the static method. Then at query run time, set the parameter to the static method invocation (Day.Wednesday
). For example:
SELECT DISTINCT * FROM /exampleRegion WHERE aDay = $1
How do I write a reusable query?
Using query APIs, you can set query bind parameters that are passed values at query run time. For example:
// specify the query string
String queryString = "SELECT DISTINCT * FROM /exampleRegion p WHERE p.status = $1";
QueryService queryService = cache.getQueryService();
Query query = queryService.newQuery(queryString);
// set a query bind parameter
Object[] params = new Object[1];
params[0] = "active";
// Execute the query locally. It returns the results set.
SelectResults results = (SelectResults) query.execute(params);
// use the results of the query; this example only looks at the size
int size = results.size();
If you use a query bind parameter in place of a region path in your path expression, the parameter value must reference a collection (and not a String such as the name of the region path.)
See Using Query Bind Parameters for more details.
When should I create indexes to use in my queries?
Determine whether your query’s performance will benefit from an index. For example, in the following query, an index on pkid can speed up the query.
SELECT DISTINCT * FROM /exampleRegion portfolio WHERE portfolio.pkid = '123'
How do I create an index?
An index can be created programmatically using APIs or by using xml. Here are two examples:
Sample Code
QueryService qs = cache.getQueryService();
qs.createIndex("myIndex", "status", "/exampleRegion");
qs.createKeyIndex("myKeyIndex", "id", "exampleRegion");
For more information on using this API, see the JavaDocs.
Sample XML
<region name="portfolios">
<region-attributes . . . >
</region-attributes>
<index name="myIndex">
<functional from-clause="/exampleRegion"
expression="status"/>
</index>
<index name="myKeyIndex">
<primary-key field="id"/>
</index>
<entry>
For more details on indexes, see Working with Indexes.
Can I create indexes on overflow regions?
You can create indexes on overflow regions, but you are subject to some limitations. For example, the data contained in the index itself cannot be overflowed to disk. See Using Indexes with Overflow Regions for more information.
Can I query a partitioned region? Can I perform a join query on a partitioned region?
You can query partitioned regions, but there are some limitations. You cannot perform join queries on partitioned regions, however you can perform equi-join queries on colocated partitioned regions by executing a function on a local data set.
For a full list of restrictions, see Partitioned Region Query Restrictions.
How can I improve the performance of a partitioned region query?
If you know the data you need to query, you can target particular nodes in your queries (thus reducing the number of servers the query needs to access) by executing the query with the FunctionService. See Querying a Partitioned Region on a Single Node for details. If you are querying data that has been partitioned by a key or specific field, you should first create a key index and then execute the query using the FunctionService with the key or field as a filter. See Optimizing Queries on Data Partitioned by a Key or Field Value.
Which query language elements are supported in Geode?
| Supported elements | ||
|---|---|---|
| AND | LIMIT | TO_DATE |
| AS | LIKE | TYPE |
| COUNT | NOT | WHERE |
| DISTINCT | NVL | |
| ELEMENT | OR | |
| FROM | ORDER BY | |
| <HINT> | SELECT | |
| IMPORT | SET | |
| IN | <TRACE> | |
| IS_DEFINED | TRUE | |
| IS_UNDEFINED |
For more information and examples on using each supported keyword, see Supported Keywords.
How do I debug queries?
You can debug a specific query at the query level by adding the <trace> keyword before the query string that you want to debug. Here is an example:
<trace> SELECT * FROM /exampleRegion
You can also write:
<TRACE> SELECT * FROM /exampleRegion
When the query is executed, Geode will log a message in $GEMFIRE_DIR/system.log
with the following information:
[info 2011/08/29 11:24:35.472 PDT CqServer <main> tid=0x1] Query Executed in 9.619656 ms; rowCount = 99;
indexesUsed(0) "select * from /exampleRegion"
If you want to enable debugging for all queries, you can enable query execution logging by setting a System property on the command line during start-up:
gfsh>start server --name=server_name -–J=-Dgemfire.Query.VERBOSE=true
Or you can set the property programmatically:
System.setProperty("gemfire.Query.VERBOSE","true");
Can I use implicit attributes or methods in my query?
If an implicit attribute or method name can only be associated with one untyped iterator, the Geode query processor will assume that it is associated with that iterator. However, if more than one untyped iterator is in scope, then the query will fail with a TypeMismatchException
. The following query fails because the query processor does not fully type expressions:
select distinct value.secId from /pos , getPositions(23)
The following query, however, succeeds because the iterator is either explicitly named with a variable or it is typed:
select distinct e.value.secId from /pos , getPositions(23) e
Can I instruct the query engine to use specific indexes with my queries?
Using HINT indexname allows you to instruct the query engine to prefer and filter results from the specified indexes. If you provide multiple index names, the query engine will use all available indexes but prefer the specified indexes.
<HINT 'IDIndex'> SELECT * FROM /Portfolios p WHERE p.ID > 10 AND p.owner = 'XYZ'
<HINT 'IDIndex', 'OwnerIndex'> SELECT * FROM /Portfolios p WHERE p.ID > 10 AND p.owner = 'XYZ' AND p.value < 100
How do I perform a case-insensitive search on a field in OQL?
You can use the Java String class methods toUpperCase
and toLowerCase
to transform fields where you want to perform a case-insensitive search.


Wario exposes the wario()
function that accepts a string and an object and
returns the compiled results.
Attributes in templates should be wrapped in {{
and }}
.
{ name: 'Lucian', food: 'biscuits' }

Hello my name is {{name}}! I like eating {{food}}.

var obj = {
foods: [
{ foodName: 'Noodles', foodAttribute: 'stringy' },
{ foodName: 'Tacos', foodAttribute: 'crunchy' },
{ foodName: 'Ice cream sandwiches', foodAttribute: 'cold' }
]
};

I like eating the following foods:

{{#each foods}}

{{foodName}} because they are {{foodAttribute}}.

{{/each}}