Medical Entity Recognition is a crucial step towards efficient medical texts analysis. For this project, the medical entities which might be one single term or a sequence of terms should be one of the following categories - Disease, Symptoms, Drugs, Test, Treatment. Social media sites, such as Twitter, can be a rich source of many kinds of information, including health-related information. Accurate detection of entities such as diseases, drugs, and symptoms could be used for biosurveillance (e.g. monitoring of flu) and identification of adverse drug events. This task becomes difficult on tweets as they are known to be full of slang and doesn't guarantee enough context for information extraction.
Traditional MERs are used on formal medical texts, such as published medical studies, research articles, clinical reports, discharge summaries and Electronic Health Records. In this project, we will evaluate the performance of various existing MERs on Twitter data and try to improve its performance on tweets.
Named Entity Recognition can automatically scan entire articles and reveal which are the major people, organizations, and places discussed in them. Knowing the relevant tags for each article help in automatically categorizing the articles in defined hierarchies and enable smooth content discovery. Medical Entity Recognition (MER) aims to identify and classify the portions of text which span medical entity mentions. The entity types are fixed and known in advance. In this project the entity types to be recognized are Drug, Disease, Symptom, Treatment and Test. Traditional MERs are used on formal medical texts, such as published medical studies, research articles, clinical reports, discharge summaries and Electronic Health Records. In this project, we will evaluate the performance of various existing MERs on Twitter data and try to improve its performance on tweets.
CSIRO Adverse Drug Event Corpus (Cadec) is a rich annotated corpus of medical forum posts on patient reported Adverse Drug Events (ADEs). This corpus is useful for those studies in the area of information extraction, or more generically text mining, from social media to detect possible adverse drug reactions from direct patient reports. This dataset has 1250 files of text and its annotations.
This dataset aims to provide a comparable corpus of texts from PubMed and Twitter that can be used to study drug reports from these two sources of information, allowing researchers in the area of pharmacovigilance using natural language processing (NLP) to perform experiments to better understand the similarities and differences between drug reports in Twitter and PubMed. This dataset contains 521 tweets.
This dataset consists of tweet annotations with medical entities. We focuses on three types of entities: Disease (T047 in UMLS), Symptoms (T184), and Pharmacologic Substance (T121).
Downloaded Twitter dump of first 10 days of November from here in json format. The size of dump was more than 100 GB. We had filtered out 121MB from 180 GB of data, which has 4,42,203 samples.
In CADEC dataset, data is in the form of 'brat-flavored standoff' with a .txt and a .ann extension files which should be converted to usabel CSV format. We created a script which reduces the 'brat-flavored standoff' to a text format and labelling every word from .ann file. This text file is then converted to a CSV.
This dataset also follows 'brat-flavored standoff' format that contains tweet ids of the tweets. To convert the dataset into a CSV format, we created a script similar to one above.
This dataset is of .linejson format, with tweet IDs as keys, and ‘type’ contains type of annotation that a word belongs to, and an attribute of json type named ‘location’ has two keys ‘start’ and ‘end’, which tells us where in the text that word is starting and where it is ending. The data has lot of discrepancies where pointer are very different from the actual occurences of the words. This had to be rectified manually, file by file basis. This resulted in addition of 370 tweets to the dataset as many of the tweets were either deleted or were from the accounts which got deactivated. Since we had a script to get CSV from 'brat-flavored standoff', we converted the data into the required format to use the script.
We discarded all the tweets that were not of medical domain. After filtering all the data we removed emojis, links, mentions and retweets from tweets, just to make data more clear, and then we annotated them to create a CSV so that, it will be ready to use by models. We had filtered out 121MB from 180 GB of data, which has 4,42,203 samples.
A bidirectional LSTM is a combination of two LSTMs — one runs forward from “right to left” and one runs backward from “left to right”. So, the whole context information can be captured using bi-directional LSTM unlike the traditional LSTM model. Model configurations are mentioned below:
We combined the bidirectional LSTM network and a CRF network to form a BI-LSTM-CRF network . In addition to the past input features and sentence level tag information that is used in a LSTM-CRF model, a BI-LSTM-CRF model can use the future input features also. The extra features can boost tagging accuracy. Model configurations are mentioned below:
ELMo has a great understanding of the language because it’s trained on a massive dataset, ELMo embeddings are trained on the 1 Billion Word Benchmark. the training is called bidirectional language model (biLM) that can learn from the past and predict the next word in a sequence of words like a sentence. We used this model and it performed very well with the new twitter dataset with the following parameters:
The result of the model trained and tested on CADEC dataset is as follows:
On training this model on CADEC dataset, accuracy of the model is approximately 88%. Reason behind high accuracy on twitter dataset and low for CADEC is less data and different tags present in CADEC dataset as compared to Twitter dataset i.e. Twitter dataset is missing some tags present in CADEC. The result of the model trained and tested on twitter dataset is as follows:
The result of the model trained and tested on Twitter dataset is as follows:


Mingshan Wang
Project Portfolio
I am a forth year undergraduate of Computer Science & Engineering at UC San Diego. My research focus is on Artificial Intelligence. I am also an admitted B.S/M.S student at UC San Diego.
Projects
- Battle Blocks
- Description: A game developed from scratch with a group of 7 people for CSE 125: Software System Design and Implementation. It is a 3D multiple-user game. The idea is to build your own battle block using all the weapons you could purchase and fight with other 3 users, at the same time collect the money in the battle field. The player with the least of number of deaths wins the game.
- Images:
- More information: CSE 125 Group 1 Webpage
- Machine Learning Research Projects
- ...


Classes and interfaces
Doctrine_Hydrator¶
Its purpose is to populate object graphs.
« More »
Doctrine_Hydrator_Abstract¶
Doctrine_Hydrator_Abstract
« More »
Doctrine_Hydrator_ArrayDriver¶
Builds result sets in to the object graph using php arrays
« More »
Doctrine_Hydrator_ArrayHierarchyDriver¶
Builds result sets in to the hierarchy graph using php arrays
« More »
Doctrine_Hydrator_ArrayShallowDriver¶
Extended version of Doctrine_Hydrator_ScalarDriver, passes its _gatherRowData function a value of false for $aliasPrefix in order to cause it to generate the sorts of array keys one would see in a HYDRATE_ARRAY type return.
« More »
Doctrine_Hydrator_Exception¶
Doctrine_Hydrator_Exception
« More »
Doctrine_Hydrator_Graph¶
Abstract base class for child drivers to hydrate the object graph in to
various data types.
« More »
Doctrine_Hydrator_NoneDriver¶
Get results directly and skip hydration.


Unhappy with your website?
We create beautiful
and fast web services
Story, emotion
and purpose
We help transform your ideas into real world applications that will outperform your toughest competition and help you achieve your strategic goals in short period of time.
Want us to contact you?
We offer high
demand services
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis a metus ac nulla consequat aliquet id quis turpis.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis a metus ac nulla consequat aliquet id quis turpis.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis a metus ac nulla consequat aliquet id quis turpis.
Good design means
good business
Full stack application
Smart home dashboard
UX/UI design
Onboard application
Mobile application
Booking system
Front End application
Juice product homepage
Meet the team
We are chilled
and a laidback team
Lorem ipsum dolor sit amet, consectetur adipiscing elit.


--- layout: default title: "about" description: "" ---
Hi I'm Desiree, welcome to my blog. Currently, I am working as a data scientist as I complete my undergrad degree in physics. I enjoy learning about quantum computing, spending time with my cat and figure skating. Feel free to contact me at [desireevogtlee at gmail].


Classic pizza, cheese and mushroom/beef, french fries and cola are added when choosing combo.
3 pieces of grilled chicken with the special food code sauce, served with french fries and cola.
Quarter/half/full Turkey, served with smashed potatoes and classic salad.
Beef/chicken burger sandwich, served with french fries and cola.
Pasta, with parsley and tomatoes, served with smashed potatoes and corn.


{% extends 'layout.html' %} {% block pageTitle %} {{ jobRole.name }} appraisal - NHS.UK prototype kit {% endblock %} {% block beforeContent %} {{ breadcrumb({ items: [ { href: "/dashboard", text: "Dashboard" }, { href: "/assessments", text: "Appraisals" }, { href: "/assessments/" + assessment.id, text: jobRole.name }] }) }} {% endblock %} {% block content %}
You're being appraised against the role of " + jobRole.name + ". You can submit evidence until " + assessment.date | formatDate + ".
" }) }}


Rating: * * out of * * * *
Rated R for strong language, violence, some sexuality and drug content.
Running Time: 92 minutes
Starring: Matthew Lillaird, Keri Russell, Michael Vartan, Randall Bartikoff, Dana Delaney.
In 1998 a movie was made that was promised theatrical release. That movie was 'The Curve' it was however never released in theatres like it was promised, and I see why. 'The Curve' is a movie that was well-written and directed by Dan Rosen who also wrote the clever 'The Last Supper. The cast was well assembled with lots of talent. Matthew Lillaird who was annoying but funny in 1996's classic 'Scream', Keri Russell who plays in TV's popular 'Felicity' are all good in a film that is so wrapped up in it's plot it forgets to include us in having fun, and takes itself way to seriously.
Matthew Lillaird and Michael Vartan play college roomates Tim and Chris, whose friend Ran (Randall Bartikoff) girlfriend found out she was pregnant, not taking it too well he gets drunk and fights with his roomates. A new law has come out that in the US if your roomate commits suicide than you get a perfect 4.0 grade average for having to go through the whole 'trauma'. They do so, but when they learn some surprising things about Ran's death Chris doesn't know who to trust or who to turn to. The ending finale has about 25 twists all rolled into one, that pretty much saves the film from being a washout.
The film had many flaw in it, including it's plot. It was completely unbelieveable and the previews I saw for this, they made it look like a horror movie or even a thriller. It's not in any way intense or scary, mysterious and overly dramatic it is. What got me the most was the final 5 twists in a row, that you had to keep up with or you were lost. Some didn't like the ending which I can see, one twist is good, 2 twists is fine but 5 in a row is annoying.
The acting was incredibly above normal, Keri Russell gives the best performance as Chris's girlfriend, Matthew Lillaird gives a good performance too as does Michael Vartan. Dana Delaney who plays the college's counselor who learns a few surprising things about everyone. The movie does prove a good point as in Who Can You Trust? Because everyone in this movie is not whom they seem at first, by the end it's like your watching a totally different movie. At 92 minutes the film does seem to go on and on and on, but finally starts to speed up towards the end.
So if your in for a fun time at the movies, 'The Curve' is there, but only if there is nothing else. The final twists and the acting keep it afloat, it's sometimes clever and sometimes boring, sometimes good and sometimes bad. A misleading movie to which it is not a horror flick. 'The Curve' is not a bad movie however it's not all that great either. Reviewed By Brandon Herring October 2, 1999. Brandon Herring Movie Review Heaven (http://www.geocities.com/hollywood/movie/3160/moviereviewheaven.html
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


Commander of the Border Patrol, Gregory Athebaldt:
I'm Gregory Athebaldt, commander of the border patrol of Aden kingdom.
Currently, the forces of both countries are massing near the border. Although the border is open, the tension between the countries has resurfaced. You'd better watch your back, my friend!
Open the door.
Close the door.
Quest


Your task in this exercise is to show the behavior for Linked list deletion. You must delete the element in the current position.
To move an element, click on it (to highlight it), then click on the element position in the node where you want it to go. To set the "return" value, click on the element position in the node you want to return (to highlight it), then click on the return value box to set it to the highlighted value. You can make a node's "next" pointer point to "null" by first clicking the pointer for the node and then clicking the "makenull" button. To change the target of labels, such as "curr" and "tail", click on the label (to highlight it), then click on the node you want it to point to.
If "curr" points to the same node as "tail", the default list is a correct answer. Otherwise, the first step could be to remember the value of the "curr" node.
Copy value to "curr" from the node following 'curr'.
If "curr" points to the node proceding tail, sets the "curr" node to point to "null". Label "tail" should point to the current node. Otherwise, the "curr" node should point to the following node of the node it used to point to.


{% extends 'elections/base.html' %} {% block title %} {% if request.resolver_match.url_name == 'index' %} {{ block.super }} {% elif request.resolver_match.url_name == 'my-bills' %} My Bills - {{ block.super }} {% elif request.resolver_match.url_name == 'my-bill-votes' %} My Votes - {{ block.super }} {% endif %} {% endblock %} {% block content %} {% for bill in bill_list %} {% if forloop.counter0|divisibleby:4 %}
Amendment to the Constitution
{% endif %} {% if bill.state != bill.OPEN %}{{ bill.get_state_display }}
{% endif %}No bills up for vote right now.
{% elif request.resolver_match.url_name == 'my-bills' %}Looks like you haven't proposed any bills yet.
{% elif request.resolver_match.url_name == 'my-bill-votes' %}Looks like you haven't voted on any bills yet.
{% endif %} {% endfor %} {% endblock %} {% load static %} {% block javascript %} {% if user.is_authenticated %} {% endif %} {% endblock %}


{% extends "main.html" %}
{% block title %}Whoops...{% endblock %}
{% block moreJS %}{% endblock %}
{% block moreCSS %}{% endblock %}
{% block content %}
You have found something that isn't there...
Maybe better visit the home page ;-)
{% endblock %}


| ziplss {mgcv} | R Documentation |
The ziplss
family implements a zero inflated Poisson model in which one linear predictor
controls the probability of presence and the other controls the mean given presence.
Useable only with gam
, the linear predictors are specified via a list of formulae.
Should be used with care: simply having a large number of zeroes is not an indication of zero inflation.
Requires integer count data.
ziplss(link=list("identity","identity"))
link |
two item list specifying the link - currently only identity links are possible, as parameterization is directly in terms of log of Poisson response and logit of probability of presence. |
Used with gam
to fit 2 stage zero inflated Poisson models. gam
is called with
a list containing 2 formulae, the first specifies the response on the left hand side and the structure of the linear predictor for the Poisson parameter on the right hand side. The second is one sided, specifying the linear predictor for the probability of presence on the right hand side.
The fitted values for this family will be a two column matrix. The first column is the log of the Poisson parameter,
and the second column is the complimentary log log of probability of presnece..
Predictions using predict.gam
will also produce 2 column matrices for type
"link"
and "response"
.
The null deviance computed for this model assumes that a single probability of presence and a single Poisson parameter are estimated.
For data with large areas of covariate space over which the response is zero it may be advisable to use low order penalties to
avoid problems. For 1D smooths uses e.g. s(x,m=1)
and for isotropic smooths use Duchon.spline
s in place of thin plaste terms with order 1 penalties, e.g s(x,z,m=c(1,.5))
— such smooths penalize towards constants, thereby avoiding extreme estimates when the data are uninformative.
An object inheriting from class general.family
.
Zero inflated models are often over-used. Having lots of zeroes in the data does not in itself imply zero inflation. Having too many zeroes *given the model mean* may imply zero inflation.
Simon N. Wood<EMAIL_ADDRESS>Wood, S.N., N. Pya and B. Saefken (2016), Smoothing parameter and model selection for general smooth models. Journal of the American Statistical Association 111, 1548-1575 http://dx.doi.org/10.1080/01621459.2016.1180986
library(mgcv) ## simulate some data... f0 <- function(x) 2 * sin(pi * x); f1 <- function(x) exp(2 * x) f2 <- function(x) 0.2 * x^11 * (10 * (1 - x))^6 + 10 * (10 * x)^3 * (1 - x)^10 n <- 500;set.seed(5) x0 <- runif(n); x1 <- runif(n) x2 <- runif(n); x3 <- runif(n) ## Simulate probability of potential presence... eta1 <- f0(x0) + f1(x1) - 3 p <- binomial()$linkinv(eta1) y <- as.numeric(runif(n)<p) ## 1 for presence, 0 for absence ## Simulate y given potentially present (not exactly model fitted!)... ind <- y>0 eta2 <- f2(x2[ind])/3 y[ind] <- rpois(exp(eta2),exp(eta2)) ## Fit ZIP model... b <- gam(list(y~s(x2)+s(x3),~s(x0)+s(x1)),family=ziplss()) b$outer.info ## check convergence summary(b) plot(b,pages=1)


Violent man attacked woman with hoover and held her head underwater
He even threatened her with an iron
by Matt JarramA violent offender has been jailed for three years after he carried out a catalogue of abuse.
Reuben Commons, 22, of no fixed address, was jailed for three years on Tuesday, November 11.
This follows a trial at Nottingham Crown Court.
He was convicted of actual bodily harm after repeatedly punching a woman's body and hitting her with a metal hoover attachment.
Her head was also held under bath water.
She was also previously strangled and was threatened with an iron.
The sentencing relates to an incident on April 2 where Commons assaulted a woman in the early hours at a house in Bestwood.
Police said after a period of evading the police, Commons was subsequently located and arrested on October 11, 2018.
He was subsequently charged with this offence in February 2019.
Detective Constable Michael Powis, from Nottinghamshire Police, said: "Although this attack was particularly gratuitous, the strong sentence reflects the fact that domestic violence cases are taken seriously both by the police and the courts.
"The sentence will hopefully give confidence to those who are experiencing domestic violence to seek help from the police."


The Loft is placed at the top of the building. Its Equipped with a complete kitchen, dining room, two beds and a living room.
Equipped with a complete kitchen and dining room.
Plus a livingroom with a corner couch with TV.
The Loft is big enough for cooking as well as socializing. Sheets and towels are changed daily by the hotel staff.
Our goal is to make your stay as pleasant as possible.


Back to Index
Email Verification
Email
You must enable email verification first.
Submit
Synopsis
Result
Phone Verification
Phone
You must enable phone verification first.
Submit
Synopsis
Result


Instructions
- Begin with a single MARC file from OneClick.
- Select this file using the Choose File button and then press the Run Report button.
- Wait. Once the file is processed you will see a screen displaying the results.
- Download the MARC output file and save it in a convenient location.
- That's it.
Let me know if you have any questions. sean


In Pictures: Kathryn Thomas jets off on 5 star honeymoon with husband Padraig and daughter Ellie 09 Dec 2019, 14:00 by Mikie O'Loughlin


Photo: Ohio State Fan’s Sign For Joe Burrow Is Going Viral
by Andrew McCartyOn Saturday morning, ESPN’s College GameDay broadcast from Columbus ahead of a huge match-up between Ohio State and Penn State.
Each and every Saturday, fans bring their best signs to College GameDay. Every now and then one sign takes the cake and goes viral on social media.
Today, that sign came from an Ohio State fan who had a message for former Buckeyes quarterback Joe Burrow. Ohio State fans are looking forward to seeing Burrow in the College Football Playoff – assuming both teams make it there.
Except the fan used the wrong stadium – they pictured the Atlanta Falcons stadium instead of the New Orleans Saints stadium.
Oops.
Burrow transferred to LSU after losing the starting job to Justin Fields at Ohio State. It’s worked out for both quarterbacks, who are in the Heisman Trophy conversation for College Football Playoff caliber teams.
LSU and Ohio State are both the favorites to win their respective conference. If that happens they will be the No. 1 and No. 2 teams in the country and wouldn’t face each other until the title game.
Will we see Burrow against his former team in the College Football Playoff national title game?


Figure 39: Johann van der Schijff. Centre Piece, 1993.
[ Return to: Part 1 - 2.Scanning for a New Era ]
The space capsule with two large, organic-like antennas and massive rocket boosters, throws up an ambivalent image: at once technologically advanced and archaic. The capsule is presented propped up on a pile of rocks. This form of presentation is meant to suggest that the capsule had been recovered from the veld, and at some time formed the 'centre piece' of some religious order. [Figure 39]
The title refers not only to its appearance but also to its role in the conceptual cybernetic web of the body of work. It is the command centre from which information is sent. Because of the central role satellites play in modern information and communication networks, it can be applied metaphorically to divine instruction. Thus the main sources for this work are space exploration and the symbolism attached to the circle. [Figure 40]
Figure 40: The Space Scuttle. (Reuters 1988)
A TV monitor transmitting banal imagery of space shuttles taking-off and water rushing down ravines is integrated into one rocket booster. The sounds accompanying the imagery create the impression that some of the satellite's functions are still operating. Together with the fan blowing cold air out of the other booster, the sound track gives the work an eerie, brooding presence. [Figure 41]
Figure 41: Johann van der Schijff. Centre Piece, 1993.
Mild-steel sheet metal; enamel paint;
found mechanical parts;TV monitor;
floodlight; sandstone.
H: 1800 mm W: 3600 mm L: 5400 mm
The imagery of the antennas and boosters throws up a paradox. Although it draws from high-tech space hardware, the way in which it is constructed, is handmade.
The scoops of the rockets remind one of the fishing nets used in Africa, [Figure 42] while the antennas lean towards African sculpture as appropriated by Alberto Giacometti in his surrealist phase. [Figure 43]
Figure 42: An African fish trap. (Art Gallery Staff 1989: 70)
Figure 43: Alberto Giacometti. Man, 1929.
(Read 1987: 143)
According to Jung, the 'visionary rumour' that arose in the last years of World War II, of flying bodies that became known as 'flying saucers' or UFOs, can be explained as a projection of a psychic content of wholeness that has at all times been symbolised by the circle. The 'visionary rumour' is an attempt by the unconscious collective psyche to heal the split in our apocalyptic age by means of the symbol of the circle. The 'winged disk' is one of the most widespread of ancient symbols representing matter in a state of sublimation and transfiguration. The interaction implicit in dualism is also represented by the famous symbol of the Chinese Yang-Yin. [Figure 44]
Figure 44: Heaven. The Chinese symbol of heaven. The hole in the middle signifies the path to transcendence.
(Cirlot 1990: xvi)
The title of the sculpture derived from symbolism attached to moving from the circumference to the centre. According to Cirlot (1971: 40) such an action is 'equivalent to moving from the exterior to the interior, from form to contemplation, from multiplicity to unity, from space to spacelessness, from time to timelessness'. In all symbols expressive of the mystic centre the intention is to reveal and teach human beings to identify themselves with the supreme principle of the universe. Hindu doctrine declares that God resides in the centre. In diagrams of the cosmos, the central space is always reserved for the Creator. Among the Chinese, the infinite being is symbolised as a point of light with concentric circles spreading outwards from it.
Figure 45: Johann van der Schijff. Centre Piece, 1993.
Figure 46: Johann van der Schijff. Drawing no. 1, Centre Piece, 1993.
Figure 47: Johann van der Schijff. Drawing no. 2, Centre Piece, 1993.
Figure 48: Johann van der Schijff. Drawing no. 3, Centre Piece, 1993.
Figure 49: Johann van der Schijff. Drawing no. 4, Centre Piece, 1993.
Figure 50: Johann van der Schijff. Drawing no. 5, Centre Piece, 1993.
Figure 51: Johann van der Schijff. Drawing no. 6, Centre Piece, 1993.
Figure 52: Johann van der Schijff. Drawing no. 7, Centre Piece, 1993.
Figure 53: Johann van der Schijff. Drawing no. 8, Centre Piece, 1993.
Figure 54: Johann van der Schijff. Drawing no. 9, Centre Piece, 1993.


The purpose of this project was to analyze how weather changes as you get closer to the equator. To accompolish this analysis, we first pulled data from open weather map API to assemble a Data Set of over 500 cities. After assembling the Data Set, we used matplotlib to plot various aspects of weather vs latitude. Factors we looked at include: temperature, cloudiness, humidity, and wind speed. This site includes the source data and visualizations created for the analysis, as well as their explanations and descriptions


Registration
E-mail
Password
Full name
Location
Phone number
Move marker to your location
Sign up
Notification
{{notification}}
Ok


You can also use this issuer by making Trust Token requests against "https://trusttoken.dev/tt/(k,i,r)":
Key Commitments:
Issuance (select a value for the public and private parameters):
Redemption:
Send Redemption Record:
Key Commitments:
https://trusttoken.dev/tt/k
Issuance (select a value for the public and private parameters):
fetch("https://trusttoken.dev/tt/i?public={0,1,2}&private={0,1}", {trustToken: {type: 'token-request'}}).then(...);
Redemption:
fetch("https://trusttoken.dev/tt/r", {trustToken: {type: 'token-redemption', issuer: 'https://trusttoken.dev'}}).then(...);
Send Redemption Record:
fetch(..., {trustToken: {type: 'send-redemption-record', issuers: ['https://trusttoken.dev']}}).then(...);


Work
-
TSM.GG
Team Solomid's News Site
I'm currently a web developer at Team Solomid, an Instructional Assistant for COGS 187A, and an SD Hacks organizer for 2017.
I'm currently looking for Software Engineering and Frontend Engineering internships for Summer 2017.
Team Solomid's News Site


Streams Support in the Node.js Driver
The MongoDB driver has extensive Stream support for cursors as well as for GridFS. In essence the following aspects of the driver supports Node 0.10.x or higher style streams.
find
The cursor returned from the find method is a Readable stream.aggregate
The cursor returned from the aggregate is a Readable stream.parallelCollectionScan
Returns an array of one or more cursors that all are Readable streams.GridStore.prototype.stream
Returns a stream that implements Duplex allowing for writing data in w mode and reading data in r mode.
We will look at a simple example for supported stream starting with the find command.
Find Cursor as a Stream
Let’s examine a simple query using find and how to use it as a node.js stream.
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
var col = db.collection('streams');
// Insert a single document
col.insert([{a:1}, {a:1}, {a:1}], function(err, r) {
assert.equal(null, err);
assert.equal(3, r.result.n);
// Get the results using a find stream
var cursor = col.find({});
cursor.on('data', function(doc) {
console.dir(doc);
});
cursor.once('end', function() {
db.close();
});
});
});
A very simple and straight forward stream of documents. For each document the cursor will emit the data event and when the cursor has been exhausted it will issue the end event. To transform the data you can pipe the data from this stream into another stream. We will not show that here but there are a wide variety of stream based libraries available on NPM.
The stream is in object mode meaning it will emit the actual document instances. If you
for some reason need this to be a different output you can use the stream
function on the cursor to supply a transformation method that will be called for each
document before it’s emitted. Let’s take a look at a simple example that
uses JSON.stringify to convert each document to it’s JSON string
representation.
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
var col = db.collection('streams');
// Insert a single document
col.insert([{a:1}, {a:1}, {a:1}], function(err, r) {
assert.equal(null, err);
assert.equal(3, r.result.n);
// Get the results using a find stream
var cursor = col.find({}).stream({
transform: function(doc) {
return JSON.stringify(doc);
}
});
cursor.on('data', function(doc) {
console.log(doc);
});
cursor.once('end', function() {
db.close();
});
});
});
That wraps up the behaviors of the Readable stream for the find method. Next let’s look at the aggregate command.
Aggregation Cursor as a Stream
The aggregation cursor behaves very much like the find cursor. It’s main difference is that it does not support a transform method. Let’s have a look at a simple example.
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
var col = db.collection('streams');
// Insert a single document
col.insert([{a:1}, {a:1}, {a:1}], function(err, r) {
assert.equal(null, err);
assert.equal(3, r.result.n);
// Get the results using a find stream
var cursor = col.aggregate([${match: {}}]);
cursor.on('data', function(doc) {
console.log(doc);
});
cursor.once('end', function() {
db.close();
});
});
});
As one can see the cursor behaves in the exact same way as the cursor that is returned when invoking the find method. Let’s have a look at the parallelCollectionScan method that is a bit of a special case as it returns one or more cursors.
The parallelCollectionScan method
The parallelCollectionScan method is a specialized method that allows for parallel reading of a collection using multiple cursors. This method is only available when connecting to a single server or replicaset topology. Let’s look at an example.
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
var docs = [];
// Insert some documents
for(var i = 0; i < 1000; i++) docs.push({a:i});
// Get the collection
var col = db.collection('parallelCollectionScan');
// Insert 1000 documents in a batch
coll.insert(docs, function(err, result) {
var results = [];
// Execute parallelCollectionScan command
col.parallelCollectionScan({
numCursors:3
}, function(err, cursors) {
assert.equal(null, err);
assert.ok(cursors != null);
assert.ok(cursors.length > 0);
for(var i = 0; i < cursors.length; i++) {
// Documents from the cursor
cursors[i].on('data', function(doc) {
results.push(doc);
});
// The end signal for each cursor
cursors[i].once('end', function() {
numCursors = numCursors - 1;
// No more cursors let's ensure we got all results
if(numCursors == 0) {
assert.equal(docs.length, results.length);
db.close();
}
});
}
});
});
});
In this example we use each cursor as a stream and when all cursors have emitted the end event we check that the number of inserted documents match the number of emitted documents. Each cursor returned from the parallelCollectionScan method is functionally equivalent to the cursors returned from the the find method.
GridStore the Read/Write Stream
Until now all the methods we have covered are Readable meaning they can only provide a readable stream. GridStore implements the Duplex stream meaning it can not only be read as a Stream (say stream a mp3 straight from your GridFS collections) but also be written to (say upload a file directly via http into GridFS). Let’s look at the simple example of streaming a GridStore file and then one where we use an incoming stream to write to GridFS.
Streaming a GridFS file to disk
Streaming a GridStore file to disk is fairly simple. The example below reads in a pdf file and saves it in GridFS. It then creates a GridStore instance pointing to the newly saved pdf file and passes the stream to a file write stream using pipe.
var MongoClient = require('mongodb').MongoClient
, GridStore = require('mongoddb').GridStore
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
// Set up gridStore
var gs = new GridStore(db, 'manual.pdf', 'w');
var filename = './test/functional/data/manual.pdf';
var outputFilename = './test/functional/data/manual_out.pdf';
// Write the a file to it (put your own here)
gs.writeFile(filename, function(err, result) {
// Open a readable gridStore
gs = new GridStore(db, 'manual.pdf', 'r');
// Create a file write stream
var fileStream = fs.createWriteStream(outputFilename);
fileStream.on('close', function(err) {
// Read the temp file and compare
var compareData = fs.readFileSync(outputFilename);
var originalData = fs.readFileSync(filename);
// Validate that the data is the same
assert.deepEqual(originalData, compareData);
db.close();
})
// Pipe out the data to disk
var pipeResult = gs.stream().pipe(fileStream);
});
});
Streaming a File into GridFS
In the case of writing a file to GridFS using streams we do the reverse piping the file read stream into a our gridstore instance.
var MongoClient = require('mongodb').MongoClient
, GridStore = require('mongoddb').GridStore
, ObjectID = require('mongoddb').ObjectID;
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
// Set up gridStore
var stream = new GridStore(db, 'manual.pdf', 'w').stream();
// File we want to write to GridFS
var filename = './test/functional/data/manual.pdf';
// Create a file reader stream to an object
var fileStream = fs.createReadStream(filename);
// Finish up once the file has been all read
stream.on("end", function(err) {
// Just read the content and compare to the raw binary
GridStore.read(client, "test_stream_write", function(err, gridData) {
var fileData = fs.readFileSync(filename);
assert.equal(fileData.toString('hex'), gridData.toString('hex'));
client.close();
})
});
// Pipe it through to the gridStore
fileStream.pipe(stream);
});
This concludes the support for Node.js 0.10.x streams in the MongoDB driver.
comments powered by Disqus


Grow's development server comes with the ability to add tools that expand the development experience.
Tools
Many tools can be found and installed using NPM by looking for the grow-tool-
prefix.
Some examples include:
- grow-tool-analytics-highlight Highlights automatically tracked analytics that use data attributes (ex: autotrack).
- grow-tool-grid Overlays a responsive css grid for checking content alignment.
- grow-tool-image-swap Allows dragging new image files to temporarily replace images to preview without changing the source.
Installing
For basic installations:
Add the tool to the project's package.json
dev dependencies:
"devDependencies": { "grow-tool-analytics-highlight": "^0.0.5" }
Run grow install
to install the new dependency.
Update the podspec.yaml
to enable the new tool:
# Setting for specific deployments. deployments: staging: # Other settings... ui: tools: - kind: image-swap # Settings for dev server. ui: tools: - kind: analytics-highlight options: prefix: event
CDNs and Local Sources
Tools can also be hosted on third party systems such as CDNs or within the project:
ui: tools: - kind: analytics-highlight paths: script: https://some.cdn.com/grow/ui/tool.js style: https://some.cdn.com/grow/ui/tool.css
Custom Tools
There is an basic example project for creating custom tools: grow-tool-template.


Feeds
You can subscribe to these feeds or use them to plot data on a map, e.g. with the Cloudmade Webmaps Lite API or the Google Maps API.
Sourcecode
Find the source code that drives this site on github.com.
Points API
If you're using the Guardian API and want to know what we know about article locations, feel free to make a call to points.php to ask us.
Parameters
- article
- Guardian article id.
- articles
- Optional comma-separated list of Guardian article ids.
- woe
- Optional comma-separated list of Yahoo Where-on-Earth (WOE) ids (from Yahoo GeoPlanet, as used by Flickr, Upcoming, FireEagle, etc.)
- woes
- Optional comma-separated list of Yahoo Where-on-Earth (WOE) ids
- format
- html (default), json, js (jsonp, for use with a callback), rss (with georss), php (serialized PHP)
- count
- Optional number of collections to return, default: 10
- offset
- Optional starting offset in list of collections, default: 0
Examples
- JS with callback for most recent geocodes
- JS with callback for article 338373510
- JS with callback for woe id 338373510 (Nashville)
Responses
JS with Callback
addExistingPlaces( [ { "article_id": 338373510, "woe_id": 2457170, "latitude": "36.167", "longitude": "-86.778", "place_id": "SiVf._mbBZnlkED4", "place_path": "\/United+States\/Tennessee\/Nashville", "place_type": "locality", "place_name": "Nashville, Tennessee, United States", "created": "2009-03-04 12:24:01", "article": { "id": 338373510, "title": "Liveblogging the Obama-McCain town hall debate", "published": "2008-10-08", "url": "http:\/\/www.guardian.co.uk\/world\/oliverburkemanblog\/2008\/oct\/07\/uselections2008.barackobama1" } } ] )


Welcome to Tifragment
Wrong Username or Password
Logout Success
Please Sign In
Remember me
Sign In
Reset


More than a quarter ‘do not know their bank card Pin by heart’
Some 74% of women say they can remember their Pin, compared with just 68% of men, a survey found.
More than a quarter of people do not know their bank card’s Pin by heart, a survey has found.
Some 29% of people do not know their Pin off the top of their head, financial services provider Sanlam UK found.
Around three-quarters (74%) of women claim to have their Pin memorised, compared with just over two-thirds (68%) of men.
The increasing popularity of contactless payments enables people to “tap and go” when buying lower value items without entering a Pin.
But those attempting contactless payments are sometimes still required to enter their Pin as an extra security measure to prove the purchase is legitimate.
Younger adults in particular were found to struggle to remember their Pin, with more than half (57%) of under-35s saying they found it hard to recall.
By contrast, only around a fifth (21%) of over-55s had difficulty remembering their Pin, according to the research, which formed part of Sanlam UK’s What’s Your Number? report.
People in London were the least likely in the survey to remember their Pin, with 51% not knowing it.
This was more than twice the proportion as those who lived in the North West of England (18%), Scotland (22%) and Yorkshire and the Humber (23%).
When it came to their finances, their Pin was not the only number shrouded in uncertainty, the survey of more than 1,000 people found.
When asked to identify which numbers are most important to remember, only in five (20%) think it is important to know their current account balance and 9% their savings account balance.
Only one in 20 (5%) of people think the contents of their pension pot are important numbers to know.
The same proportion, at 5%, also selected their lottery number as one of the most important numbers to know in their life.
Jonathan Polin, chief executive Sanlam UK, said: “Very quickly, we’ve become used to tapping our card for small items.
“While the convenience of this is clear, the temptation to spend is greater than it once was, and all too often this is at the expense of tomorrow.
“Our research has shown that it is easy to get distracted by immediate priories and fail to engage with long-term financial planning. But that’s dangerous.
“Knowing the number you need and want to achieve is not only desirable, it’s essential to making a plan that gives you the retirement you want.
“The key is in having a good grasp of your current state of finances and a clear idea of where you want to end up in order to understand the gap in between.”
Here are the percentages of people who do not know their bank card Pin off by heart:
– East Midlands – 23%
– East/East Anglia – 24%
– London – 51%
– North East – 26%
– North West – 18%
– Scotland – 22%
– South East – 27%
– South West – 30%
– Wales – 29%
– West Midlands – 28%
– Yorkshire and the Humber – 23%
– Northern Ireland survey sample size was too small for inclusion


806.655.7732<EMAIL_ADDRESS>Come Experience
Life At The Depot!Thank you for visiting life at the depot.com. Conveniently located The Depot offers the unique opportunity to be within walking distance to businesses, residential living, grocery shopping, restaurants, and West Texas A&M University (GO BUFFS!!!).
The Depot has been designed from the beginning to bring people, business and life together in a way never before seen in Canyon by combining residential living with office/retail all in one great location. Residents also benefit from nearby WT, United Supermarket, Feldman's Wrongway Diner and more. Future residents please call or stop in to view our one bedroom, two bedroom, or loft apartment offerings.
Ammenities include:
Please contact us today to reserve your spot in what is sure to become Canyon's most talked about new development.
The Depot Loft Apartments, located at the heart of The Depot immerses it's residents among a wide array of retail spaces and restaurants.
Residents enjoy 24/7/365 parking surveillance, granite counter tops, stainless appliances, gas stove, personal one car garage, along with great views overlooking beautifully-landscaped courtyards and all the excitement at The Depot.
The impressive features don’t stop there! Browse our galleries or come on by and experience one-of-a-kind loft living at The Depot Loft Apartments.
We are now pre-leasing office and Retail space. For businesses please click on the link (below) to see floor plans of our offerings. We have convenient well laid out floor plans including private back offices and single car garage for extra storage or those nasty winter days. Our location provides built in clientele within walking distance, ample parking and easy access.
Please contact us today to reserve your spot in what is sure to become Canyon’s most talked about new development.
  1901 N. 2nd
     Canyon, TX 79015
<PHONE_NUMBER>
  info@lifeatthedepot.com


Hello and Welcome! Im Max Collado, since i was a child ive had interest's in computers and programming, always thinking how cool and exciting it could be. When I was in college for premed I felt like i was being pushed into a life that I didnt choose, later that year I picked up programming and toyed around with it, after a few months I began loving it! Even though what I was doing was very simple I told myself i wanted to get involved with it more in the future, I picked up start up course to teach me the braud spectrem of programming languages and switched my degree to CS and so far its a completely different journey and im loving it!
Here is the road to my inner thought and imagination, below you can find the link to my Github where all my current/finished projects are located.
Visit Github PortfolioFeel free to email me, give me feedback on some of my projects or just stop by and say hello!


{% extends 'base.html'%} {% block content %}
No profile picture
{{user.bio}}
{{user.author| capitalize}} has no bio


This is the official AtomicDEX mobile beta program channel -
Android: https://play.google.com/store/apps/details?id=com.komodoplatform.atomicdex - iOS: https://testflight.apple.com/join/c2mOLEoC - Please use https://github.com/KomodoPlatform/atomicdex/issues for bug reports and feature requests. For critical security bug reports please do send us your encrypted (https://pgp.mit.edu/pks/lookup?op=get&search=0x379287998EE6CF47) report to<EMAIL_ADDRESS>and allow up to 24h for reply. For atomicDEX API (mm2) related issue reports or feature requests please do use https://github.com/KomodoPlatform/atomicDEX-API/issues
Between 16-Dec-19 12:00 AM and 17-Dec-19 12:00 AM
bliss-coma16-Dec-19 12:37 AM
Hi!
Trying to exchange 0.007 BTC for HUSH.. Why is $50 not a large enough amount to trade?
BoBot-BUY KMD16-Dec-19 12:58 AM
I think you have to minus the fee, so try.0069 when you type amount of BTC you want to swap for HUSH
ca33316-Dec-19 01:53 AM
AtomicDEX mobile 0.2.9 is available on playstore and testflight.
changelog:
Fixes:
update ZEC
update VRSC
please note: VRSC connectivity will be back in 12 - 24h. The Verus Team is upgrading SPV network.
3
cipi16-Dec-19 03:12 AM
@bliss-coma minimum trade amount is 0.00777
gcharang16-Dec-19 07:17 AM
Why is $50 not a large enough amount to trade?
it is about the ratio (transaction fees)/(trade amount)
we use dynamic transaction fees for bitcoin
if you had to pay a $2 transaction fee, the swap is most likely not worth it for many people
_PureHate_16-Dec-19 08:42 AM
@ca333 i just install new version still can't load vrsc(edited)
zec ok
Acura16-Dec-19 08:58 AM
@_PureHate_ did you read the info from Ca333 about vrsc ?
_PureHate_16-Dec-19 09:02 AM
no
i read only he fix after i post
then i update my application and still cant load vrsc
oh right now i READ THANKS
all the best @atomicDex.
1
figgy13216-Dec-19 12:10 PM
Before I update to latest beta, I have a stuck swap from a good few hours ago, that when I click Unlock Funds button, I just get a red bar with ")})) } will this be affected? It was KMD > ZEC
TonyL16-Dec-19 12:12 PM
Have you already updated to the latest patch?
If you're on latest app version, have funds stuck in swap and it'll not "unstuck" in a few hours please DM me or @gcharang with mobile logs application attached and swap uuid
figgy13216-Dec-19 12:17 PM
I haven't updated to latest patch yet - do that then wait? Then send logs & uuid after some time?
TonyL16-Dec-19 12:23 PM
Yes, please update first (but use update button, do not uninstall app or swap data will be wiped). Then try to wait and/or use funds unlock button
1
figgy13216-Dec-19 12:34 PM
@TonyL updated, added the coins, went to the failed swap, hit unlock, worked immediately - received the ZEC :) atomicdex is pretty awesome!
1
1
TonyL16-Dec-19 12:37 PM
Perfect, so as soon as your AtomicDEX got updated ZEC params it performed unlock transaction. Glad that it worked!
1
Markus16-Dec-19 01:00 PM
@TonyL almost every time i open up atomicdex i always have to activate some coins over and over. Why do they never stay activated?
Or is this a issue u guys are aware of?
Acura16-Dec-19 01:01 PM
Maybe try to deinstall and then reinstall
Markus16-Dec-19 01:01 PM
did that before
does not change anything
now i got this issue that VRSC does not load and it keeps spinning forever
Cryptoon16-Dec-19 01:08 PM
I think vrsc is hardforking tomorrow or something like that
maybe the spv servers that are used arent updated yet
SHossain16-Dec-19 01:24 PM
VRSC hardfork happened
at block 800200
Gordon Komodo16-Dec-19 01:27 PM
this is what ca333 posted just a few lines above "please note: VRSC connectivity will be back in 12 - 24h. The Verus Team is upgrading SPV network."(edited)
Can someone from Komodo Team could DM me I have questions about listing new coin
Cryptoon16-Dec-19 06:44 PM
@PTYX
@siu - Chainmakers
PTYX16-Dec-19 06:50 PM
Will do
CoinKing8816-Dec-19 07:07 PM
That DEX sound when swapping is funny and very wrong at the same time
fazer16-Dec-19 09:27 PM
Seems like atomic dex restore by entering password is that uploaded and public.... so security issue... who know password can export seed can hack your atomic dex account(edited)
By using 2 android devices was my password suggested on second device....
and that password is not regular word....
please fix
fazer16-Dec-19 09:46 PM
Nobody cares ????
Android earned dict contains and was synced atomic dex used password and was uploaded to all my android devices..... great work
Acura16-Dec-19 09:48 PM
You have to give the people here some time to look - nobody is online here for 24/7
mrlynch16-Dec-19 09:48 PM
@ca333
TonyL16-Dec-19 10:07 PM
@fazer am I understand correct that you saved your encryption password into Google password saver? If yes - please recreate wallet and send funds to new one. This time do not save password by this tool.
fazer16-Dec-19 10:07 PM
no im not using that tool
it was public list of earned words
last time i was there someone suggested me to to reinstall app to let some issues go
so i cleared all data, uninstalled, installed again
by using new new password
today i was doing reinstall again
and my password is synced already on multiple devices
in dict earned list
this password im using is unique so it was caused 100% by atomicdex
@TonyL
ca33316-Dec-19 10:11 PM
@fazer please provide a more clear explanation on what had happened. i.e. how can we reproduce your issue?
We can assure you that AtomicDEX does NOT store any user-data online - no personal data such as seed or password is shared anywhere.(edited)
Oszy16-Dec-19 10:12 PM
his phone saved it and synced it to google. not an atomicdex issue..
fazer16-Dec-19 10:12 PM
@Oszy no
Oszy16-Dec-19 10:12 PM
well atomicdex does not offer you any passwords
only your phone can do that
fazer16-Dec-19 10:13 PM
@Oszy OMG
did you catch coinomi seed leak on desktop app ? you have same issue
but with password
android -> settings -> lang -> keyboard -> my style of writing(that have 99% of people enabled) -> my words -> here is saved atomic dex password
if people have enabled also sync as 99% of people have it is publiched cross all devices
now anyone that takes your atomic and logout and restore seed will this password be suggested...
so just relogin to existing account and write down this password without any pressure your atomic dex pin and password your acc is open.
TonyL16-Dec-19 10:19 PM
You saved your encryption password into google account and synced for all devices using your google account. Why is it AtomicDEX issue?
You can sign in to apps and sites on different devices using passwords saved to your Google Account when you: Sign in to Android Sign in to Chrome with sync turned on
Save passwords to your Go
fazer16-Dec-19 10:20 PM
@TonyL NO
TonyL16-Dec-19 10:20 PM
Password saving is optional
Can you reproduce it with new wallet?
fazer16-Dec-19 10:20 PM
@TonyL android -> settings -> lang -> keyboard -> my style of writing(that have 99% of people enabled) -> my words -> here is saved atomic dex password
try to find pass here. or enable feature and your password will be here
@TonyL yes, i can, it was done by newly installed app and latest version and new password(edited)
TonyL16-Dec-19 10:22 PM
I see, please let me check
fazer16-Dec-19 10:23 PM
@TonyL if you try to understand what coinomi desktop app bug was this is probably same.(edited)
TonyL16-Dec-19 10:32 PM
Could you please DM me your phone model and android version?
fazer16-Dec-19 10:36 PM
@TonyL this is not based on device or version, i have multiple tested and same issue
TonyL16-Dec-19 10:43 PM
I've tested on multiple devices and there is no such menu as a my style or writing or my words. Moreover even if you have such functionality on your phone it's OS related thing - with such features enabled on your side your phone should keylog/store all your input
By description it has nothing similar with coinomi issue - we not sending encryption password anywhere (they sent it to google spellchecker API)
@Oszy could you please check on your phone too?
ca33316-Dec-19 10:56 PM
Same - tested on 3 android devices with AtomicDEX mobile although we knew from the code that no data is leaked.


Configuring Downstream Caches
Standard Configuration
Note: This feature is currently experimental. Options and configuration described here are subject to change in future releases. Please subscribe to the announcements mailing list to keep yourself informed of updates to this feature.
By default PageSpeed serves HTML files with Cache-Control: no-cache,
max-age=0
so that changes to the HTML and its resources are sent
fresh on each request. The HTML can be cached, however, if you:
- Set up a
PURGE
handler in your cache. - Tell PageSpeed the url for the
PURGE
handler. - Have the cache set the
PS-CapabilityList
header so PageSpeed will emit HTML that can be sent to any browser. - Have the cache occasionally pass through requests to the origin with
the
PS-ShouldBeacon
header set.
For example, if you're running a cache on port 80 that reverse proxies to
your site on port 8080, then you'd need to tell PageSpeed to send
its PURGE
requests to port 80:
- Apache:
ModPagespeedDownstreamCachePurgeLocationPrefix http://localhost:80
- Nginx:
pagespeed DownstreamCachePurgeLocationPrefix http://localhost:80;
You also need to give PageSpeed a key so it can allow the cache to request rebeaconing without allowing external entities to do so:
- Apache:
ModPagespeedDownstreamCacheRebeaconingKey "<your-secret-key>"
- Nginx:
pagespeed DownstreamCacheRebeaconingKey "<your-secret-key>";
These are the only changes you need to make to the PageSpeed configuration file, but before you restart you also need to make some changes to your cache configuration. These vary by cache; below are configurations for Varnish 3.x, Varnish 4.x, and Nginx's proxy_cache:
- Varnish 3.x:
acl purge { # If PageSpeed isn't running on the same server as your cache, list the IP(s) # of the PageSpeed machine(s) here. "<IP_ADDRESS>"; } sub vcl_recv { # Tell PageSpeed not to use optimizations specific to this request. set req.http.PS-CapabilityList = "fully general optimizations only"; # Don't allow external entities to force beaconing. remove req.http.PS-ShouldBeacon; # Authenticate the purge request by IP. if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } return (lookup); } } # Mark HTML as uncacheable. If we can't send them purge requests they can't # cache our html. sub vcl_fetch { if (beresp.http.Content-Type ~ "text/html") { remove beresp.http.Cache-Control; set beresp.http.Cache-Control = "no-cache, max-age=0"; } return (deliver); } sub vcl_hit { # Make purging happen in response to a PURGE request. This happens # automatically in Varnish 4.x so we don't need it there. if (req.request == "PURGE") { purge; error 200 "Purged."; } # 5% of the time ignore that we got a cache hit and send the request to the # backend anyway for instrumentation. if (std.random(0, 100) < 5) { set req.http.PS-ShouldBeacon = "<your-secret-key>"; return (pass); } } sub vcl_miss { # Make purging happen in response to a PURGE request. This happens # automatically in Varnish 4.x so we don't need it there. if (req.request == "PURGE") { purge; error 200 "Purged."; } # Instrument 25% of cache misses. if (std.random(0, 100) < 25) { set req.http.PS-ShouldBeacon = "<your-secret-key>"; return (pass); } }
- Varnish 4.x:
acl purge { # If PageSpeed isn't running on the same server as your cache, list the IP(s) # of the PageSpeed machine(s) here. "<IP_ADDRESS>"; } sub vcl_recv { # Tell PageSpeed not to use optimizations specific to this request. set req.http.PS-CapabilityList = "fully general optimizations only"; # Don't allow external entities to force beaconing. unset req.http.PS-ShouldBeacon; # Authenticate the purge request by IP. if (req.method == "PURGE") { if (!client.ip ~ purge) { return (synth(405,"Not allowed.")); } return (purge); } } # Mark HTML as uncacheable. If we can't send them purge requests they can't # cache our html. sub vcl_backend_response { if (beresp.http.Content-Type ~ "text/html") { unset beresp.http.Cache-Control; set beresp.http.Cache-Control = "no-cache, max-age=0"; } return (deliver); } sub vcl_hit { # 5% of the time ignore that we got a cache hit and send the request to the # backend anyway for instrumentation. if (std.random(0, 100) < 5) { set req.http.PS-ShouldBeacon = "<your-secret-key>"; return (pass); } } sub vcl_miss { # Instrument 25% of cache misses. if (std.random(0, 100) < 25) { set req.http.PS-ShouldBeacon = "<your-secret-key>"; return (pass); } }
- Nginx proxy_cache:
http { # Define a mapping used to mark HTML as uncacheable. map $upstream_http_content_type $new_cache_control_header_val { default $upstream_http_cache_control; "~*text/html" "no-cache, max-age=0"; } server { # PageSpeed's beacon dependent filters need the cache to let some requests # through to the backend. This code below depends on the ngx_set_misc # module and randomly passes 5% of traffic to the backend for rebeaconing. set $should_beacon_header_val ""; set_random $rand 0 100; if ($rand ~* "^[0-4]$") { set $should_beacon_header_val "<your-secret-key>"; set $bypass_cache 1; } location / { # existing proxy_pass # existing proxy_cache # existing proxy_cache_key # What servers should we accept PURGE requests from? If PageSpeed isn't # running on the same server as your cache, list the IP(s) of the # PageSpeed machine(s) here. # # This requires rebuilding with the ngx_cache_purge module: # https://github.com/FRiCKLE/ngx_cache_purge proxy_cache_purge PURGE from <IP_ADDRESS>; # Mark HTML as uncacheable. If we can't send them purge requests they # can't cache our html. Uses the map defined above. proxy_hide_header Cache-Control; add_header Cache-Control $new_cache_control_header_val; # Tell PageSpeed not to use optimizations specific to this request. proxy_set_header PS-CapabilityList "fully general optimizations only"; # See discussion of rebeaconing above. proxy_cache_bypass $bypass_cache; proxy_hide_header PS-ShouldBeacon; proxy_set_header PS-ShouldBeacon $should_beacon_header_val; } } }
When running with downstream caching all resources referenced from the HTML
will be cache-extended as usual, so if you have resources that need to be
cached for a short time then they can be stale. If so,
either Disallow
those resources, so PageSpeed doesn't inline or
cache-extend them, or decrease the cache lifetime on your HTML.
Additional Options
The configuration above should be a good fit for most sites, but PageSpeed's downstream caching is highly configurable with many options that allow you to tweak it for your particular setup.Beaconing
Several filters such as
inline_images,
inline_preview_images,
lazyload_images and
prioritize_critical_css
depend extensively on client beacons to determine critical images and
CSS. When such filters are enabled, pages periodically have beaconing
JavaScript inserted as part of the rewriting process.
The standard configuration passes through 5% of cache
hits to the backend with a PS-ShouldBeacon
header set, so that
these filters can continue to receive the beacons they need.
If you have a high traffic site, 5% is probably a larger share than you need for PageSpeed to receive sufficient beacons. In that case you can decrease the percentage of traffic to pass through. For example, here's how you'd decrease it to 2%:
- Varnish 3.x or 4.x:
- if (std.random(0, 100) < 5) { + if (std.random(0, 100) < 2) {
- Nginx proxy_cache
- if ($rand ~* "^[0-4]$") { + if ($rand ~* "^[01]$") {
Alternatively, you may be willing to give up the benefit of the beaconing-dependent filters in exchange for never intentionally bypassing the cache. If so, you should turn off beaconing and beacon-dependent filters in PageSpeed:
- Apache:
ModPagespeedCriticalImagesBeaconEnabled false ModPagespeedDisableFilters prioritize_critical_css
- Nginx:
pagespeed CriticalImagesBeaconEnabled false; pagespeed DisableFilters prioritize_critical_css;
Additionally you should remove the proxy config that handles beaconing:
- Varnish 3.x:
- remove req.http.PS-ShouldBeacon; ... - if (std.random(0, 100) < 5) { - set req.http.PS-ShouldBeacon = "<your-secret-key>"; - return (pass); - } ... - if (std.random(0, 100) < 25) { - set req.http.PS-ShouldBeacon = "<your-secret-key>"; - return (pass); - }
- Varnish 4.x:
- unset req.http.PS-ShouldBeacon; ... - sub vcl_hit { - if (std.random(0, 100) < 5) { - set req.http.PS-ShouldBeacon = "<your-secret-key>"; - return (pass); - } - } - sub vcl_miss { - if (std.random(0, 100) < 25) { - set req.http.PS-ShouldBeacon = "<your-secret-key>"; - return (pass); - } - }
- Nginx proxy_cache
- set $should_beacon_header_val ""; - set_random $rand 0 100; - if ($rand ~* "^[0-4]$") { - set $should_beacon_header_val "<your-secret-key>"; - set $bypass_cache 1; - } ... - proxy_cache_bypass $bypass_cache; - proxy_hide_header PS-ShouldBeacon; - proxy_set_header PS-ShouldBeacon $should_beacon_header_val;
PageSpeed Resources
Because PageSpeed already caches its optimized resources, you may want to exclude them caching by the downstream cache. If so, you can set:
- Varnish 3.x and 4.x:
+ if (req.url ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+") { + return (pass); + }
- Nginx proxy_cache
+ if ($uri ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+") { + set $bypass_cache "1"; + }
If you have enabled URL signing,
change the 10
in the regexp to 20
to account for the
additional characters in the hash.
PS-CapabilityList
Typically PageSpeed will produce different HTML for different browsers. For
example, when responding to a request that has Accept:
image/webp
, PageSpeed knows the requesting browser supports WebP and so
it can send these images, while if the Accept
header doesn't
mention WebP then it will send JPEG or PNG. To suppress this behavior,
the standard configuration above sets a header:
PS-CapabilityList: fully general optimizations only
This header can also be used to tell PageSpeed to make specific optimizations. There are five capabilities PageSpeed can take advantage of that aren't supported in all browsers, and it gives them each a code:
| Capability | Code |
|---|---|
| Inline Images | ii
|
| Lazyload Images | ll
|
| WebP Images | jw
|
| Lossless WebP Images | ws
|
| Animated WebP Images | wa
|
| Defer Javascript | dj
|
For example, you could include whether the Accept
header
includes image/webp
in your cache key, and then for the
fraction of traffic that claimed webp support send:
PS-CapabilityList: jw:
Every page would go through to your origin twice and be cached twice, once processed with WebP support and once without.
You can combine multiple capabilities together with a comma. For example, if you decided to make a cache fragment for Chrome 30+, which supports all of these, for that fragment you would send:
PS-CapabilityList: ll,ii,dj,jw,ws:
For Firefox 4+, which supports all of these but WebP, you would send:
PS-CapabilityList: ll,ii,dj:
To use this header properly, however, you have to know which capabilities are
supported by which browsers in the version of PageSpeed you're using and craft
regular expressions to match exactly those ones. This is very difficult to do
in general because it involves duplicating the code in
user_agent_matcher.cc
as regexes, but a simple division is:
- Chrome 32+:
ll,ii,dj,jw,wa,ws
- Firefox 4+, Safari, IE10 (but not IE11):
ll,ii,dj
- Everything else:
fully general optimizations only
Purging with GET
If you're integrating PageSpeed with a cache that doesn't
support PURGE
requests but does support purging in response to a
prefixed GET
request, PageSpeed can support that. You would
configure your cache to treat a GET
to
/purge/foo/bar
as a request to purge /foo/bar
and
configure PageSpeed as:
- Apache:
ModPagespeedDownstreamCachePurgeLocationPrefix http://CACHE-HOST:PORT/purge ModPagespeedDownstreamCachePurgeMethod GET
- Nginx:
pagespeed DownstreamCachePurgeLocationPrefix http://CACHE-HOST:PORT/purge; pagespeed DownstreamCachePurgeMethod GET;
Purge Threshold
Whenever PageSpeed serves an HTML response that is not fully optimized it continues rewriting in the background. When it finishes, if the HTML it served was less than 95% optimized, it sends a purge request to the downstream cache. The next request to come in will bypass the cache and come back to PageSpeed where it can serve out the now more highly optimized page. If you want to change what point PageSpeed considers the page done and stops optimizing, you can set a different value for this threshold. For example, to lower it to 80%, so that PageSpeed is satisfied with a page that is only 80% optimized, you would set:
- Apache:
ModPagespeedDownstreamCacheRewrittenPercentageThreshold 80
- Nginx:
pagespeed DownstreamCacheRewrittenPercentageThreshold 80;
Script Variables
Note: Nginx-only
Note: New feature as of <IP_ADDRESS>
In ngx_pagespeed DownstreamCachePurgeLocationPrefix
,
DownstreamCachePurgeMethod
, and
DownstreamCacheRewrittenPercentageThreshold
support script
variables, so it's possible to set them on a per-request basis. Turn this on
with:
http { pagespeed ProcessScriptVariables on; ... }You can then use script variables in arguments for these commands:
pagespeed DownstreamCachePurgeLocationPrefix "$purge_location"; pagespeed DownstreamCachePurgeMethod "$cache_purge_method"; pagespeed DownstreamCacheRewrittenPercentageThreshold "$rewrite_threshold";
For more details on script variables, including how to handle dollar signs, see Script Variable Support.
Implementation Details
To support downstream caching PageSpeed sends a purge request to the caching layer whenever it identifies an opportunity for more rewriting to be done on content that was just served. Such opportunities could arise because of, say, the resources now becoming available in the PageSpeed cache or an image compression operation completing. The cache purge forces the next request for the HTML file to come all the way to the backend PageSpeed server and obtain better rewritten content, which is then stored in the cache. This interaction between the PageSpeed server and the downstream caching layer is depicted in the diagram given below.
In the interaction depicted above, note that the partially optimized HTML will be served from the cache until a purge request gets sent by the PageSpeed server. It is recommended to set up PageSpeed and the downstream caching layer servers on a one to one basis so that the purges can be sent to the correct downstream server.


[gets stabbed]
And the knifing, and the hurting, and the senseless violence, already!"
A phrase made popular by Jerry Lewis that was then exaggerated by characters based on him. The phrase is based on the syntax of Yiddish, and is heavily associated with Jewish and Borscht Belt humor. It's also consistent with the idea that Jews love to complain. Variations include: "Oh God, with the X!", "Stop, with the X!", "Please, not with the X!", etc. It's often topped off with "already!"
The phrase is generally used to complain about an action, like "shouting," "stabbing" and so forth, but can also be used to complain about a subject, such as "Enough, with the radio! Turn it off!"
Just about every Alter Kocker will indulge in the trope, but cultural saturation has also made it a part of general Buffy Speak. This can be considered part of the variant of stereotyped Jive Turkey specific to New York, and is particularly common among anybody who is trying to imply that they are from that city, whether or not they actually are.
Compare [Verb] This!. Not to be confused with Oh, the Humanity!.
Examples:
- Brian Michael Bendis sometimes writes Spider-Man (who grew up a Lutheran, but did date Jewish Kitty Pryde) like this. "Grenades! Oy with the grenades!"
- Used in the first episode of Berserk Abridged.
- Used in a recent Ben 10 abridged series.
- Quite a few times in Dragon Ball Z abridged movies done by I Touched Yusuke in the precursor team-up to Team Four Star.
- Yusuke in Yu Yu Hakusho Abridged: X = flying.
- Ranma ½: The Abridged Chronicles with Ryōga. "Oy, with the boobs, and the shirt, and the woah!"
- And then in a later episode: "With the boot, and the face, and the pain..."
- The Abridging of Haruhi Suzumiya: Kyon yells the 'running' version of this as Haruhi drags him out of the classroom, complete with a Super Mario Bros. soundtrack.
- Code Geass: The Abridged Series has this happen a few times, with Shirley declaring "Oh God With The Falling" when Milly declares the cat-catching contest and the "prize", while Suzaku has several, one in the flashback involving being shot, and another being hit the scene-changing screen after Lelouch gets fed up with Suzaku not getting his hint.
- The Third Hokage from Naruto: The Abridged Comedy Fandub Spoof Series Show uses this when Iruka shows up to bother him one time too many. "God, always with the talking from you."
- Used overtly by Uncle Iroh in Avatar: The Abridged Series. "Alright, alright! Enough, with the vining [whining], already!"
- In Hellsing Ultimate Abridged, the German soldiers are very glad Rip Van Winkle is no longer going on about the ponies, and the friendship, and the wrapping up of the winter.
- In the fourth An American Tail movie The Mystery of the Night Monster, one of the villain's cat underlings talks like Jerry Lewis.
- Anastasia: Bartok's response when Rasputin's phylactery's starts to react to Anastasia's presence, whom the undead sorcerer swore to kill.
Bartok: "Okay, okay, I get the message! Enough already with the glowing and the smoke people!"
- How to Train Your Dragon has Hiccup's famous line towards the beginning of what ultimately ends up as his Flight of Romance on Toothless with Astrid.
Hiccup: And now, the spinning. Thank you for nothing, you useless reptile!
- At the end of Ingmar Bergman's The Seventh Seal (Det Sjunde Inseglet), the actor Jof sees a vision of the knight and his family doing a dance of death. His wife, Mia, turns to him and says "You with your visions and dreams."
- The Sunshine Boys: "Again with the finger!?" This line got picked up and used on Mystery Science Theater 3000 several times.
- Occasionally shows up in the speech patterns of the younger characters on Buffy the Vampire Slayer — Willow and Xander primarily, although others employ it as well.
- Every episode of the short-lived WB sitcom Alright Already had a title which was some variant of "Again with the ______ ".
- Firefly used this now and again, usually from Wash.
"You with the bathing, me with the watching you bathe.."
- When Lorelai Gilmore, from Gilmore Girls, speculates about the most inherently funny phrase in the world to help her through a boring family dinner, she finally settles on "Oy, with the poodles, already!"
- The West Wing, when Josh is babbling apologetically to Amy about how he never learned to be good at relationships. "You know what? Maybe not so much for you with the talking." *kiss*
- Kevin Pollak had a one-hour HBO comedy special titled "Stop With the Kicking!" The title came from Pollak's discussion of nascent action "star" Jeff Speakman:
What kind of a name for an action hero is Jeff Speakman?! It's the Kung Fu Jew! Oh oy!  Stop! Wait a second! Wait awhile."
- Invoked on The Daily Show when Jon Stewart is talking about corrupt Illinois ex-governor Rod Blagojevich. He can't pronounce his name without dissolving into a Jerry Lewis impression.
- Used occasionally on Mystery Science Theater 3000, in particular during The Beast of Yucca Flats, after comparing Tor Johnson's lumbering beast to a "meshugene grandfather."
- Doctor Who has Madam Kovarian utter a variation on this: "The flirting, do I have to watch this?".
- Also, in the 50th Anniversary special : "Again with the pointing!" from the War Doctor.
- And the Twelfth Doctor: "No, no, not the hugging, I am against the hugging!"
- One episode of Crazy Ex-Girlfriend has Rebecca's Jewish Mother respond to one of the few things Rebecca says during their one-sided conversation (and that was an answer to a direct question, no less) with "don't interrupt me! You're always with the talking!"
- From Allan Sherman's "Sir Greenbaum's Madrigal": "All day with the slaying and slewing and smiting and smoting like Robin Hood! Ah, would I could kick the habit and give up smoting for good!"
- Al over the PA in Ratchet: Deadlocked: "Ratchet, I know you're busy with the killing and the hurting..."
- Kang the Mad in Jade Empire uses thishe refers to you "with the punching and the kicking," and admonishes that he'd've preferred more explosions.
- World of Warcraft, with its often creative names for its quests, has "Again With the Zapped Giants" among others.
- In Phoenix Wright: Ace Attorney - Justice for All, Phoenix has been taking quite a bit of abuse from Franziska von Karma's whip. When his mentor Mia adds a bit of tongue-lashing to the mix, Phoenix replies:
Phoenix: Mia, not you too! With the whip... and the pain... and the owww...
- In The Curse of Monkey Island, if the player doesn't have Guybrush saw off the plank the first time he boards the Sea Cucumber, and then gets walked off the plank, he will climb on board the ship after sawing off the plank and get this exchange after monkeys surround him again:
Mr. Fossey: [irritated] AGAIN with the sneaking on board the ship! I don't know how or why you came back on board... but the next time you walk the plank will be your last!
- Homestar Runner: The Strong Bad Email "other days" had Strong Bad begin answering the email with "Again with the 'Dear Strong Bad'..."
- Used by Pilz-E a lot in Neurotically Yours.
- In the first episode of Monkey Ninjas:
[after Carl defeats a monster in the kitchen]
Phil: Oi! What's with all the yelling and the cooking and the pan-smacking? It's 8 AM!
[...]
Carl: You sound like you swallowed a rabbi.
- 8-Bit Theater frequently uses this gag when someone is getting horribly stabbed, burned, dismembered, or otherwise violently killed off panel.
- Awkward Zombie did it in this comic.
- Strip 100 of Questionable Content had Marten saying "Please don't make with the killing!" in response to seeing Faye topless.
- Schlock Mercenary has the Aqueousci, humans who grew up underwater on Celeschuul speaking Galstandard Peroxide. When they leave the water and start speaking Galstandard West, they sound like this trope.
- According to Topfive.com, the number one Jewish Country Western song is "Alright, Already, Stop With the Infidelity!"
- In Atop the Fourth Wall, Linkara does this when his attempt to talk his Magic Gun's Enemy Without to death fails and she keeps summoning monsters.
- The Nostalgia Critic does this (albeit in the midst of a Jerry Lewis impression) in his Dungeons & Dragons review.
- Dan of the Game Grumps (who is of course Jewish) will engage in this on occasion. For example, from Castlevania II: Simon's Quest: "Oh God, with the jumpy demons!"
- Animaniacs:
- Mister Director, and Paul Rugg in general.
Mr.
- An even more elaborate example:
Mr. Director: Hoyl! How'd you! With the going! You were there but here now! You are! For me to see! How'd you do!?
Yakko: Did you get any of that?
Wakko: I believe he said, "Hoyl! How'd you! With the going! You were there but here now! You are! For me to see! How'd you do!?"
Yakko: Thanks for clearing that up. - Slappy the Squirrel gets one in her opening theme.
Slappy: Enough with the singing, already!
- Mister Director, and Paul Rugg in general.

- In his more zany moments, the title character of Freakazoid! (who is also voiced by Paul Rugg) has a tendency to slip into a Jerry Lewis impersonation.
- Prof. Frink in The Simpsons, mostly because the voice actor based him on Jerry Lewis' character in the "Nutty Professor". Jerry Lewis was cast as Prof. Frink's father in a Halloween Special.
- In "Grampa vs. Sexual Inadequacy", Frink drinks a mixture made by Grampa Simpson and he immediately transforms into a Buddy Love-esque guy.
- In "Itchy & Scratchy: The Movie," the family sees a preview for Star Trek XII: So Very Tired, in which Captain Kirk is informed that the Klingons are approaching. He sighs and says, "Again with the Klingons."
- Even Bart gets in on it.
- Shelton Klutzberry, another character vocally based on Jerry Lewis, says this sort of thing in The Replacements.
- Zoidberg and the other Decapoidians talk this way on Futurama, being Space Jews.
- Mort Goldman in Family Guy occasionally does this.
- In one episode, Mojo Jojo of The Powerpuff Girls repeatedly describes the foiling of his plan from "Monkey See, Doggie Do" as "The dogs, the biting, the dropping."
- In Codename: Kids Next Door, Numbuh 5's entire family does this almost constantly. Her mother does it in French. What with her father being a homage to Bill Cosby, with the obliviousness, and the parenting, and d'oh, you know what I'm talking about!
- In one episode of Histeria! that focused on the Louisiana Purchase and the Lewis and Clark Expedition, Lewis and Clark get crushed by a canoe they're carrying. Lewis says, "stop with the heavyness from the boat of hurting!" in a very annoying voice.
- Due to a short-circuit, Larry 3000 from Time Squad behaves like a drunk person, leading to this exchange in front of many French people:
Larry: He-LLO FRI-ENDS! Oh, the nice French people, with the funny language, and the talking, with the "Oui oui, poo poo, ah hah hah hah, oh mon cheri, french fries"... woah! Hey LA-dy!
Buck: [laughs] Hey, that's a pretty good Dean Martin.
Otto: [attempting to pull Larry away] Come on, Larry...
Larry: Oh please, kind sir, with the grabbing of the arm... Oh with the hurrying... - Kim Possible villain Dr. Drakken gets this response to one of his plans:
Drakken: Suppose you outnumbered her... Suppose there was an army of you against one of her.
Shego: Oh, no. Again with the cloning?!
[Shego then points out the no-cloning clause in her contract, and walks out on him when he persists] - Invader Zim: Professor membrane is disappointed with his son's incessant necromancy.
Membrane: Always with the dead that boy.
Oy, enough with the troping and the editing and the categorizing of all the fiction already!


One major concern with the Scout II axle swap is the transfer case.
The Scout II uses a passenger drop transfer case, so the front
differential is on the passenger side. All the Wranglers use a
drivers drop transfer case, so the solution is to use a Dana 300
from a 80s CJ. This also means that the exhaust needs to be
rerouted around to the other side. There are also other details
to the swap, some of the details are related to doing a spring
over axle conversion.
Transfer Case
After removing the crossmember/skidplate and NP231 transfer case,
I temporarily bolted the D300 to the automatic tranny. It fit
perfectly although the front output end of the case hung down
quite a bit. Not much I could do there. Re-indexing the way
the case mounted to the tranny was not an option.
With the case in place, I was able to take measurements
which I needed to fabricate a new crossmember/skidplate out
of square tubing. In retrospect, I think it would be easier
and save space if I just hacked up a stock
crossmember/skidplate. I'll probably do that later this
year.
I also marked out which part of the floor pan needed
to be pounded out in order to make room for the transfer
case shifter. An easy way to do this (thanks to Wil for
this tip) was to jack up the entire vehicle and then lower
it onto a tall jackstand which will then push against the
part of the floor which needs to be pounded up.
While I had the skidplate removed, I cut off the exhaust hanger hoop
which is mounted on the passenger's side of the transmission
mount. I then welded it onto the driver's side of the mount
so it could be re-used when the exhaust gets re-routed.
I used a torch to put the necessary bends in the shifter so
that it crossed over the transmission and came up in the
same place that the factory shifter did. An alternative
method I've heard of is to simply turn the transmission
tunnel cover around so that the shifter plate/boot is on the
passenger-side.
The speedometer cable and breather tube hooked up to the
Dana 300 without problems. Well, that's not quite accurate.
I did manage to break the nut which holds the speedo gear
assembly in the transfer case. It's a cheap, cast metal
part so be very careful when tightening it. Fortunately, I
was able to obtain a replacement the very next day from
Gary's Autowrecking.
I was planning on using a CV driveshaft with 1310 u-joints,
so I installed a yoke on the rear for this drive shaft. I
also changed a couple of seals.
Drive Shafts
I was hoping to use a front CV shaft but there wasn't enough
room for the CV. It would have hit the auto tranny's pan
under easy axle movement. I had to use a regular
two-u-joint driveshaft in the front.
The rear axle installed even more easily than the front. I
used an early Ford Bronco front CV shaft for the rear. It
was short by 1 or 2 inches but would suffice for temporary
street use.
At the driveshaft shop they lengthened, re-furbished & balanced the
Bronco CV shaft I had in the back and re-tubed a skinny '88 YJ front
shaft. Because of its small diameter (but 1/8" wall) and low mass,
I didn't have it balanced and even so, there is absolutely no
vibration when I drive with the hubs locked in.
Springs
With both the front and rear axles, I used a "fresh" set of
used YJ springs. To these spring packs I added a main leaf
(with the eyes cut off) from my old packs. The extra leaf
should help reduce spring wrap with the spring over axle
conversion.
Wheels
By the way, if you haven't already guessed, the Scout axles
use the 5 on 5.5" bolt pattern. This meant that I had to
buy a new set of wheels and swap my tires onto them while I
had the Jeep supported on its frame.

I took the back roads to get to the local muffler shop where
they re-routed the exhaust so that it stayed on the driver's
side until it got close to the gas tank where it then bent
up and over the driveshaft and exited in the standard
location.
Brakes
I was planning on using a CJ master cylinder which I heard
works well with this swap but it wouldn't bolt up to my YJ
booster. I decided to fore go this modification and keep my
stock master cylinder and booster. The result was the same
old soft pedal but much better braking performance.
Rob Bryce gave me a list of vehicle brake specs and the late
CJ mcs seem to have the same mc piston size as the YJ mcs.
I think the reason the CJ stuff might have worked better
is because it's possible to adjust the pedal/push rod leverage.
I might try that on my YJ by buying one of those adjustable rods.
Shocks
The long DoetschTech shocks which came with my RE SOA kit
were too long for my new axles which utilized the higher
axle-side shock mounts. I ended up with 3" available
compression in the front and 2" in the back. I was actually
bottoming out my shocks on mild street bumps. I solved this
problem by moving the rear DoetschTechs to the front and
putting a pair of cheap ($20 each) Canadian Tire MotoMaster
shocks in the rear. These cheap shocks were discards from
my friend's FJ45 Land Cruiser which he had just converted to
SOA. I was able to move the rear shocks to the front because
my Rubicon Express spring over conversion kit changed the
front shocks to eyes on top and bottom.
Conclusion
It sure is nice to have free-wheeling
hubs again. I can finally run 33" tires and lockers
without worrying about snapping axle shafts.
This project was a lot more work than I anticipated and this
short write-up doesn't do justice to the long hours
involved. On the other hand, a more organized person could
do this faster and better than I did.
I would strongly
recommend having a schedule and setting intermittent goals
to keep the project moving along without getting yourself
stressed out. I could have saved money by thinking
long-term and determining all the pieces I would need. The
sooner you know this, the more opportunity you have to find
these parts in salvage yards or through private sales.
I expected the short shocks to lower my articulation but
when I ramped it 5 days later, it scored a 1052 RTI. Not
bad at all! This was the first time I had ever ramped my
Jeep so I can't compare it to my older SOA performance. But
that's not the point. The point is that even with these
shorter shocks, I still have a very respectable amount of
suspension travel.
The ride with the extra full-length leaves was a bit firmer
than the older springs but much more stable. It handled
highway bumps better without ruining the comfortable ride.
It also allowed me to travel much faster offroad, absorbing
large bumps easily.
Moving the lower shock mounts higher made a HUGE difference
offroad. I took my Jeep out for three days of offroading
once I got it back on the road and I only hit my diffs once.
If you do an SOA conversion without moving the shock mounts,
you're missing out on a major advantage of the SOA.
Even though I had setup the front pinion angle for a CV
shaft and the non-CV shaft I ended up using was not
balanced, I've detected no vibration even at speeds up to
100 km/h. I think a lot of that might have to do with the
fact that the front shaft is one of the skinny ones used in
pre-1990 YJs.
The bigger brakes on the Scout axles are great. While my
brake pedal still feels too soft for my liking, the brakes
grab much better and can lock up my wheels without too much
effort. Since my Jeep is my daily commuter vehicle,
it's no wonder that I appreciate the bigger brakes
more than any of the other advantages gained with the
axle swap.
The 3.55 gears which these axles came with were an
improvement over the 3.07 ratio in my D30/D35 axles.
However, it's not a huge improvement. I'd still like
to have 4.11 gears with my 33" tires.
Still To Do
I still have to re-route the vent lines to the axle breather
tubes. I found an NPT fitting that I could screw into the
front D44 but the rear had a very coarse thread. I may have
to drill a new hole back there and thread it to NPT specs.
To prevent the dreaded axle-wrap problem, I have to build
some kind of anti-wrap bar. I'll probably make one which
mounts firmly to the axle housing and is shackled to the
xfer case crossmember.
Bronco or Scout II?
After seeing
Chris Waterman's Early Ford Bronco axle swap, I think that
would be the route I'd strongly consider it for future
YJ axle upgrades. It requires less work and is much
less intimidating than the Scout axle swap. However,
I can take solace in the following benefits over the
EB axle swap:
- Scout front D44s come with disc brakes and large
u-joints.
- The Scout front D44 allows a slightly sharper
turning radius.
- Rear D44 uses 30-spline axle shafts vs. the
Bronco's 28-spline units.
- Rear D44 has a higher pinion, requiring a less
severe driveshaft angle.
I'd be hard pressed to say which swap has the overall
performance advantage. The point to keep in mind,
though, is that there are at least two relatively easy
and affordable ways to turn a Jeep YJ into a extremely
reliable offroad machine, able to compete head-to-head
with the best.
Thanks
I wouldn't have been able to do this swap without help
from a lot of people. In particular, I'd like to
thank:
John Barron
Louie Belt
Rick Boiros
Rob Bryce
John Edgar
Wayne Foster
Wil Girindra
Ron Gooch
Phil Gough
Herbert Leung
Grant Klavatalks
Ed Mah
John Nutter
Vern O'Connor
Brad Peden
Steve Prinz
Richard Reimer
Chris Waterman
Jim Weed
Paul Weitlauf
Alan Wicker
Jonathan Yim


THE ENGLISH PATIENT A film review by Craig Good Copyright 1996 Craig Good
If a better movie comes out this year, I'd sure like to see it.
"The English Patient" is a gripping, complex, emotional and surprizing movie. It is in many ways (all of them good) a very old-fashioned film, and yet it is fresh and lacking even a hint of cliche. Every time I tried to predict what a character was going to do, or which character was going to fall in love with whom, I was wrong. And I'm rarely so happy to be proven wrong so many times in one day.
This is, in a way, a difficult movie to review. On the one hand it could leave me gasping for appropriate adjectives. On the other, I'd hate to spoil even one moment of discovery for those going to see it. Forgive me if I write in generalities.
The script is truly a thing of beauty. Each character is a living, breathing individual. I was particularly fascinated with Ralph Fienes' character: I spent the movie not knowing if I should admire him, hate him or pity him.  Calling this simply a "love story" would be like calling a computer an adding machine. It deals with attraction, lust, obsession, betrayal, self-destruction, honor, revenge, mercy, anger, art and pity. Oh, forget it. I can't make a complete list, nor should I try. As David Lynch said, "If you can talk about it you aren't using cinema".
Everything about the production is finely crafted. The cinematography of Italy and Tunesia is gorgeous. The music is perfect. The audio mix is the kind of genius you expect with Walter Murch on the project. It is clearly evident that everybody working on the film knew they had something here which was special; in which they could take pride. This is the kind of movie wich makes me glad that movies were invented. It's ample balm for the summer bombs we sat through.
If we don't hear the title "The English Patient" a *lot* at Oscar time, the Academy should be dropped in the desert and abandoned.
--Craig<EMAIL_ADDRESS>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


Hi !
- The tiles are in jumbled order
- To swap 2 tiles click them one by one , Selection is indicated by a green border
- Once you click on play timer will start running
- You get 2 minutes in easy , 90 seconds in hard and 75 second in hardest
TIME OUT!!!
Congrats!!!


corowatch
Lua module to watch coroutine usage and kill a coroutine if it fails to yield in a timely manner. The main purpose is preventing code from locking the Lua state. As a convenience function coroutine.wrapf() is included which allows any function to be watched, not only coroutines.
Implementation notes
- To protect access to coroutines, the module must override the existing coroutine functions. Besides overriding the
create()
,wrap()
,status()
,yield()
, andresume()
functions, it adds additional functionswatch()
,wrapf()
andgettime()
to the global coroutine table. - Additionally the global
debug.sethook()
is modified to prevent a coroutine from removing it's own 'watch' routine (from the paranoia department). - Important: The default
gettime()
function loads LuaSocket to use thesocket.gettime()
function. If you do not use LuaSocket, then it might be better to replacecoroutine.gettime()
with a more lightweight implementation.
Usage
Usage is fairly simple, call the watch()
method on a coroutine to protect it and provide the timeouts and callbacks as required.
Example (see the ./examples
folder):
require("corowatch").export(_G) -- monkey patch the globals local f = function() local callcount = 0 while true do -- something for a coroutine to do here callcount = callcount + 1 end end local kill_timeout = 1 -- seconds local warn_timeout = 0.8 -- seconds local warncount = 0 local cb = function(cbtype) if cbtype == "kill" then print("now killing coroutine...") elseif cbtype == "warn" then warncount = warncount + 1 print("Warning, coroutine might get killed...." .. warncount) if warncount < 4 then return true -- reset the timeouts end end end print(coroutine.resume(coroutine.watch(coroutine.create(f), kill_timeout, warn_timeout, cb)))
When run the example code returns the following results;
Warning, coroutine might get killed....1 Warning, coroutine might get killed....2 Warning, coroutine might get killed....3 now killing coroutine... false Coroutine exceeded its allowed running time of 1 seconds, without yielding
Limitations
The mechanics of this library depend on the debug library. A debug hook is set to repeatedly (once every 10000 VM instructions) check the coroutine for a time out. When a timeout is detected, an error is generated that will kill the coroutine (coroutine status will be 'dead'). There are two ways that it won't work;
- When a C function is being executed; the debughooks can only interrupt Lua code, not C code. So if C code takes too long or locks, it won't be interrupted.
- When the running code that gets interrupted is inside a protected call (Lua side
pcall()
,xpcall()
or C-sidelua_pcall()
) then the error thrown by corowatch will not kill the coroutine, but it will be caught by that protected call.
To mitigate these situations; the debughook is altered once the first error is thrown. It will from there on run every 1 VM instruction. This will then rethrow the same error directly after the C function or protected call that caught the previous error. This process is repeated until the coroutine dies, and effectively cascades the error up the callstack.
Documentation
The documentation is available online at GitHub
Tests
Tests are located in the ./spec
folder and can be run using busted
Changes
- 1.0, 4-Feb-2014, no automatic monkey patching of globals anymore
- 0.2, 7-Apr-2013, fixed debughook settings, improved performance
- 0.1, 4-Apr-2013, initial release
License
MIT license
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.