'The Insider' (1999)
A movie review by Walter Frith
<EMAIL_ADDRESS>Member of the 'Online Film Critics Society' http://www.ofcs.org
Based on the Vanity Fair article 'The Man Who Knew Too Much' by Marie Brenner, director Michael Mann's 'The Insider' is not so much a film which is anti-tobacco as it is pro-truth. Mann's ability to diversify himself as a film maker continues to impress me. From his little known 'Thief' in 1981, to his Oscar winning period piece effort 'The Last of the Mohicans' in 1992 to his soulful examination of crime with 1995's 'Heat', Mann always finds a laid back style mixed with a textured style of great visuals and an under lying theme of violence, or at least a reference to it (always tastefully portrayed) is found in his work. Mann teams up with the Oscar winning writer of 'Forrest Gump', Eric Roth to bring a broadened approach to a very serious issue which may be the most serious legal entanglement ever to engulf the United States. I'm talking, of course, about the law suits that many states have filed against the tobacco industry, citing them for selling a knowingly dangerous and addictive product which has cost many health care programs billions of dollars. What 'The Insider' does is it makes you think about the ethics involved in pursuing the truth, no matter what the cost.
Based on a true story, 'The Insider' is about a former tobacco company executive and a producer from t.v.'s '60 Minutes' who collaborate to tell millions the truth about the way cigarettes are allegedly tampered with to increase a person's desire for them. Dr. Jeffrey Wigand (Russell Crowe) is the conscience-stricken former tobacco executive who wants to blow the whistle on his former employer and teams up with Lowell Bergman (Al Pacino), a top producer for '60 Minutes' who works closely with legendary anchor Mike Wallace (Christopher Plummer).
As the story unfolds, we see that Wigand signed a document of confidentiality, stating that he would never reveal to outside sources the details of his job. He eventually balks at this and feels that he has a greater responsibility to the public. His life then begins to fall apart. As he makes progress in bringing what he knows to the public, he finds a bullet in his mailbox, an e-mail is sent to his house threatening to kill him and every member of his family and his wife leaves him. At least he is able to find work as a high school teacher after being fired from his old job with big tobacco.
What really makes 'The Insider' work is the way it tries to tackle the subject of media ethics. As it is based on a true story, there is a detailed breakdown of the struggles, arguments and wrangling over what content is suitable to air and what footage may land CBS' '60 Minutes' in some serious hot water. Bergman produces the segment with Wallace as the host, interviewing Wigand and making allegations against big tobacco as the film becomes more and more absorbing.
The film also does something very clever. It never tries to match its two leading stars against each other in an effort or given opportunity to upstage one another. The first half of the film is primarily about Wigand's dilemma and the second half tells the story of Bergman and Wallace and how they are at odds during the whole story.
Russell Crowe, who was born in New Zealand, gave a brilliant and hard boiled performance as the tough cop in 'L.A. Confidential' and mastered an American accent extremely well. He makes good on that again with his portrayal of Wigand using a New York accent which he nails down to perfection. Pacino, my all time favourite actor, gives a straight forward performance as the veteran producer who oozes decency. He cares about his sources and goes to bat for them each and every time.
At a running time of over two and a half hours, Michael Mann uses every minute to properly tell his story of one of this generations greatest injustices. There is a time during the film where a lot is said about Jeffrey Wigand's flaws that perhaps question, if not, damage, his credibility as a witness to his former employer's dealings. Balance is the key with this film that strives not only to inform but enlighten an audience in a conventional yet powerful manner. An extraordinary combination and Oscar nominations for some may be involved.
OUT OF 5 > * * * * *
Visit FILM FOLLOW-UP by Walter Frith http://www.cgocable.net/~wfrith/movies.htm
* * * * * - a must see * * * * 1/2 - don't miss it * * * * - an excellent film * * * 1/2 - a marginal recommendation * * * - can't quite recommend it * * 1/2 - don't recommend it * * - avoid it * 1/2 - avoid it seriously * - avoid it AT ALL COSTS 1/2 - see it at your own risk zero - may be hazardous to your health
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


I like apples and oranges
I also like :
bananas
mangoes
plums
peaches
cherries
graps
You can see other fruits I like
here


AJAX allows me to get content from my server within my webpage (for example, a click), and do something without refreshing the page.
One slight downside of it, is that we can't use it on local files.
So, AJAX doesn't work on files on your computer.
jQuery is not critical for AJAX, but it makes it easier.


dcraw(1) dcraw(1) NAME dcraw - command-line decoder for raw digital photos SYNOPSIS dcraw [OPTION]... [FILE]... DESCRIPTION dcraw decodes raw photos, displays metadata, and extracts thumbnails. GENERAL OPTIONS -v Print verbose messages, not just warnings and errors. -c Write decoded images or thumbnails to standard output. -e Extract the camera-generated thumbnail, not the raw image. You'll get either a JPEG or a PPM file, depending on the camera. -z Change the access and modification times of an AVI, JPEG, TIFF or raw file to when the photo was taken, assuming that the camera clock was set to Universal Time. -i Identify files but don't decode them. Exit status is 0 if dcraw can decode the last file, 1 if it can't. -i -v shows metadata. dcraw cannot decode JPEG files!! REPAIR OPTIONS -P deadpixels.txt Read the dead pixel list from this file instead of ".badpixels". See FILES for a description of the format. -K darkframe.pgm Subtract a dark frame from the raw data. To generate a dark frame, shoot a raw photo with no light and do dcraw -D -4 -j -t 0. -k darkness When shadows appear foggy, you need to raise the darkness level. To measure this, apply pamsumm -mean to the dark frame generated above. -S saturation When highlights appear pink, you need to lower the saturation level. To measure this, take a picture of something shiny and do dcraw -D -4 -j -c photo.raw | pamsumm -max The default darkness and saturation are usually correct. -n noise_threshold Use wavelets to erase noise while preserving real detail. The best threshold should be somewhere between 100 and 1000. -C red_mag blue_mag Enlarge the raw red and blue layers by the given factors, typi‐ cally 0.999 to 1.001, to correct chromatic aberration. -H 0 Clip all highlights to solid white (default). -H 1 Leave highlights unclipped in various shades of pink. -H 2 Blend clipped and unclipped values together for a gradual fade to white. -H 3+ Reconstruct highlights. Low numbers favor whites; high numbers favor colors. Try -H 5 as a compromise. If that's not good enough, do -H 9, cut out the non-white highlights, and paste them into an image generated with -H 3. COLOR OPTIONS By default, dcraw uses a fixed white balance based on a color chart illu‐ minated with a standard D65 lamp. -w Use the white balance specified by the camera. If this is not found, print a warning and use another method. -a Calculate the white balance by averaging the entire image. -A left top width height Calculate the white balance by averaging a rectangular area. First do dcraw -j -t 0 and select an area of neutral grey color. -r mul0 mul1 mul2 mul3 Specify your own raw white balance. These multipliers can be cut and pasted from the output of dcraw -v. +M or -M Use (or don't use) any color matrix from the camera metadata. The default is +M if -w is set, -M otherwise. This option only affects Olympus, Leaf, and Phase One cameras. -o [0-5] Select the output colorspace when the -p option is not used: 0 Raw color (unique to each camera) 1 sRGB D65 (default) 2 Adobe RGB (1998) D65 3 Wide Gamut RGB D65 4 Kodak ProPhoto RGB D65 5 XYZ -p camera.icm [ -o output.icm ] Use ICC profiles to define the camera's raw colorspace and the desired output colorspace (sRGB by default). -p embed Use the ICC profile embedded in the raw photo. INTERPOLATION OPTIONS -d Show the raw data as a grayscale image with no interpolation. Good for photographing black-and-white documents. -D Same as -d, but totally raw (no color scaling). -h Output a half-size color image. Twice as fast as -q 0. -q 0 Use high-speed, low-quality bilinear interpolation. -q 1 Use Variable Number of Gradients (VNG) interpolation. -q 2 Use Patterned Pixel Grouping (PPG) interpolation. -q 3 Use Adaptive Homogeneity-Directed (AHD) interpolation. -f Interpolate RGB as four colors. Use this if the output shows false 2x2 meshes with VNG or mazes with AHD. -m number_of_passes After interpolation, clean up color artifacts by repeatedly apply‐ ing a 3x3 median filter to the R-G and B-G channels. OUTPUT OPTIONS By default, dcraw writes PGM/PPM/PAM with 8-bit samples, a BT.709 gamma curve, a histogram-based white level, and no metadata. -W Use a fixed white level, ignoring the image histogram. -b brightness Divide the white level by this number, 1.0 by default. -g power toe_slope Set the gamma curve, by default BT.709 (-g 2.222 4.5). If you prefer sRGB gamma, use -g 2.4 12.92. For a simple power curve, set the toe slope to zero. -6 Write sixteen bits per sample instead of eight. -4 Linear 16-bit, same as -6 -W -g 1 1. -T Write TIFF with metadata instead of PGM/PPM/PAM. -t [0-7,90,180,270] Flip the output image. By default, dcraw applies the flip speci‐ fied by the camera. -t 0 disables all flipping. -j For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras with non-square pixels, do not stretch the image to its correct aspect ratio. In any case, this option guarantees that each output pixel corresponds to one raw pixel. -s [0..N-1] or -s all If a file contains N raw images, choose one or "all" to decode. For example, Fuji Super CCD SR cameras generate a second image underexposed four stops to show detail in the highlights. FILES ./.badpixels, ../.badpixels, ../../.badpixels, ... List of your camera's dead pixels, so that dcraw can interpolate around them. Each line specifies the column, row, and UNIX time of death for one pixel. For example: 962 91<PHONE_NUMBER> # died between August 1 and 4, 2002 1285 1067 0 # don't know when this pixel died These coordinates are before any cropping or rotation, so use dcraw -j -t 0 to locate dead pixels. SEE ALSO pgm(5), ppm(5), pam(5), pamsumm(1), pnmgamma(1), pnmtotiff(1), pnm‐ topng(1), gphoto2(1), cjpeg(1), djpeg(1) AUTHOR Written by David Coffin, dcoffin a cybercom o net May 14, 2009 dcraw(1)


¶ Host RoomCopyright(c) 2016 Stefano Balietti MIT Licensed An host room keeps the client before moving them to another room. Examples: requirements and waiting room. |
"use strict";
|
¶ Global scope |
module.exports = HostRoom;
var ngc = require('nodegame-client');
var J = require('JSUS').JSUS;
var Room = require('./Room');
HostRoom.prototype.__proto__ = Room.prototype;
HostRoom.prototype.constructor = HostRoom;
function HostRoom(type, config) {
config = config || {};
if (!config.acm) {
config.acm = {
notify: {
onConnect: false,
onStageUpdate: false,
onStageLevelUpdate: false,
onStageLoadedUpdated: false
}
};
}
Room.call(this, type, config);
this.registerRoom();
}
|
¶ HostRoom.setupGameSetups the logic game objectx Params
mixinConf
object
Optional. Additional options to pass to the node
instance of the room. Will override default settings of the game
|
HostRoom.prototype.setupGame = function(mixinConf) {
var game, channel, node, room, settings, runtimeConf;
if (mixinConf && 'object' !== typeof mixinConf) {
throw new TypeError(this.roomType +
'Room.setupGame: mixinConf must be ' +
'object or undefined.');
}
node = this.node;
channel = this.channel;
settings = this.settings;
runtimeConf = this.runtimeConf;
room = this;
|
|
Require game configuration for the logic. |
game = require(this.logicPath)(settings, room, runtimeConf);
if ('object' !== typeof game) {
throw new Error(this.roomType + 'Room.setupGame: room ' + this.name +
': logicPath did not return a valid game object.');
}
|
|
Mixin-in nodeGame options. |
if (mixinConf) {
J.mixin(game, mixinConf);
}
|
|
Setup must be called before connect. |
node.setup('nodegame', game);
|
|
Connect logic to server, if not already connected. E.g., after a stop command it is generally still connected. Or the node object can be passed in the constructor and be already connected. |
if (!node.socket.isConnected()) {
|
|
Mixin-in nodeGame options. |
node.socket.setSocketType('SocketDirect', {
socket: channel.adminServer.socketManager.sockets.direct
});
node.connect(null, {
startingRoom: this.name,
clientType: 'logic'
});
}
};
|
¶ HostRoom.startGameStarts the game, optionally starts connected players Params
startPlayers
boolean
If TRUE, sends a start command to all players.
Default: False.
|
HostRoom.prototype.startGame = function(startPlayers) {
var node;
node = this.node;
if (!node.game.isStartable()) {
this.channel.sysLogger.log(
this.roomType + 'Room.startGame: game cannot be started.', 'warn');
return;
}
node.game.start();
if (startPlayers) {
this.clients.player.each(function(p) {
node.remoteCommand('start', p.id);
});
}
};
|
¶ HostRoom.pauseGamePauses the game, optionally pauses connected players Params
pausePlayers
boolean
If TRUE, sends a pause command to all players.
Default: False.
|
HostRoom.prototype.pauseGame = function(pausePlayers) {
var node;
node = this.node;
if (!node.game.isPausable()) {
this.channel.sysLogger.log(this.roomType +
'Room.pauseGame: game cannot be paused.',
'warn');
return;
}
node.game.pause();
if (pausePlayers) {
this.clients.player.each(function(p) {
node.remoteCommand('pause', p.id);
});
}
};
|
¶ HostRoom.resumeGameResumes the game, optionally resumes connected players Params
resumePlayers
boolean
If TRUE, sends a resume command to
all players. Default: False.
|
HostRoom.prototype.resumeGame = function(resumePlayers) {
var node;
node = this.node;
if (!node.game.isResumable()) {
this.channel.sysLogger.log(this.roomType +
'Room.resumeGame: game cannot be resumed.',
'warn');
return;
}
node.game.resume();
if (resumePlayers) {
this.clients.player.each(function(p) {
node.remoteCommand('resume', p.id);
});
}
};
|
¶ HostRoom.stopGameStops the game, optionally stops connected players Params
stopPlayers
boolean
If TRUE, sends a stop command to all players.
Default: False.
|
HostRoom.prototype.stopGame = function(stopPlayers) {
var node;
node = this.node;
if (!node.game.isStoppable()) {
this.channel.sysLogger.log(this.roomType +
'Room.stopGame: game cannot be stopped.',
'warn');
return;
}
node.game.stop();
if (stopPlayers) {
this.clients.player.each(function(p) {
node.remoteCommand('stop', p.id);
});
}
};
|


Before Change
// we are a Series like object,
// but may have multiple aggregations
if len(sl) == 1:
result = _agg(
arg, lambda fname, agg_how: _agg_1dim(obj._selection, agg_how)
)
// we are selecting the same set as we are aggregating
elif not len(sl - set(keys)):
result = _agg(arg, _agg_1dim)
// we are a DataFrame, with possibly multiple aggregations
else:
result = _agg(arg, _agg_2dim)
// no selection
else:
try:
result = _agg(arg, _agg_1dim)
After Change
if selected_obj.ndim == 1:
// key only used for output
colg = obj._gotitem(obj._selection, ndim=1)
results = {key: colg.agg(how) for key, how in arg.items()}
else:
// key used for column selection and output
results = {


{% extends "base.html" %} {% block content %}
Thank you for your enthusiasm, {{ user.username }}, but it seems there are no teams you can vote on.


LONE STAR A film review by Scott Renshaw Copyright 1996 Scott Renshaw
(Sony Pictures Classics) Starring: Chris Cooper, Elizabeth Pena, Joe Morton, Clifton James, Miriam Colon, Ron Canada, Kris Kristofferson, Matthew McConaughey. Screenplay: John Sayles. Director: John Sayles. Reviewed by Scott Renshaw.
This is how far I trust John Sayles' skill as a writer: in the few hours after I saw LONE STAR, when I couldn't quite get the pieces to fit together, I figured _I_ had to be missing something. Perhaps more than any other filmmaker's next project, I look forward to the next John Sayles project like a Christmas gift. While he is still growing as a director, his scripts are so unapologetically and relentlessly literate -- and literary -- that unwrapping them is its own kind of pleasure. LONE STAR, as much as any film of the last several years, is a novel on the screen, and a marvelous one. When I finally did put those pieces together, I realized how justified my faith had been.
LONE STAR takes place in the Texas border town of Frontera, where two men make a discovery near a former Army firing range: a human skeleton which appears to be the remains of Charley Wade (Kris Kristofferson), the corrupt sheriff who used to run Frontera with an iron hand and an open pocket. The discovery is of great interest to current sheriff Sam Deeds (Chris Cooper), whose late father Buddy followed Charley as sheriff and became a beloved figure. But Sam's own feelings about Buddy are ambivalent, and when he begins to believe that Buddy might have been the man who killed Charley Wade, he becomes determined to find out the truth. That quest has Sam crossing paths with several townspeople, including Pilar Cruz (Elizabeth Pena), a high school teacher and Sam's old flame; mayor Hollis Page (Clifton James), formerly one of Charley's deputies; and bar owner Otis Payne (Ron Canada). Each one holds part of the key to a forty year old mystery.
On its most basic level, LONE STAR is a superbly acted study of life in a border town. The cast is uniformly in tune with Sayles' naturalistic style, particularly Chris Cooper in a subtle but powerful performance as Sam; even Frances McDormand, as Sam's manic-depressive ex-wife, lends humanity to an edgy role in her single scene. The multi-ethnic cast provides a solid foundation for an examination of a place where the "melting pot" is anything but.  It is a place which, while less overtly racist than it was during Charley Wade's reign in the 1950s, is still characterized by an omnipresent sense of "us" and "them."
That is one of two crucial sub-texts of LONE STAR, both of which are intrinsic to its South Texas setting. This is a story about borders of all kinds, set in a town which is named after the Spanish word for "border." Fathers and sons are divided by old emotional wounds, lovers are separated by race, and everyone seems to be separated from the truth by pre-conceptions about what the truth should be. And that is the other thread running through LONE STAR: the nature of history. In an early scene, parents of various ethnicities sit in Pilar's classroom arguing over the way she is teaching the Battle of the Alamo, the white parents attacking her for suggesting that there is another perspective from which it could be viewed. The idea that history is personal is troubling, because it destabilizes the past, and when history has crossed over into legend, there will be many who prefer solidity. That is the truth Sam discovers as his investigation challenges the memory of his legendary father: myth has a power which simple facts cannot hope to match.
These rich themes were always evident as I watched LONE STAR, but I was bothered by a seemingly tangential sub-plot involving Otis Payne's estranged son Del (Joe Morton), returned to Frontera with his family after many years to act as commanding officer at the local army base. Then, finally, I saw it as absolutely crucial. Del, like Sam, harbors resentment towards his father; unlike Sam, his father is still alive. Sam's investigation can only bring him so close to Buddy, and it is telling that Buddy (played by Matthew McConaughey) appears only briefly in the flashbacks which Sayles weaves through LONE STAR. Sam and Buddy are separated by an uncrossable border -- the border of history -- while Del finds himself with a chance to be re-united with his father. At times it seems that Sayles is suggesting that the only history that has a chance of being re-interpreted is the history which has yet to be created.
LONE STAR is a haunting film, which deals with unexpectedly delicate subject matter with startling confidence. The experience of watching the film sticks with me because I didn't just sit through two hours of film; I was reading people's lives. That is the kind of filmmaker John Sayles is: an author with a camera.
On the Renshaw scale of 0 to 10 closed borders: 10.
-- Scott Renshaw Stanford University http://www-leland.stanford.edu/~srenshaw
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


|
School Nurse Pay Equity News
(August 2001)
On January 18, 2001, a hearing was held in Suffolk Superior Court on the Massachusetts Department of Education's Motion to Dismiss the suit filed by MSNO (Ann L. Greenbaum et. al. vs. Mass. Department of Education, et. al.) Unfortunately, Judge Thayer Freemont-Smith's opinion supported the Department of Education's Motion to Dismiss.
We are now in the appeal process. Attorney Rossman filed an intent to appeal. The brief is due in mid-September. It is prepared and will be filed in a timely manner. We must now be patient again and wait for the next step in the legal process.
Attention: School Nurses!
Pay Equity Survey
We are attempting to form a list of districts which include pay equity for their school nurses. MSNO is frequently asked which districts have pay equity, especially for those who are entering bargaining.
So, if you are fortunate to have pay equity for the school nurses, please e-mail either Barbara Connolly at her msno.org e-mail address or<EMAIL_ADDRESS>Please be clear:
- Do you have full equity with all other professional staff?
- Do you have a separate pay scale for nurses, but one which gives pay equity?
- Do you have a partial equity, working towards full?
- Do you have a means for inclusion of diploma grads, in pay equity?
- If so, must they be certified or can they be "certification exempt"?
This information will be helpful. Be patient if you are searching for specifics for your district, though. It will take us volunteers a bit of time to compile this information so that it can be useful to everyone. But it will only be of use if YOU send us your information to start!
School Nurse Pay Equity Lawsuit Filed
July 25, 2000
On July 25, 2000, a lawsuit was filed in Suffolk County Superior Court by Attorney Neil Rossman. Civil Action No. #00-3348-F.
The named plaintiffs are:
The Massachusetts School Nurse Organization, Inc.
Ann Borges: Blackstone-Millville School District
Roberta Cobbett: Swampscott Public Schools
Barbara Connolly: New Bedford Public Schools
Janice DiFillipo: Central Berkshire Regional School District
Ann Greenbaum: Swampscott Public Schools
Kathleen Larson: Mount Greylock School Union
Maureen Saunders: Duxbury Public Schools
Joan Scheid: Berlin/Boylston School District
Louise Chase Thurston: Westford Public Schools
The legal system moves slowly, and we will have to be patient as the case progresses. We will keep you informed on this MSNO web site of all developments in the lawsuit.
We suggest that you share this information with your colleagues, your local newspapers, cable TV stations, etc. Refer them to Neil Rossman for details of the lawsuit.
Questions for MSNO regarding the lawsuit can be directed to Barbara Connolly or Roberta Cobbett through this MSNO web site.
If you have not yet made your contribution to assist in funding the legal action, please do so now. Checks should be made out to "MSNO Legal Action Fund."
Mail to:
MSNO
c/o Roberta Cobbett
28 Greenwood Terrace
Swampscott, MA. 01907
The following information summarizes the history leading up to this action:
The Massachusetts Education Reform Act of 1993 amended the teacher certification act to include school
nurses. The position of "school nurse" in the Commonwealth of Massachusetts is now defined by statute. Despite the
fact that since June 1993 school nurse certification requirements are equal to, and in some areas even more rigorous
than, those for teachers and other non-classroom based educational support personnel, most professional school nurses
in Massachusetts are denied compensation equal to other professionals employed by the school system.
It is MSNO's contention that the practice of salary inequities ultimately impacts the quality of health care
delivered to students, since it is difficult to attract and retain school nurses with expertise in critical thinking,
decision making, program management, health education and counseling, program planning, and community outreach, when
competitive salaries are not offered.
Groups of nurses in individual school systems have historically had little success in securing equitable contracts.
Despite the current statewide and national recognition of the positive impact of school nurses on children's health,
the expanded public health role of school nurses, and the need for their professional education, many of Massachusetts'
school nurses report that they continue to feel undervalued, unempowered, and isolated. In spite of their many
attempts to campaign for adequate compensation, comparable to other professionals in the school system, they have
continuously been denied pay equity.
Consequently in September 1997 the Massachusetts School Nurse Organization (MSNO) formed a "Pay Equity Committee"
and began a statewide effort to address the problem of school nurse salary inequities.
In January 1998 MSNO conducted a statewide survey that confirmed that only a small minority of the school districts in
the Commonwealth pay school nurses on the same pay scale as their professional counterparts with equal educational and
certification requirements. (The survey report, entitled Report on the Current State of Salary Inequities for
Professional School Nurses in Massachusetts, is available from MSNO.) The vast majority of school nurses in
Massachusetts are significantly under-compensated.
In November 1999 a complaint was filed in Essex County Superior Court. Plaintiffs were Ann Greenbaum, RN and Roberta
Cobbett, RN, school nurses in the Swampscott Public Schools. Defendants were the Chairman of the Swampscott School
Committee, the Superintendent of the Swampscott School Department and the duly elected Swampscott School Committee.
On July 25, 2000 a lawsuit was filed in Suffolk County Superior Court by Attorney Neil Rossman, Civil
Action No. #00-3348-F.
School Nurse Pay Equity Lawsuit
(November 2000)
Submitted by Barbara Connolly
The Massachusetts Attorney General's office is representing the Department of Education in the matter
of the Pay Equity lawsuit. The Assistant Attorney General for Administrative Law is filing a "Motion to Dismiss"
and has submitted this motion to MSNO's attorney, Neil Rossman. Attorney Rossman will submit a response to this motion.
It will be the "Opposition of Plaintiffs to Defendants' Motion to Dismiss." The Motion to Dismiss and the
response will then be filed with the court and will be reviewed by a judge. We will keep you updated on this website as
the legal proceedings unfold.
Newspapers across the state remain interested in doing articles on school nurses generally and on the pay equity
issue in particular. Journalists are very willing to pay attention to nurses. A recently published book entitled
From Silence to Voice: What Nurses Know and Must Communicate to the Public by Bernice Buresh and Suzanne Gordon
presents a practical guide that provides approaches to increase nurses' visibility and voice in the media. We have
found during this campaign for pay equity that the media is very interested in our issues. Do not be intimidated.
Contact your local newspapers and cable stations to publicize the pay equity issue. We need to be heard and each of
you can make a difference in your area. Please feel free to contact
Barbara Connolly at her msno.org e-mail address or<EMAIL_ADDRESS>with questions.
On October 26, 2000 The New Bedford Standard-Times ran an article entitled "School Nurses Keep Busy"
in which they featured the nurses in the Freetown/Lakeville School District.
The South Weekly edition of The Boston Globe on Sunday October 8, 2000 carried a feature article
entitled "School Nurses Demand More Pay." Nurses from Duxbury, Hanover and Freetown/Lakeville were spotlighted.
On October 22, 2000 The Boston Globe published the following letter-to-the-editor, submitted by Barbara
Connolly on behalf of MSNO, in response to comments made in the article by Hanover's superintendent of schools.
Pay Equity for School Nurses
(Letter-to-the Editor)
A book published in 1989 entitled Just a Nurse stated that "the public wants a nurse to be a warm,
caring human being. The intellectual acumen needed to practice professional nursing is rarely understood." This
statement applies to school superintendents and school committees who rarely seem to recognize the role of school nurses
and certainly do not seem to understand the "intellectual acumen" required of these nurses.
The practice of professional nursing by school nurses occurs within the complex and unpredictable setting of the
educational institution, not in a medical facility. A school nurse usually functions as a sole practitioner in her
school. The Comprehensive School Health Manual, published by the Massachusetts Department of Public Health in
1995, reminds us that the comprehensive and expanding public health nature of school nursing practice demands an
educational and skill level that enables the school nurse to meet the current health needs of the students and staff.
Why then, do the majority of school districts in the Commonwealth continue to devalue the nursing profession by refusing
to pay nurses on the same salary scale as teachers and other non-classroom based educational
support staff?
It is the Massachusetts School Nurse Organization's contention that the practice of salary inequities ultimately
impacts the quality of health care delivered to students, since it is difficult to attract and retain school nurses with
expertise in critical thinking, decision making, program management, health education and counseling, program planning,
and community outreach, when competitive salaries are not offered.
Pay Equity for School Nurses
Barbara Connolly, RN, MSN
Pay Equity Chairperson
It appears that school districts which deny school nurses pay equity are violating the Education Reform Act's
statement of nondiscrimination. A summary of the issues in the lawsuit are as follows:
- under the Education Reform Act school nurses are required to be certified like all other educational professionals
and to have a bachelor's degree as a prerequisite to certification...
- school nurses are professional educators, as are all other non-classroom based educational support staff...
- under Education Reform school nurses are the legal equal of other certified educators...
- in spite of having to meet the same requirements as classroom teachers pay equity and professional standing are
denied the school nurses...
- salary schedules for school nurses are much lower than all other educational professionals...
Also, the Education Reform Act states (Section 99 of Statutes of 1993, Chapter 71):
"All programs and actions undertaken under the provisions of this act shall be conducted in a manner reflecting
and encouraging a policy of nondiscrimination and equal opportunity for members of minority groups and women. All
officials...of any school department...shall take affirmative steps to ensure equality of opportunity in the internal
affairs of such departments...Each school district department...shall adopt measures to ensure equal opportunity in the
areas of hiring, promotion,...rates of compensation and in-service training programs..."
The MSNO Board of Directors has voted to support this legal action to achieve pay equity for school nurses.
More information will be forthcoming to every school nurse in the State regarding how they can lend their encouragement
and financial support to this undertaking.
MSNO Advances with Pay Equity Legal Action
The MSNO Pay Equity Committee wishes to thank all who have contributed to the MSNO Legal Action Fund.
In the short time since we have informed our
membership and other school nurse colleagues of our legal action process and our need for funding this action,
we have raised $17,000. The requested amount to contribute is $50. Individual school nurses' contributions have
ranged from $25 to $1,000. We thank you profoundly! Since we anticipate needing $50,000, we hope that those who
have not yet contributed will do so soon. Everyone's contribution is necessary if this legal action is to
succeed.
We have had a wonderful show of support from local unions, with donations ranging from $50 to $500! The MTA
has been contacted by Linda Salmonsen, requesting that MTA contribute financially, as well as to encourage
the support of the individual locals. NASN's Legal Defense Fund and the Connecticut Association of School Nurses
have also been most generous in contributing to our legal action.
With the filing of this legal suit, the MSNO Pay Equity Committee will post various sample letters that school
nurses may use to request contributions from their local unions and/or friends of school nursing-either private
individuals or organizations which have supported school nurses and school health services.
We will keep you posted as this legal action progresses.
Honor Roll of Contributing Locals
Several local unions have made generous contributions to the MSNO Legal Action Fund, such as Lanesborough, Dighton-Rehoboth, Brookline, Hanover, Westford and Central Berkshire. Ask your local if they have contributed. Show them the information on this website or in your newsletter which describes the Pay Equity lawsuit. Ask them to make a contribution to show their support financially. We are planning an "Honor Roll of Contributing Locals" to show our appreciation for their support for this legal action and for their school nurses.
News Articles Related to School Nurse Pay Equity
The Boston Globe: "School Nurses Seek Pay Parity" by Anne Barnard
Metro/Region Section B Page 4
The Boston Globe: "School Nurses Demand More Pay" by Alexander Reid
Metro/Region South Edition Page 1
You may read these articles by visiting The Boston Globe. Click on archives section and type in search category the word school nurse.
|


 It uses html, css and javascript
Click to view websiteGithub Search is a website application program that enables a user to search for a user in github using their user name. it uses typescript and javascipt '
Click to view websiteMy name is Wambita Sheila Fana. My date of birth is 10-06-2001 .I decided to take a class on programming so as to solve world challenges using technology. Programming has made life easier in many sectors and i want to be a part of the contribution team


Corporate UI - An open source framework controlled by ourselfes
Making Modular HTML based application development possible.
Documentation available at www.github.com/scania/corporate-ui
Code (basic package) are available at www.github.com/scania/corporate-ui
We are learning to create a good User Experience
But we still are working in silos. One project can't re-use code from another project. We even find projects where teams have created the same functionallity in a SINGLE PAGE APPLICATiON.
Corporate UI are an enabler to re-use between teams, projects and companies. It is framework agnostic and are used by .Net teams, JAVA teams as well as Angular and React teams. The main navigation is a good example and it's a cross functional pattern crucial for an overall user experience.
Custom Elements are the future
We now package interaction patterns as . It is a new standard and work exactly as standard HTML elements.
H1 is a standard element
Would be a custom element that the UX designers control
Let's look at an example:
https://scania.github.io/corporate-ui/ux-process/demo.html?brand=scania
Distributed ownership
Packaging HTML, CSS and JS as rock solid interaction patterns or content modules owned and controlled by the UX Designers.
Main navigation are hosted on a cdn network while the patterns are hosted with the UX team.
Let's look at an example:
https://scania.github.io/corporate-ui/template/html-copy-paste/html-copy-paste.html
You can include Analytics links within each element as well.
A common specification
If we could agree on a common Web Component specification for creating and storing components it would be a great start.
Start demanding all advertising agencies to deliver "white labled components" easy to re-use within the group.
Polymer and Polyfills
World Wide Consortsium is setting standards to be implemented in all major browsers.
Chrome and Safari, as Evergreen browsers, are quick to implement new standards.
Polymer are simply using JavaScript code to make old browsers understand the current specification from W3C.
Polymer aims to get rid of itself, as standards are built into the browser.
Deploying a simple Web Component
This presentation can easily be turned into a web component and called upon using a custom element, for example:


HOUSE OF GAMES (not a review) (just ruminations) Copyright 1987<EMAIL_ADDRESS>This film reminds me of SLEUTH, THE CONVERSATION, and BLOW UP. That makes two pluses and a minus, but not in that order. It has an undercurrent of violence and, as the movie progresses, insanity, a current that eddies in your subconscious and only surfaces later.
 In two, it is an elaborate con gone awry. It is clever but flawed. She is not quite believable, the plot is not quite believable, it is one of those plots where everything too neatly fits. And it relies too much on misdirection for its effect--I could see what was coming next not always but too often. So I keep thinking that it is too witty, too slick, to be that good. In fact there is a time in the movie after which they were in such a hurry to wrap it all up that it is plainly forced.
Perhaps it is the suspicion that it is merely an understated piece of feminist propaganda delving into real persona purely by accident that leaves me feeling so ambiguous about this film. Certainly both women in the film are strong successful professionals, and all the men are conniving and criminally deceitful; albeit, there is a certain necessity for this--there are no loose strings, no gratuitous anything. Certainly the men prey on the women (well, on the woman). And certainly she gets even. So it could be femiganda, but the rhetoric is missing, and she is subtly demented always, and she is unusually dense. We figure out what is going on long, long, long before she does. So if it is femiganda, it's an ambivalent strain and I like it anyway.
This one gets 4 out of 5 on my 1 to 5 point order of magnitude scale.
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


The mission of the Coalition for the Barbados Association of Central Florida (CBAOCF), otherwise known as Central Florida Bajans (CFL Bajans), is to encourage networking and to promote kinship among Barbadians (Bajans) living in Central Florida. Our association maintains avenues of communication between Barbadians in Central Florida and their homeland Barbados, and fosters educational, cultural, and business operations, to further the joint interests of Bajans in both regions in an open, friendly environment.
The Coalition for Barbados Association of Central Florida, alias CFL Bajans, support young Bajans in Central Florida pursuing their education through the offering of a scholarship annually.
The scholarship is available to residents of Orange, Osceola, Seminole and Lake County who are descendants of Barbadian parents. Proof of Barbadian heritage must be submitted with the application. Applicants must be a high school graduate. Applicants should also be attending an institution of higher education in the state of Florida.
The scholarship amount is maximum $500 per an applicant yearly. The scholarship is available for a minimum of one academic year. As a condition of the scholarship, ALL funds are paid directly to the educational institution.
The deadline for applications is the second Monday in April each year. Applications should include an essay about the applicant's educational goals, a filled out application form, three personal references, and official transcripts. Recipients will be notified by 1st June.
Please return completed applications to:
The Coalition for the Barbados Association of Central Florida Scholarship Committee
1426 Simpson Road Suite 24
Kissimmee,
FL 34744
Apply
Some of these documents require Adobe Reader. If you do not have Adobe Acrobat please download here
.Coming soon!


The code used in this tutorial is available!
Code can be found at industrial_training repository in gh_pages folder. Use kinetic branch.
Building a Perception Pipeline¶
In this exercise, we will fill in the appropriate pieces of code to build a perception pipeline. The end goal will be to broadcast a transform with the pose information of the object of interest.
Prepare New Workspace:¶
We will create a new catkin workspace, since this exercise does not overlap with the previous PlanNScan exercises.
Disable automatic sourcing of your previous catkin workspace:
gedit ~/.bashrc
comment out (#) the last line, sourcing your
~/catkin_ws/devel/setup.bash
Note
This means you’ll need to manually source the setup file from your new catkin workspace in each new terminal window.
- Close gedit and source ROS into your environment
source /opt/ros/kinetic/setup.bash
Copy the template workspace layout and files:
cp -r ~/industrial_training/exercises/perception_ws ~ cd ~/perception_ws/
Initialize and Build this new workspace
catkin init catkin buildSource the workspace
source ~/perception_ws/devel/setup.bash
- Download the
PointCloud file
and place the file in your home directory (~). - Import the new workspace into your QTCreator IDE:
- In QTCreator: File -> New Project -> Import -> Import ROS Workspace -> ~/perception_ws
Intro (Review Existing Code)¶
Most of the infrastructure for a ros node has already been completed for you; the focus of this exercise is the perception algorithms/pipleline. The CMakelists.txt and package.xml are complete and an executable has been provided. You could run the executable as is, but you would get errors. At this time we will explore the source code that has been provided - browse the provided perception_node.cpp file. The following are highlights of what is included.
- Headers:
- You will have to uncomment the PCL related headers as you go
- int main():
- The
main
function has been provided along with a while loop within the main function
- The
- ROS initialization:
- Both
ros::init
andros::NodeHandle
have been called/initialized. Additionally there is a private nodehandle to use if you need to get parameters from a launch file within the node’s namespace.
- Both
- Set up parameters:
- Currently there are three string parameters included in the example: the world frame, the camera frame and the topic being published by the camera. It would be easy to write up a few
nh.getParam
lines which would read these parameters in from a launch file. If you have the time, you should set this up because there will be many parameters for the pcl methods that would be better adjusted via a launch file than hardcoded.
- Currently there are three string parameters included in the example: the world frame, the camera frame and the topic being published by the camera. It would be easy to write up a few
- Set up publishers:
- Two publishers have been set up to publish ros messages for point clouds. It is often useful to visualize your results when working with image or point cloud processing.
- Listen for PointCloud2 (within while loop):
- Typically one would listen for a ros message using the ros subscribe method with a callback function, as done here. However it is often useful to do this outside of a callback function, so we show an example of listening for a message using
ros::topic::waitForMessage
.
- Typically one would listen for a ros message using the ros subscribe method with a callback function, as done here. However it is often useful to do this outside of a callback function, so we show an example of listening for a message using
- Transform PointCloud2 (within while loop):
- While we could work in the camera frame, things are more understandable/useful if we are looking at the points of a point cloud in an xyz space that makes more sense with our environment. In this case we are transforming the points from the camera frame to a world frame.
- Convert PointCloud2 (ROS to PCL) (within while loop)
- Convert PointCloud2 (PCL to ROS) and publish (within while loop):
- This step is not necessary, but visualizing point cloud processing results is often useful, so conversion back into a ROS type and creating the ROS message for publishing is done for you.
So it seems that a lot has been done! Should be easy to finish up. All you need to do is fill in the middle section.
Primary Task: Filling in the blanks¶
The task of filling in the middle section containing the perception algorithms is an iterative process, so each step has been broken up into its own sub-task.
Implement Voxel Filter¶
Change code:
The first step in most point cloud processing pipelines is the voxel filter. This filter not only helps to downsample your points, but also eliminates any NAN values so that any further filtering or processing is done on real values. See PCL Voxel Filter Tutorial for hints, otherwise you can copy the below code snippet.
Within
perception_node.cpp
, find section/* ======================================== * Fill Code: VOXEL GRID * ========================================*/
Copy and paste the following beneath that banner.
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::PointCloud<pcl::PointXYZ> (cloud)); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_voxel_filtered (new pcl::PointCloud<pcl::PointXYZ> ()); pcl::VoxelGrid<pcl::PointXYZ> voxel_filter; voxel_filter.setInputCloud (cloud_ptr); voxel_filter.setLeafSize (float(0.002), float(0.002), float(0.002)); voxel_filter.filter (*cloud_voxel_filtered);
Update Publisher Within
perception_node.cpp
, find section/* ======================================== * CONVERT POINTCLOUD PCL->ROS * PUBLISH CLOUD * Fill Code: UPDATE AS NECESSARY * ========================================*/
Uncomment
pcl::toROSMsg
, and replace*cloud_ptr
with*cloud_voxel_filtered
After each new update, we’ll be swapping out which point-cloud is published for rviz viewing
Note
If you have the time/patience, I would suggest creating a ros publisher for each type of filter. It is often useful to view the results of multiple filters at once in Rviz and just toggle different clouds.
Compile
catkin build
Viewing Results¶
Run the (currently small) perception pipeline. Note: In rviz change the global frame to kinect_link.
cd ~ roscore rosrun tf2_ros static_transform_publisher 0 0 0 0 0 0 world_frame kinect_link rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points rosrun rviz rviz rosrun lesson_perception perception_node
View results
Within Rviz, add a PointCloud2 Display subscribed to the topic “object_cluster”. What you see will be the results of the voxel filter overlaid on the original point cloud (assuming you have completed exercise 4.2 and saved a new default config or saved a config for that exercise).
When you are done viewing the results, try changing the voxel filter size from 0.002 to 0.100 and view the results again. Reset the filter to 0.002 when done.
- To see the results of this change, use Ctrl+C to kill the perception node, re-build, and re-run the perception node.
Note
You do not need to stop any of the other nodes (rviz, ros, etc).
- When you are satisfied with the voxel filter, use Ctrl+C to stop the perception node.
Implement Pass-through Filters¶
Change code:
The next set of useful filtering to get the region of interest, is a series of pass-through filters. These filters crop your point cloud down to a volume of space (if you use x y and z filter). At this point you should apply a series of pass-through filters, one for each the x, y, and z directions. See PCL Pass-Through Filter Tutorial for hints, or use code below.
Within perception_node.cpp, find section
/* ======================================== * Fill Code: PASSTHROUGH FILTER(S) * ========================================*/
Copy and paste the following beneath that banner.
pcl::PointCloud<pcl::PointXYZ> xf_cloud, yf_cloud, zf_cloud; pcl::PassThrough<pcl::PointXYZ> pass_x; pass_x.setInputCloud(cloud_voxel_filtered); pass_x.setFilterFieldName("x"); pass_x.setFilterLimits(-1.0,1.0); pass_x.filter(xf_cloud); pcl::PointCloud<pcl::PointXYZ>::Ptr xf_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>(xf_cloud)); pcl::PassThrough<pcl::PointXYZ> pass_y; pass_y.setInputCloud(xf_cloud_ptr); pass_y.setFilterFieldName("y"); pass_y.setFilterLimits(-1.0, 1.0); pass_y.filter(yf_cloud); pcl::PointCloud<pcl::PointXYZ>::Ptr yf_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>(yf_cloud)); pcl::PassThrough<pcl::PointXYZ> pass_z; pass_z.setInputCloud(yf_cloud_ptr); pass_z.setFilterFieldName("z"); pass_z.setFilterLimits(-1.0, 1.0); pass_z.filter(zf_cloud);
You can change the filter limit values to see different results.
Find the
pcl::toROSMsg
call where thepc2_cloud
is populated. This is the point cloud that is published to RViz display. Replace the current cloud (*cloud_voxel_filter
) with the final Passthrough Filter result (zf_cloud
).Compile and run
catkin build rosrun lesson_perception perception_node
View results
Within Rviz, compare PointCloud2 displays based on the
/kinect/depth_registered/points
(original camera data) andobject_cluster
(latest processing step) topics. Part of the original point cloud has been “clipped” out of the latest processing result.
Note
Try modifying the X/Y/Z FilterLimits (e.g. +/- 0.5), re-build, and re-run. Observe the effects in rviz. When complete, reset the limite to +/- 1.0.
- When you are satisfied with the pass-through filter results, press Ctrl+C to kill the node. There is no need to close or kill the other terminals/nodes.
Plane Segmentation¶
Change code
This method is one of the most useful for any application where the object is on a flat surface. In order to isolate the objects on a table, you perform a plane fit to the points, which finds the points which comprise the table, and then subtract those points so that you are left with only points corresponding to the object(s) above the table. This is the most complicated PCL method we will be using and it is actually a combination of two: the RANSAC segmentation model, and the extract indices tool. An in depth example can be found on the PCL Plane Model Segmentation Tutorial; otherwise you can copy the below code snippet.
Within perception_node.cpp, find section:
/* ======================================== * Fill Code: PLANE SEGEMENTATION * ========================================*/
Copy and paste the following beneath that banner.
pcl::PointCloud<pcl::PointXYZ>::Ptr cropped_cloud(new pcl::PointCloud<pcl::PointXYZ>(zf_cloud)); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_f (new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_plane (new pcl::PointCloud<pcl::PointXYZ> ()); // Create the segmentation object for the planar model and set all the parameters pcl::SACSegmentation<pcl::PointXYZ> seg; pcl::PointIndices::Ptr inliers (new pcl::PointIndices); pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients); seg.setOptimizeCoefficients (true); seg.setModelType (pcl::SACMODEL_PLANE); seg.setMethodType (pcl::SAC_RANSAC); seg.setMaxIterations (200); seg.setDistanceThreshold (0.004); // Segment the largest planar component from the cropped cloud seg.setInputCloud (cropped_cloud); seg.segment (*inliers, *coefficients); if (inliers->indices.size () == 0) { ROS_WARN_STREAM ("Could not estimate a planar model for the given dataset.") ; //break; }
Once you have the inliers (points which fit the plane model), then you can extract the indices within the pointcloud data structure of the points which make up the plane.
// Extract the planar inliers from the input cloud pcl::ExtractIndices<pcl::PointXYZ> extract; extract.setInputCloud (cropped_cloud); extract.setIndices(inliers); extract.setNegative (false); // Get the points associated with the planar surface extract.filter (*cloud_plane); ROS_INFO_STREAM("PointCloud representing the planar component: " << cloud_plane->points.size () << " data points." );
Then of course you can subtract or filter out these points from the cloud to get only points above the plane.
// Remove the planar inliers, extract the rest extract.setNegative (true); extract.filter (*cloud_f);
Find the
pcl::toROSMsg
call where thepc2_cloud
is populated. This is the point cloud that is published to RViz display. Replace the current cloud (zf_cloud
) with the plane-fit outliers result (*cloud_f
).Compile and run, as in previous steps.
Evaluate Results
Within Rviz, compare PointCloud2 displays based on the
/kinect/depth_registered/points
(original camera data) andobject_cluster
(latest processing step) topics. Only points lying above the table plane remain in the latest processing result.When you are done viewing the results you can go back and change the”setMaxIterations” and “setDistanceThreshold” values to control how tightly the plane-fit classifies data as inliers/outliers, and view the results again. Try using values of
MaxIterations=100
andDistanceThreshold=0.010
When you are satisfied with the plane segmentation results, use Ctrl+C to kill the node. There is no need to close or kill the other terminals/nodes.
Euclidean Cluster Extraction (optional, but recommended)¶
Change code
This method is useful for any application where there are multiple objects. This is also a complicated PCL method. An in depth example can be found on the PCL Euclidean Cluster Extration Tutorial.
Within perception_node.cpp, find section
/* ======================================== * Fill Code: EUCLIDEAN CLUSTER EXTRACTION (OPTIONAL/RECOMMENDED) * ========================================*/
Follow along with the PCL tutorial, insert code in this section.
Copy and paste the following beneath the banner.
// Creating the KdTree object for the search method of the extraction pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>); *cloud_filtered = *cloud_f; tree->setInputCloud (cloud_filtered); std::vector<pcl::PointIndices> cluster_indices; pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec; ec.setClusterTolerance (0.01); // 2cm ec.setMinClusterSize (300); ec.setMaxClusterSize (10000); ec.setSearchMethod (tree); ec.setInputCloud (cloud_filtered); ec.extract (cluster_indices); std::vector<sensor_msgs::PointCloud2::Ptr> pc2_clusters; std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr > clusters; for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_cluster (new pcl::PointCloud<pcl::PointXYZ>); for (std::vector<int>::const_iterator pit = it->indices.begin (); pit != it->indices.end (); pit++) cloud_cluster->points.push_back(cloud_filtered->points[*pit]); cloud_cluster->width = cloud_cluster->points.size (); cloud_cluster->height = 1; cloud_cluster->is_dense = true; std::cout << "Cluster has " << cloud_cluster->points.size() << " points.\n"; clusters.push_back(cloud_cluster); sensor_msgs::PointCloud2::Ptr tempROSMsg(new sensor_msgs::PointCloud2); pcl::toROSMsg(*cloud_cluster, *tempROSMsg); pc2_clusters.push_back(tempROSMsg); }
Find the
pcl::toROSMsg
call where thepc2_cloud
is populated. This is the point cloud that is published to RViz display. Replace the current cloud (*cloud_f
) with the largest cluster (*(clusters.at(0))
).Compile and run, as in previous steps.
View results in rviz. Experiment with
setClusterTolerance
,setMinClusterSize
, andsetMaxClusterSize
parameters, observing their effects in rviz.When you are satisfied with the cluster extraction results, use Ctrl+C to kill the node. There is no need to close or kill the other terminals/nodes.
Create a CropBox Filter¶
Change code
This method is similar to the pass-through filter from Sub-Task 2, but instead of using three pass-through filters in series, you can use one CropBox filter. Documentation on the CropBox filter and necessary header file can be found here.
Within perception_node.cpp, find section
/* ======================================== * Fill Code: CROPBOX (OPTIONAL) * Instead of three passthrough filters, the cropbox filter can be used * The user should choose one or the other method * ========================================*/
This CropBox filter should replace your passthrough filters, you may delete or comment the passthrough filters. There is not PCL tutorial to guide you, only the PCL documentation at the link above. The general setup will be the same (set the output, declare instance of filter, set input, set parameters, and filter).
Set the output cloud:
pcl::PointCloud<pcl::PointXYZ> xyz_filtered_cloud;
Declare instance of filter:
pcl::CropBox<pcl::PointXYZ> crop;
Set input:
crop.setInputCloud(cloud_voxel_filtered);
Set parameters - looking at documentation, CropBox takes an Eigen Vector4f as inputs for max and min values:
Eigen::Vector4f min_point = Eigen::Vector4f(x_filter_min, y_filter_min, z_filter_min, 0); Eigen::Vector4f max_point = Eigen::Vector4f(x_filter_max, y_filter_max, z_filter_max, 0); crop.setMin(min_point); crop.setMax(max_point);
Filter:
crop.filter(xyz_filtered_cloud);
If you delete or comment the passthrough filters and have already written the plane segmentation code, then make sure you update the name of the cloud you are passing into the plane segmentation. Replace zf_cloud with xyz_filtered_cloud:
pcl::PointCloud<pcl::PointXYZ>::Ptr cropped_cloud(new pcl::PointCloud<pcl::PointXYZ>(xyz_filtered_cloud));
Update Publisher within perception_node.cpp, find section
/* ======================================== * CONVERT POINTCLOUD PCL->ROS * PUBLISH CLOUD * Fill Code: UPDATE AS NECESSARY * ========================================*/
Change the “toROSMsg” line to convert from your newly processed cloud into a ROS sensor_msgs::PointCloud2.
Change:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(zf_cloud, *pc2_cloud);
to:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(xyz_filtered_cloud, *pc2_cloud);
Compile
catkin build
Note
If you have the time/patience, I would suggest creating a ros publisher for each type of filter. It is often useful to view the results of multiple filters at once in Rviz and just toggle different clouds.
Viewing Result¶
Open multiple terminals
Either open three more tabs within your terminal CTRL-SHIFT-T or open three more windows CTRL-SHIFT-N. These terminals will run a roscore, the pcl_ros, and Rviz. Below, Terminal 1 corresponds to the terminal you have been working out of.
In terminal 4:
roscore
In terminal 3:
cd ~ rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points
In terminal 2:
rosrun rviz rviz
In terminal 1:
rosrun lesson_perception perception_node
View results
Within Rviz, add a PointCloud2 and subscribe to the topic “object_cluster”. What you see will be the results of the voxel filter overlaid on the original point cloud.
The following image of the CropBox filter in use will closely resemble the Plane Segmentation filter image.
Create a Statistical Outlier Removal¶
Change code
This method does not necessarily add complexity or information to our end result, but it is often useful. A tutorial can be found here.
Within perception_node.cpp, find section
/* ======================================== * Fill Code: STATISTICAL OUTLIER REMOVAL (OPTIONAL) * ========================================*/
The general setup will be the same (set the output, declare instance of filter, set input, set parameters, and filter).
Set the output cloud:
pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud_ptr= clusters.at(0); pcl::PointCloud<pcl::PointXYZ>::Ptr sor_cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
Declare instance of filter:
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
Set input:
sor.setInputCloud (cluster_cloud_ptr);
Set parameters - looking at documentation, CropBox takes an Eigen Vector4f as inputs for max and min values:
sor.setMeanK (50); sor.setStddevMulThresh (1.0);
Filter:
sor.filter (*sor_cloud_filtered);
Update Publisher within perception_node.cpp, find section
/* ======================================== * CONVERT POINTCLOUD PCL->ROS * PUBLISH CLOUD * Fill Code: UPDATE AS NECESSARY * ========================================*/
Change the “toROSMsg” line to convert from your newly processed cloud into a ROS sensor_msgs::PointCloud2.
Change:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(*cloud_f, *pc2_cloud);
to:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(*sor_cloud_filtered, *pc2_cloud);
Compile
catkin build
Note
If you have the time/patience, I would suggest creating a ros publisher for each type of filter. It is often useful to view the results of multiple filters at once in Rviz and just toggle different clouds.
Viewing Result¶
Open multiple terminals
Either open three more tabs within your terminal CTRL-SHIFT-T or open three more windows CTRL-SHIFT-N. These terminals will run a roscore, the pcl_ros, and Rviz. Below, Terminal 1 corresponds to the terminal you have been working out of.
In terminal 4:
roscore
In terminal 3:
cd ~ rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points
In terminal 2:
rosrun rviz rviz
In terminal 1:
rosrun lesson_perception perception_node
View results
Within Rviz, add a PointCloud2 and subscribe to the topic “object_cluster”. What you see will be the results of the voxel filter overlaid on the original point cloud.
Create a Broadcast Transform¶
While this is not a filter method, it is directly related to the final project (the capstone project during the training class), so if you have the time, you should implement this to get a better understanding of how the demo works.
Change/Insert code
Transforms are used to convey relations between two frames of reference or coordinate systems. In our demo, the AR tag detection software pipeline broadcasts a transform based on the position and orientation of the AR tag. A separate node then listens for that transform in order to identify the position/orientation of the box for grasping.
Within perception_node.cpp, find section
/* ======================================== * BROADCAST TRANSFORM (OPTIONAL) * ========================================*/
Follow along with the ROS tutorial. The important modifications to make are within the setting of the position and orientation information (setOrigin( tf::Vector3(msg->x, msg->y, 0.0) ), and setRotation(q) ). Create a transform:
static tf::TransformBroadcaster br; tf::Transform part_transform; //Here in the tf::Vector3(x,y,z) x,y, and z should be calculated based on the pointcloud filtering results part_transform.setOrigin( tf::Vector3(sor_cloud_filtered->at(1).x, sor_cloud_filtered->at(1).y, sor_cloud_filtered->at(1).z) ); tf::Quaternion q; q.setRPY(0, 0, 0); part_transform.setRotation(q);
Remember that when you set the origin or set the rpy, this is where you should use the results from all the filters you’ve applied. At this point the origin is set arbitrarily to the first point within. Broadcast that transform:
br.sendTransform(tf::StampedTransform(part_transform, ros::Time::now(), world_frame, "part"));
Compile
catkin build
Viewing Result¶
Open multiple terminals
Either open three more tabs within your terminal CTRL-SHIFT-T or open three more windows CTRL-SHIFT-N. These terminals will run a roscore, the pcl_ros, and Rviz. Below, Terminal 1 corresponds to the terminal you have been working out of.
In terminal 4:
roscore
In terminal 3: .. code-block:: bash
cd ~ rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points
In terminal 2:
rosrun rviz rviz
In terminal 1:
rosrun lesson_perception perception_node
View results
Within Rviz, add a PointCloud2 and subscribe to the topic “object_cluster”. What you see will be the results of the voxel filter overlaid on the original point cloud. There is no difference in the point cloud from the last image given in the statistical outlier removal.
Create a Polygonal Segmentation¶
This method was included primarily to have something that ties in directly to the demo that you will be programming in session 5. This demo uses AR tag perception, but also collision avoidance. The collision avoidance uses a pointcloud to actively determine where the obstacles are. However, becuase the part itself is within the scene, we must subtract the points that comprise the part in order to remove these points from becoming a collision object (which will then make a grasp impossible due to the object colliding with itself).
Change code
This method is similar to the plane segmentation from Sub-Task 3, but instead of segmenting out a plane, you can segment and remove a prism. Documentation on the PCL Polygonal Segmentation can be found here and here. The goal in using this filter for this demo is to remove the points that correspond to the object of interest (because the collision/path planning requires it). So this particular filter is applied to the entire point cloud, but only after we know the position/orientation of the box.
Within perception_node.cpp, add
#include <tf_conversions/tf_eigen.h>
and find section/* ======================================== * Fill Code: POLYGONAL SEGMENTATION (OPTIONAL) * ========================================*/
Set the input cloud:
pcl::PointCloud<pcl::PointXYZ>::Ptr sensor_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>(cloud)); pcl::PointCloud<pcl::PointXYZ>::Ptr prism_filtered_cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr pick_surface_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
Declare instance of filter:
pcl::ExtractPolygonalPrismData<pcl::PointXYZ> prism;
Set extraction indices:
pcl::ExtractIndices<pcl::PointXYZ> extract_ind;
Set input and output:
prism.setInputCloud(sensor_cloud_ptr); pcl::PointIndices::Ptr pt_inliers (new pcl::PointIndices());
Set parameters - looking at documentation, ExtractPolygonalPrismData takes a polygon pointcloud as input.
// create prism surface double box_length=0.25; double box_width=0.25; pick_surface_cloud_ptr->width = 5; pick_surface_cloud_ptr->height = 1; pick_surface_cloud_ptr->points.resize(5); pick_surface_cloud_ptr->points[0].x = 0.5f*box_length; pick_surface_cloud_ptr->points[0].y = 0.5f*box_width; pick_surface_cloud_ptr->points[0].z = 0; pick_surface_cloud_ptr->points[1].x = -0.5f*box_length; pick_surface_cloud_ptr->points[1].y = 0.5f*box_width; pick_surface_cloud_ptr->points[1].z = 0; pick_surface_cloud_ptr->points[2].x = -0.5f*box_length; pick_surface_cloud_ptr->points[2].y = -0.5f*box_width; pick_surface_cloud_ptr->points[2].z = 0; pick_surface_cloud_ptr->points[3].x = 0.5f*box_length; pick_surface_cloud_ptr->points[3].y = -0.5f*box_width; pick_surface_cloud_ptr->points[3].z = 0; pick_surface_cloud_ptr->points[4].x = 0.5f*box_length; pick_surface_cloud_ptr->points[4].y = 0.5f*box_width; pick_surface_cloud_ptr->points[4].z = 0; Eigen::Affine3d eigen3d; tf::transformTFToEigen(part_transform,eigen3d); pcl::transformPointCloud(*pick_surface_cloud_ptr,*pick_surface_cloud_ptr,Eigen::Affine3f(eigen3d)); prism.setInputPlanarHull( pick_surface_cloud_ptr); prism.setHeightLimits(-10,10);
Segment:
prism.segment(*pt_inliers);
Remember that after you use the segmentation algorithme that you either want to include or exclude the segmented points using an index extraction.
Set input:
extract_ind.setInputCloud(sensor_cloud_ptr); extract_ind.setIndices(pt_inliers);
Set parameters - looking at documentation, ExtractPolygonalPrismData takes a polygon pointcloud as input:
extract_ind.setNegative(true);
Filter:
extract_ind.filter(*prism_filtered_cloud);
Update Publisher within perception_node.cpp, find section
/* ======================================== * CONVERT POINTCLOUD PCL->ROS * PUBLISH CLOUD * Fill Code: UPDATE AS NECESSARY * ========================================*/
Change the “toROSMsg” line to convert from your newly processed cloud into a ROS sensor_msgs::PointCloud2. Hint: If following the PCL tutorial, you will have a vector of sensor_msgs::PointCloud2; you can just publish the first one.
Change:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(*sor_cloud_filtered, *pc2_cloud);
to:
sensor_msgs::PointCloud2::Ptr pc2_cloud (new sensor_msgs::PointCloud2); pcl::toROSMsg(*prism_filtered_cloud, *pc2_cloud);
Note
If you did not create your own publisher to use for the Polygonal Segmentation filter, it will be necessary to move
CONVERT POINTCLOUD PCL->ROS
belowextract_ind.filter(*prism_filtered_cloud);
.Compile
catkin build
Note
If you have the time/patience, I would suggest creating a ros publisher for each type of filter. It is often useful to view the results of multiple filters at once in Rviz and just toggle different clouds.
Viewing Result¶
Open multiple terminals
Either open three more tabs within your terminal CTRL-SHIFT-T or open three more windows CTRL-SHIFT-N. These terminals will run a roscore, the pcl_ros, and Rviz. Below, Terminal 1 corresponds to the terminal you have been working out of.
In terminal 4:
roscore
In terminal 3:
cd ~ rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points
In terminal 2:
rosrun rviz rviz
In terminal 1:
rosrun lesson_perception perception_node
View results
Within Rviz, add a PointCloud2 and subscribe to the topic “object_cluster”. What you see will be the results of the voxel filter overlaid on the original point cloud.
Note
Notice the pointer is pointing to empty area of the table. That is the goal of using the filter this way.
Write a launch file¶
While this is not a filter method, it is useful when using PCL or other perception methods because of the number of parameters used in the different methods. #. Change/Insert code
If you are really awesome and read the Task 1 write-up thoroughly, you will note that it was suggested that you put your parameters in one place.
Within perception_node.cpp, find section
/* * SET UP PARAMETERS (COULD TO BE INPUT FROM LAUNCH FILE/TERMINAL) */Ideally, as the given parameter examples showed, you would declare a parameter of a certain type (std::string frame;), then assign a value for that parameter (frame=”some_name”;). Below is an example of some of the parameters you could have set.
world_frame="camera_depth_optical_frame"; camera_frame="kinect_link"; cloud_topic="camera/depth_registered/points"; voxel_leaf_size=0.001f; x_filter_min=-2.5; x_filter_max=2.5; y_filter_min=-2.5; y_filter_max=2.5; z_filter_min=-2.5; z_filter_max=1.0; plane_max_iter=50; plane_dist_thresh=0.05; cluster_tol=0.01; cluster_min_size=100; cluster_max_size=50000;If you took this step, you will be in great shape to convert what you have into something that can be input from a launch file, or yaml file. You will want to use the “getParam” method as described in this tutorial.
Compile
catkin build
Write launch file.
Using gedit or some other text editor, make a new file (processing_node.launch) and put the following in it.
<launch> <node name="processing_node" pkg="lesson_perception" type="perception_node" output="screen"> <rosparam> cloud_topic: "kinect/depth_registered/points" world_frame: "world_frame" camera_frame: "kinect_link" voxel_leaf_size: 0.001 <!-- mm --> x_filter_min: -2.5 <!-- m --> x_filter_max: 2.5 <!-- m --> y_filter_min: -2.5 <!-- m --> y_filter_max: 2.5 <!-- m --> z_filter_min: -2.5 <!-- m --> z_filter_max: 2.5 <!-- m --> plane_max_iterations: 100 plane_distance_threshold: 0.03 cluster_tolerance: 0.01 cluster_min_size: 250 cluster_max_size: 500000 </rosparam> </node> </launch>
Viewing Results¶
Open multiple terminals
Either open three more tabs within your terminal CTRL-SHIFT-T or open three more windows CTRL-SHIFT-N. These terminals will run a roscore, the pcl_ros, and Rviz. Below, Terminal 1 corresponds to the terminal you have been working out of.
In terminal 4:
roscore
In terminal 3:
cd ~ rosrun pcl_ros pcd_to_pointcloud table.pcd 0.1 _frame_id:=kinect_link cloud_pcd:=kinect/depth_registered/points
In terminal 2:
rosrun rviz rviz -d `rospack find lesson_perception`/launch/lesson_perception.rviz
In terminal 1:
roslaunch lesson_perception processing_node.launch
When you are satisfied with the results, go to each terminal and CTRL-C.
We’re all done! So it’s best to make sure everything is wrapped up and closed.
Open Source Feedback
See something that needs improvement? Please open a pull request on this GitHub page


This is a normal div block
SkewX this block
This is a normal div block
SKewY this block
This is a normal div block
Skew this block


The basic concept behind this technology is the ability to know rather arbitrary aspects of an object's type at runtime, long after the compiler has thrown that information away. Other object oriented systems (for example Objective C) use dynamic type binding in the form of an isa pointer that points to a compiler generated object representing the class of that object. This technology can also referred to as class description, as one only needs to generate a description of the object's class, then ensure the object is bound to that description, hence the name classdesc[8].
In C++, it is not necessary to incur the overhead of an isa pointer, as one can bind an object's type to an overloaded instance of a function call at compile time.
A descriptor is a template function D
template <class T> void D(D_t& t, const classdesc::string& d, T& a);
The D t argument allows for state to be maintained while the descriptor is recursively applied to the data structure. If state is not needed for the descriptor, a ``null'' object should be provided for passing through.
Users can specialise the descriptor to handle different types. The
classdesc descriptor, however does not specialise the descriptor
directly, but rather specialises a functor template:
template <class T> struct access_D { void operator()(D_t&, const string&, T&); };There are two advantages of using functional classes:
operator()
of the appropriate
access class, eg:
template <class T> void pack(classdesc::pack_t& t, const classdesc::string& d, T& a) {classdesc::access_pack<T>()(t,d,a);}but may optionally perform some additional pre/post-processing if sensible for the particular descriptor.
The classdesc package comes with several descriptors already implemented:
struct pack_t { char *data(); const char *data() const; size_t size(); } buf;A call to
pack(buf,""",foo)
pushes a binary representation of
the object foo (regardless of its type) into buf. The inverse
operation is called unpack. Syntactically, we may also use the
<<
operator for the same purpose:
buf << foo << bar; fwrite(buf.data(),buf.size(),1,f); pack_t b1(buf.size()); fread(b1.data(),b1.size(),1,f); b1 >> foo1 >> bar1;This code has made a copy of foo and bar, but with the data going via a disk file.


- genResult() - Method in class com.example.crowdtrials.BinomialExp
-
This generates the result for the experiment
- getAllExperiments(CollectionReference, MyCallback) - Method in class com.example.crowdtrials.Database
-
This method gets the collection Reference of all Experiments
- getAllResults(Experiment, ResultsCallback) - Method in class com.example.crowdtrials.Database
-
This method gets all the outcomes of an experiment from the database
- getAnswers(Experiment, QnA, QuestionsCallback) - Method in class com.example.crowdtrials.Database
-
This methods gets all the answers of a question in a certain experiment from the database
- getBinomialMean(ArrayList<Boolean>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the binomial mean of a binomial experiment
- getbooleanStandardDeviation(ArrayList<Boolean>, float) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the std dev of a binomial experiment
- getContactInfo() - Method in class com.example.crowdtrials.User
-
This returns the contact info of the user
- getCount() - Method in class com.example.crowdtrials.PagerAdapter
-
This method returns the number of tabs
- getDate() - Method in class com.example.crowdtrials.Experiment
-
This returns the date of the experiment
- getDescription() - Method in class com.example.crowdtrials.Experiment
-
This returns the description of the experiment
- getExperimenter() - Method in class com.example.crowdtrials.ResultArr
-
This method returns the current experimenter
- getExperimenters() - Method in class com.example.crowdtrials.Experiment
-
This returns an array list of experimenters
- getfloatMean(ArrayList<Float>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the float mean of an experiment
- getfloatMedian(ArrayList<Float>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the numerical median of an experiment
- getIntegerMean(ArrayList<?>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the integer mean of an experiment
- getIntegerMedian(ArrayList<?>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the numerical median of an experiment
- getIntegerStandardDeviation(ArrayList<?>, float) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the std dev of an experiment
- getItem(int) - Method in class com.example.crowdtrials.PagerAdapter
-
This method returns the associated fragment based on position
- getList(ArrayList<Experiment>) - Method in class com.example.crowdtrials.HomeFragment
-
- getList(ArrayList<Experiment>) - Method in class com.example.crowdtrials.subscriptions
-
- getMedian(ArrayList<Boolean>) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the boolean median of an experiment
- getName() - Method in class com.example.crowdtrials.ContactInfo
-
This returns the name of the user
- getName() - Method in class com.example.crowdtrials.Experiment
-
This methods returns the name of the current experiment
- getNameNumType(String, String) - Static method in class com.example.crowdtrials.CreateUserFragment
-
- getOwner() - Method in class com.example.crowdtrials.Experiment
-
This returns the owner of the experiment
- getPhoneNumber() - Method in class com.example.crowdtrials.ContactInfo
-
This returns the phone number of the user
- getQuestions(Experiment, QuestionsCallback) - Method in class com.example.crowdtrials.Database
-
This methods gets all the questions in a certain experiment from the database
- getQuestionsAnswers() - Method in class com.example.crowdtrials.Experiment
-
This returns the object representing questions and answers of the current experiment
- getRegion() - Method in class com.example.crowdtrials.Experiment
-
This returns the region of the experiment
- getResults() - Method in class com.example.crowdtrials.Experiment
-
This returns the results of the experiment
- getSingleDatabaseInstance() - Static method in class com.example.crowdtrials.Database
-
This class returns the static instance of the database.
- getSingleExperiment(MyCallback, String) - Method in class com.example.crowdtrials.Database
-
This method handles a single experiment.
- getStandardDeviation(ArrayList<Float>, float) - Method in class com.example.crowdtrials.Statistics
-
This method calculates the std dev of an experiment
- getSubscribers() - Method in class com.example.crowdtrials.Experiment
-
This returns the hash set of subscribers to the current experiment
- getType() - Method in class com.example.crowdtrials.Experiment
-
This method returns the type of the experiment
- getView(int, View, ViewGroup) - Method in class com.example.crowdtrials.ExperimentList
-
This method returns the View of a certain experiment
- getView(int, View, ViewGroup) - Method in class com.example.crowdtrials.QList
-
This method returns the view based on the user selection
- getView(int, View, ViewGroup) - Method in class com.example.crowdtrials.QuestionsList
-
This method is used to return a View based on user selection
- getView(int, View, ViewGroup) - Method in class com.example.crowdtrials.ResultList
-
- goToProfileActivity(boolean, User) - Method in class com.example.crowdtrials.MainActivity
-


13 Movies About Women Spies, From 'Atomic Blonde' To 'Charlie's Angels'
With a new era of Charlie's Angels upon us, lady spies who are well-dressed and impeccably well-trained are back in the pop culture spotlight. Ella Balinska, Naomi Scott, and Kirsten Stewart form the new team, with writer/director Elizabeth Banks as one of (yes, one of) their Bosleys. And while the new Angels flick doesn't hit theaters until Nov. 15, there are a lot of other fun movies about women spies streaming now.
Frankly, though, there aren't enough. Despite how much fun it is to watch women do espionage, of list of 13 films below, three of the movies are from the same franchise and a few of them are centered around a man, but prominently feature a woman spy. Come on, Hollywood. Give us some more lady spy movies with lady spies actually in the lead role!
For now, the movies below will have to do. And at least there is some variety amongst them. Some are dark. Some are comedic. Some are old and some are new. Some feature one of the most famous Hollywood couples of all time falling in love while trying to kill each other. (OK, only one of the movies features exactly that, but, you know.)
1. 'Atomic Blonde'
Universal Pictures on YouTube
We start off with one of the darkest and most violent movies on the list, Atomic Blonde. The 2017 film is based on the graphic novel The Coldest City, and stars Charlize Theron as Lorraine Broughton, an MI6 agent working in Berlin during the Cold War.
For rent or purchase on Amazon Prime.
2. 'Charlie's Angels' (2000)
Movieclips Classic Trailers on YouTube
On a much lighter note, there's the Charlie's Angels film adaptation from 2000 starring Lucy Liu, Cameron Diaz, and Drew Barrymore as a group of Angels who rock a lot of costumes, and, possibly, even more hair flips.
Streaming on Netflix. For rent or purchase on Amazon Prime.
3. 'Charlies Angels: Full Throttle'
Movieclips Classic Trailers on YouTube
Of course, there's also the 2003 Charlie's Angels sequel. More costumes changes! More explosions!  A 100% increase in the amount of Bernie Mac!
Streaming on Netflix. For rent or purchase on Amazon Prime.
4. 'Charlie's Angels' (2019)
Sony Pictures Entertainment on YouTube
OK, yes, there is a third Charlie's Angels movie on this list. But, hey, women spy movies are few and far between, so sequels it is. The latest installment hits theaters this month and shows how the Townsend agency has expanded internationally since the '00s.
In theaters November 15.
5. 'Get Smart'
Movieclips Classic Trailers on YouTube
Like Charlie's Angels, Get Smart is based on a classic TV show — the spy comedy that aired from 1965 to 1970. The film is based around Steve Carell's character, Maxwell Smart, but Anne Hathaway also stars as his sometimes partner, Agent 99.
Streaming on Netflix. For rent or purchase on Amazon Prime.
6. 'Mission: Impossible — Rogue Nation'
Movieclips Trailers on YouTube
Of course, the Mission: Impossible movie franchise is centered on Ethan Hunt (Tom Cruise). But, Mission: Impossible: Rogue Nation introduces Ilsa Faust (Rebecca Ferguson), an MI6 agent who more than holds her own when it comes to him and his globe-trotting adventures.
For rent or purchase on Amazon Prime.
7. 'Mission: Impossible — Fallout'
Paramount Pictures on YouTube
Unlike some Mission: Impossible women of previous movies who had been more disposable, Ilsa's storyline actually continued, bringing her into 2018's Mission: Impossible — Fallout.
Streaming on Hulu. For rent or purchase on Amazon Prime.
8. 'Mr. & Mrs. Smith'
Movieclips Classic Trailers on YouTube
Mr. and Mrs. Smith are assassins, not spies exactly, but there's some spying elements to their jobs... at least before they find out that they've been ordered to kill each other. Anyway, if you are looking for a spy movie, this definitely has a similar vibe.
For rent or purchase on Amazon Prime.
9. 'North By Northwest'
North By Northwest - Trailer on YouTube
Cary Grant running from a crop duster is probably the first thing that comes to mind when you think of Alfred Hitchcock's North by Northwest, but Eva Marie Saint's character, Eve Kendall, means that this film totally counts as one about a woman spy.
For rent or purchase on Amazon Prime.
10. 'Red Sparrow'
20th Century Fox on YouTube
Jennifer Lawrence stars as a Russian woman who becomes a spy — or, "sparrow" — meant to retrieve information from a CIA agent using seduction.
Streaming on HBO Now and HBO Go. For rent or purchase on Amazon Prime.
11. 'Salt'
Sony Pictures Entertainment on YouTube
In Salt, Angelina Jolie plays a spy... or does she? Really, whether she's a spy or not is the question that fuels the entire plot.
For rent or purchase on Amazon Prime.
12. 'Spy'
20th Century Fox on YouTube
Spy stars Melissa McCarthy as an CIA employee who goes from assisting a spy played by Jude Law to actually going into the field herself. She desn't totally have all those classic spy moves (like, sliding over a car hood) down — but she's somehow still capable of saving the world.
For rent or purchase on Amazon Prime.
13. 'The Spy Who Dumped Me'
Lionsgate Movies on YouTube
Mila Kunis and Kate McKinnon are besties in The Spy Who Dumped Me, in which a breakup leads to an international misadventure involving double-crosses, car chases, and a USB drive hidden in a pretty unusual place.
Streaming on Hulu and Amazon Prime.
Enjoy your spy movie viewing, and please, don't try any of their moves at home. Well, other than the Charlie's Angels dance moves. Those are acceptable.


-
[1]A. Rizvi and A. Jamatia, “NIT-Agartala-NLP-Team at EXIST 2022: Sexism Identification in Social Networks,” in Proceedings of the Iberian Languages Evaluation Forum (IberLEF 2022), A Coruña, Spain, 2022, vol. Vol-3202.
@inproceedings{rizvi2020,
title = {NIT-Agartala-NLP-Team at EXIST 2022: Sexism Identification in Social Networks},
author = {Rizvi, Amaan and Jamatia, Anupam},
booktitle = {Proceedings of the Iberian Languages Evaluation Forum (IberLEF 2022)},
month = sep,
year = {2022},
address = {A Coruña, Spain},
publisher = {CEUR Workshop Proceedings (CEUR-WS.org) Free Open-Access Proceedings for Computer Science Workshops},
volume = {Vol-3202},
pages = {},
url = {http://ceur-ws.org/Vol-3202/},
doi = {urn:nbn:de:0074-3202-9}
}
-
[2]“NIT-Agartala-NLP-Team at SemEval-2020 Task 8: Building Multimodal Classifiers to tackle Internet Humor,” in Proceedings of the Fourteen International Workshop on Semantic Evaluation, 2020.
@inproceedings{SwamyEASemEval2020task8,
author = {},
title = {NIT-Agartala-NLP-Team at SemEval-2020 Task 8: Building Multimodal Classifiers to tackle Internet Humor},
booktitle = {Proceedings of the Fourteen International Workshop on Semantic Evaluation},
series = {SemEval '20},
month = jun,
year = {2020},
address = {},
publisher = {Association for Computational Linguistics},
pages = {}
}
-
[3]S. D. Swamy, A. Jamatia, and B. Gambäck, “Studying Generalisability across Abusive Language Detection Datasets,” in Proceedings of the 23rd Conference on Computational Natural Language Learning (CoNLL), Hong Kong, China, 2019, pp. 940–950.
@inproceedings{swamyEA2019-000,
title = {Studying Generalisability across Abusive Language Detection Datasets},
author = {Swamy, Steve Durairaj and Jamatia, Anupam and Gamb{\"a}ck, Bj{\"o}rn},
booktitle = {Proceedings of the 23rd Conference on Computational Natural Language Learning (CoNLL)},
month = nov,
year = {2019},
address = {Hong Kong, China},
publisher = {Association for Computational Linguistics},
pages = {940--950},
url = {https://www.aclweb.org/anthology/K19-1088},
doi = {10.18653/v1/K19-1088}
}
-
[4]V. K. Pendyala, S. Sinha, S. Prakash, S. Reddy, and A. Jamatia, “Validation of Facts Against Textual Sources,” in Natural Language Processing in a Deep Learning World, Varna, Bulgaria, 2019, pp. 895–903.
@inproceedings{PendyalaEA2019-000,
author = {Pendyala, Vamsi Krishna and Sinha, Simran and Prakash, Satya and Reddy, Shriya and Jamatia, Anupam},
title = {Validation of Facts Against Textual Sources},
booktitle = {Natural Language Processing in a Deep Learning World},
month = sep,
year = {2019},
address = {Varna, Bulgaria},
publisher = {INCOMA Ltd.},
pages = {895--903},
url = {https://doi.org/10.26615/978-954-452-056-4_104}
}
-
[5]“NIT_Agartala_NLP_Team at SemEval-2019 Task 6:An Ensemble Approach to Identifying and Categorizing Offensive Language in Twitter Social Media Corpora,” in Proceedings of the Thirteenth International Workshop on Semantic Evaluation, Minneapolis, Minnesota, USA, 2019, pp. 692–699.
@inproceedings{SwamyEASemEval2019task6-000,
author = {},
title = {NIT_Agartala_NLP_Team at SemEval-2019 Task 6:An Ensemble Approach to Identifying and Categorizing Offensive Language in Twitter Social Media Corpora},
booktitle = {Proceedings of the Thirteenth International Workshop on Semantic Evaluation},
series = {SemEval '19},
month = jun,
year = {2019},
address = {Minneapolis, Minnesota, USA},
publisher = {Association for Computational Linguistics},
pages = {692--699}
}
-
[6]A. Jamatia, U. Baidya, S. Paul, D. Swaraj, and S. Dey, “Rating Prediction of Tourist Destinations Based on Supervised Machine Learning Algorithms,” in Proceedings of the International Conference on Computational Intelligence in Data Mining (In Press), 2018.
@inproceedings{jamatiaEA2018a-000,
title = {Rating Prediction of Tourist Destinations Based on Supervised Machine Learning Algorithms},
author = {Jamatia, Anupam and Baidya, Udayan and Paul, Sonalika and Swaraj, Debbarma and Dey, Subham},
booktitle = {Proceedings of the International Conference on Computational Intelligence in Data Mining (In Press)},
year = {2018}
}
-
[7]T. Maheshwari et al., “A Societal Sentiment Analysis: Predicting the Values and Ethics of Individuals by Analysing Social Media Content,” in Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 1, 2017, pp. 731–741.
@inproceedings{MaheshwariEA2017-000,
author = {Maheshwari, Tushar and Reganti, Aishwarya N. and Gupta, Samiksha and Jamatia, Anupam and Kumar, Upendra and Gamb{\"a}ck, Bj{\"o}rn and Das, Amitava},
title = {A Societal Sentiment Analysis: Predicting the Values and Ethics of Individuals by Analysing Social Media Content},
booktitle = {Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 1},
publisher = {Association for Computational Linguistics},
pages = {731--741},
year = {2017}
}
-
[8]A. Jamatia, B. Gambäck, and A. Das, “Collecting and Annotating Indian Social Media Code-Mixed Corpora,” in CICLing (2), 2016, vol. 9624, pp. 406–417.
@inproceedings{jamatiaEA2018-000,
author = {Jamatia, Anupam and Gamb{\"{a}}ck, Bj{\"{o}}rn and Das, Amitava},
title = {Collecting and Annotating Indian Social Media Code-Mixed Corpora},
booktitle = {CICLing {(2)}},
series = {Lecture Notes in Computer Science},
volume = {9624},
pages = {406--417},
publisher = {Springer},
year = {2016}
}
-
[9]A. Jamatia and A. Das, “Task Report: Tool Contest on POS Tagging for Code-mixed Indian Social Media (Facebook, Twitter, and Whatsapp) Text@ ICON 2016.,’” in the proceeding of ICON 2016, 2016.
@inproceedings{Jamatia_Das2016-000,
title = {Task Report: Tool Contest on POS Tagging for Code-mixed Indian Social Media (Facebook, Twitter, and Whatsapp) Text@ ICON 2016.”},
author = {Jamatia, Anupam and Das, Amitava},
journal = {the proceeding of ICON 2016},
year = {2016}
}
-
[10]A. Jamatia, B. Gambäck, and A. Das, “Part-of-Speech Tagging for Code-Mixed English-Hindi Twitter and Facebook Chat Messages,” in Proceedings of the International Conference Recent Advances in Natural Language Processing, 2015, pp. 239–248.
@inproceedings{jamatiaEA2015-000,
author = {Jamatia, Anupam and Gamb{\"a}ck, Bj{\"o}rn and Das, Amitava},
title = {Part-of-Speech Tagging for Code-Mixed English-Hindi Twitter and Facebook Chat Messages},
booktitle = {Proceedings of the International Conference Recent Advances in Natural Language Processing},
year = {2015},
publisher = {INCOMA Ltd. Shoumen, Bulgaria},
pages = {239--248}
}
-
[11]D. Rudrapal, A. Jamatia, K. Chakma, A. Das, and B. Gambäck, “Sentence Boundary Detection for Social Media Text,” in Proceedings of the 12th International Conference on Natural Language Processing (ICON), 2015, pp. 254–260.
@inproceedings{RudrapalEA2015-000,
author = {Rudrapal, Dwijen and Jamatia, Anupam and Chakma, Kunal and Das, Amitava and Gamb{\"a}ck, Bj{\"o}rn},
title = {Sentence Boundary Detection for Social Media Text},
booktitle = {Proceedings of the 12th International Conference on Natural Language Processing (ICON)},
year = {2015},
publisher = {NLP Association of India},
pages = {254--260}
}
-
[12]A. Jamatia and A. Das, “Part-of-speech tagging system for indian social media text on twitter,” in Social-India 2014, First Workshop on Language Technologies for Indian Social Media Text, at the Eleventh International Conference on Natural Language Processing (ICON-2014), 2014, pp. 21–28.
@inproceedings{Jamatia_Das2014-000,
title = {Part-of-speech tagging system for indian social media text on twitter},
author = {Jamatia, Anupam and Das, Amitava},
booktitle = {Social-India 2014, First Workshop on Language Technologies for Indian Social Media Text, at the Eleventh International Conference on Natural Language Processing (ICON-2014)},
pages = {21--28},
year = {2014}
}


Which diet requires the most energy
Folivore
Frugivore
Omnivore
Which diet is the lowest in quality
Folivore
Frugivore
Omnivore
Which diet is the highest in quality
Folivore
Frugivore
Omnivore
Which diet requires the most skills
Folivore
Frugivore
Omnivore
Submit
Woohoo!
Now you can take your primate picture at photobooth.
START OVER


Note: user IDs are randomly assigned on each reload. When clients disconnect without saying goodbye, there is a ~15 second grace period during which they are considered to be online.


All of our professional features are built right in, so you can start creating amazing music for free!
Play a multi-colour grid of amazing sounds anywhere
Layer beats, melodies, and vocals from our sounds library
Sound like a pro with our easy-to-use interface
Our huge library is constantly expanded with new sounds


This script allows you to apply an XSL-Transformation to an XML-File, without manually entering the XSL definition into the XML-File.
With new browser generations this script works only when used on a webserver. Using it locally from your harddrive will NOT work, since the browser will not allow it for security reasons (there is workaround for Chrome though).


Protecting personal data and respecting your right to privacy is a matter of course. Data are deemed personal if they can be attributed to a specific person. This includes information such as names, addresses, e-mail addresses, and telephone numbers.
I collect, process, and uses personal data only in accordance with applicable legal regulations (e.g. the German Federal Data Protection Act [Bundesdatenschutzgesetz]). This is in particular the case when you use means of this website to get in touch with me.
The transmission of personal data between your computer and our server always takes place in encrypted form via so-called “Secure Socket Layer” transmission, also known as SSL. Thanks to SSL, information cannot be read by unauthorized persons during transmission.
You may request information regarding saved data about yourself and free of charge at any time and may exercise your right to correct such data.
New legal requirements, or technological development may require changes to this privacy policy. It will in such case be modified accordingly. The most current version can always be found on this Web site.


Plan Your Post-Quarentine Escape
Camply believes that the best days are ahead of us. We are excited to launch or service in the near future. Tell us what your escape from the city will look like and receive priority access when reservations open.
Campgrounds are currently closed to help stop the spread of COVID-19. We'll notify you when outdoor activities like camping resume, so we can all get out and explore safely.


Examples
These buttons require no extra markup and are designed with semantics in mind. Show examples.
Create a Facebook button
On the parent element, add a class of "zocial" and a class for the button you need, in this case "facebook". Be sure to wrap your button text in a span tag as shown:
<button class="zocial facebook">Sign in with Facebook</button>
Create a LinkedIn button
The parent element can be any element, this time we're using  to create a LinkedIn button:
Sign in with LinkedIn
Resize the button
Change the size of the button by adjusting the font-size of the parent element. The default font-size is 16px.
<button class="zocial skype" style="font-size: 22px">Skype Me</button>
Show the icon version of the button
Simply add a class of "icon".
Follow me on Twitter