|
DESERT
3.0
|
#include <mmac.h>
#include <iostream>
#include <clmessage.h>
#include <mphy.h>
#include <string>
#include <fstream>
#include <ostream>
#include <cassert>
#include <map>
#include <queue>
Go to the source code of this file.
Classes | |
| class | uwUFetch_AUV |
| class | uwUFetch_AUV::uwUFetch_timer |
| class | uwUFetch_AUV::uwUFetch_TRIGGER_timer |
| class | uwUFetch_AUV::uwUFetch_RTS_timer |
| class | uwUFetch_AUV::uwUFetch_DATA_timer |
| class | uwUFetch_AUV::uwUFetch_FIRST_DATA_timer |
Macros | |
| #define | UWFETCH_AUV_DROP_REASON_ERROR "DERR" |
| #define | UWFETCH_AUV_DROP_REASON_UNKNOWN_TYPE "DUT" |
| #define | UWFETCH_AUV_DROP_REASON_WRONG_RECEIVER "DWR" |
| #define | UWFETCH_AUV_DROP_REASON_WRONG_STATE "DWS" |
| #define | UWFETCH_AUV_DROP_PHY_CAN_NOT_TX "PNT" |
| #define | UWFETCH_AUV_DROP_REASON_ALREADY_ONE_RTS_RX "DAORR" |
| #define | UUFETCH_AUV_DROP_REASON_NOT_ENABLE "PDNE" |
| #define | UWUFETCH_AUV_DROP_CAN_NOT_RX_THIS_PCK "DCNR" |
Variables | |
| packet_t | PT_TRIGGER_UFETCH |
| packet_t | PT_RTS_UFETCH |
| packet_t | PT_CTS_UFETCH |
| packet_t | PT_BEACON_UFETCH |
| packet_t | PT_PROBE_UFETCH |
| packet_t | PT_POLL_UFETCH |
| packet_t | PT_CBEACON_UFETCH |
Declaration of class that implement AUV for UFetch protocol.
Definition in file uwUFetch_AUV.h.
| #define UUFETCH_AUV_DROP_REASON_NOT_ENABLE "PDNE" |
Packet dropped: AUV is not enabled to transmit or receive this \ type of packet.
Definition at line 65 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_PHY_CAN_NOT_TX "PNT" |
Packet dropped: Physical can not transmit the packet.
Definition at line 61 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_REASON_ALREADY_ONE_RTS_RX "DAORR" |
RTS dropped: just one RTS it was analyzed by the AUV.
Definition at line 63 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_REASON_ERROR "DERR" |
Packet dropped: Packet corrupted.
Definition at line 51 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_REASON_UNKNOWN_TYPE "DUT" |
Packet dropped: Packet of unknown type.
Definition at line 53 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_REASON_WRONG_RECEIVER "DWR" |
Packet dropped: Packet is addressed to another node of the.
Definition at line 55 of file uwUFetch_AUV.h.
| #define UWFETCH_AUV_DROP_REASON_WRONG_STATE "DWS" |
Packet dropped: AUV cannot receive this kind of packet in this \ state.
Definition at line 57 of file uwUFetch_AUV.h.
| #define UWUFETCH_AUV_DROP_CAN_NOT_RX_THIS_PCK "DCNR" |
Packet dropped: AUV can not receive this particular type of \ packets.
Definition at line 69 of file uwUFetch_AUV.h.
| packet_t PT_BEACON_UFETCH |
BEACON packet type for UFetch protocol.
Definition at line 54 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_CBEACON_UFETCH |
CBEACON packet type for UFetch protocol.
Definition at line 57 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_CTS_UFETCH |
CTS packet type for UFetch protocol.
Definition at line 53 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_POLL_UFETCH |
POLL packet type for UFetch protocol.
Definition at line 56 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_PROBE_UFETCH |
PROBE packet type for UFetch protocol.
Definition at line 55 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_RTS_UFETCH |
RTS packet type for UFetch protocol.
Definition at line 52 of file data_link/uwUFetch/initlib.cpp.
| packet_t PT_TRIGGER_UFETCH |
Trigger packet type for UFetch protocol.
Definition at line 51 of file data_link/uwUFetch/initlib.cpp.


--- layout: post authors: ["Greg Wilson"] title: "Andromeda's Advice" date: 2013-12-19 time: "09:30:00" tags: ["Noticed"] ---
We're very pleased to announce that Andromeda Yelton will be coming to Toronto in mid-January to help teach a bootcamp for librarians. Her advice on how to do this is online, along with her reflections on what she's learned herself. There's lots of good stuff in both, and we're looking forward to lots of new ideas.


Master's Programme
"Study abroad & get foreign university degree (1 year to 2 years)"
The University has several collaborations with foreign universities where students get international exposure and a degree from renowned foreign universities. Under the credit transfer program the students pursue first 2 years at CHRIST and then they are transferred to foreign university. ( Fliers are prepared and circulated among the students.)
● Interested students can approach the Office for collecting the Application form.
● Once the student finalizes the University, the filled application form is submitted to international office
● The applications are screened to meet the eligibility. The selected students are informed through email
● A small amount of processing fee is charged from the students. Students collect the challan and pay the processing fee in the South Indian Bank.
● Letters/application forms are sent to universities and documents required for the visa purposes are procured from the foreign universities.
● Students are guided on the visa process. Students approach the consulate for visa appointment.
● Once the visa is received, the Clearance Form is submitted to IPM.
CHRIST (Deemed to be University) offers several international programmes. Below are the details some of them:
For MBA students :
1. University of Applied Sciences, Wurzberg - Schweinfurt, Germany (since 2008)
Degree : PGDM and MBA International Business
Duration : 2 years [18 months in Christ(Deemed to be University) + 6 months in Germany ]
Diploma : PGDM awarded by CHRIST (Deemed to be University)
MBA awarded by University of Applied Sciences Wurzberg - Schweinfurt, Germany (through transfer of credits)
website : www.fhws.de
2. Virginia Commonwealth University (USA Since 2010)
Degree : MBA and MS in Business
Duration : 2 years [ 15 months in CHRIST (Deemed to be University) (MBA) + 9 months in Virginia Commonwealth University, USA ]
Degree : MBA awarded by CHRIST (Deemed to be University) ,
MS in Business awarded by Virginia Commonwealth University, USA (through transfer of credits)
website : www.business.vcu.edu/christuniversity
3. Western Michigan University , USA (since 2016)
Degree : MBA and MBA
Duration : 2 years ( 1 year in CHRIST (Deemed to be University) + 1 year in Western Michigan University, USA )
Degree : MBA awarded by CHRIST (Deemed to be University),
MBA awarded by Western Michigan University, USA (through transfer of credits)
website : www.wmich.edu


Replace Successful
Abbreviations
Abbreviations
- ABBR
- Abbreviation stuff in italics successful
- ABBRACADABRA
- used for spells
- CSS
- Cascading Style Sheet
- CPA
- something cpa
- GDP
- Gross domestic product"
External Links and Descriptions
- WET-BOEW Website - Video Player
- Link to The video player from Wet-Boew
- Multimedia Player - Audio-only
- Link to the Multimedia Player - Audio-only
- Magnific Popup
- Link to the Magnific Popup
- Go Google!
- a link to google


DEVIL IN A BLUE DRESS A film review by Mark R. Leeper Copyright 1995 Mark R. Leeper
Capsule: Walter Mosely's Easy Rawlins detective stories come to the screen in a moderately complex mystery about a missing woman who figures into an election. Denzel Washington is likable as an L.A. factory worker who gets pulled into the search and involved in murder. The film is strong on atmosphere and paints an appealing picture of the post-war black community. Rating: high +1 (-4 to +4)
It's a hot summer night in L.A. Somewhere across town Philip Marlowe is getting too close to the truth. And he is also getting a mouthful of knuckles for his trouble. But that doesn't matter here because this story is about Easy Rawlins.  Not yet anyway. Right now Rawlins is just another factory worker from Texas who likes to go around in a sleeveless undershirt. In fact, he is not even that. He's had a little hard luck so Douglas Air is building their airplanes without his help, and he is trying to get by without their paycheck. With a bank account that's crawling under a duck, perhaps Easy is getting a little careless about whom he lets pay him and what he has to do for the money. In 1948 L.A. that just isn't Einstein-caliber thinking. So maybe his job tonight does smell like yesterday's fish, but at least it is easy enough and pays enough. Too much, in fact. Easy is looking for the mayor's missing girlfriend. Losing her is making the mayor feel so bad he's not even going to run for reelection. That's what the newspaper says. But somebody thinks she has a taste for black men and is hanging out in Easy's part of town. Easy is getting a C-note just for the looking for her. But the next few days are going to get tough as a one-dollar steak for Easy. He is going to be involved in murder and gunplay and crooked politicians.  That film showed Franklin had a taste for the rough stuff. But this job didn't call for quite so much. Maybe some gunplay. What it called for was late '40s atmosphere. For that he got Tak Fujimoto, a good man with a camera. And Fujimoto lathered the '40s feel on like he had to use it up. He had shot Denzel Washington before on the PHILADELPHIA job. Washington slipped into the role of Easy like it was a suit cut just for him. But muscling in on his scenes is Tom Sizemore, whose creepy panache grabs the eye like a zoot suit at a monastery. Lagging behind is Jennifer Beals as a femme fatale, playing it stiff as a rusty gate hinge.
DEVIL IN A BLUE DRESS was the first of Walter Mosley's Easy Rawlins novels, and Franklin wrote the script as if the series was a meal ticket he was expecting to punch again. While Franklin's telling of the story gives it some twists, they seemed not so much after seeing THE USUAL SUSPECTS with a plot that's tangled like a five-year-old's first fishing line. But Franklin is playing the first Easy Rawlins story with just some easy-to-take twists and some openings like he is hoping to be invited back. Easy is not just a black Philip Marlowe. Mosely and Franklin give him a simple charm and the sly smarts to make him a character worth seeing again. Not so welcome is Rawlin's sidekick Mouse, played by Don Cheadle. Mouse is a loose cannon with a looser gun and has all the appeal of green mold on a stick of butter.
DEVIL IN A BLUE DRESS was a likable piece of noir and racks up a high +1 on the -4 to +4 scale.
Mark R. Leeper<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


Since Twitter only allows us to get Tweets from days ago,
you won't have any result if you search for Tweets before the .
Be aware of the fact that Twitter restricts the maximum number of retrieved Tweets, so you may not get every results.
If this appends, reduce the dates range in order to get more specific results and try to be more specific with your search criteria.
The search may take time, so please be patient.


I believe in user-centered design, which is the only way to build meaningful user experiences. My experience of working alongside tech and business people allows me to be creative, but to understand the underlying constraints of a product.
I use my skills to deliver the whole UX process.
You can contact me via Twitter


This is demo UI for some features of Viinex video management SDK.
This demo uses Angular framework and requires modern features of your browser to be enabled.
Please make sure you use up-to-date versions of Chrome or Firefox. Microsoft Edge and Safari
are also suitable. You'll need iOS 9 or later on Apple mobile devices.
If the Angular-based UI does not load properly, you still may go to
http://demo.viinex.com/x/index.html
to take a look at HLS live video streamed by Viinex.


You can update a chart periodically to get a real-time effect by using a timer to insert the new data in the plot and redraw it.
Time between updates: milliseconds
Drool (Digital Currency Tool)
You can update a chart periodically to get a real-time effect by using a timer to insert the new data in the plot and redraw it.
Time between updates: milliseconds


Parents, Conversion and Coercion#
This section may seem more technical than the previous, but we believe that it is important to understand the meaning of parents and coercion in order to use rings and other algebraic structures in Sage effectively and efficiently.
Note that we try to explain notions, but we do not show here how to implement them. An implementation-oriented tutorial is available as a Sage thematic tutorial.
Elements#
If one wants to implement a ring in Python, a first approximation is
to create a class for the elements X
of that ring and provide it
with the required double underscore methods such as __add__
,
__sub__
, __mul__
, of course making sure that the ring axioms
hold.
As Python is a strongly typed (yet dynamically typed) language, one
might, at least at first, expect that one implements one Python class
for each ring. After all, Python contains one type <int>
for the
integers, one type <float>
for the reals, and so on. But that
approach must soon fail: There are infinitely many rings, and one can
not implement infinitely many classes.
Instead, one may create a hierarchy of classes designed to implement elements of ubiquitous algebraic structures, such as groups, rings, skew fields, commutative rings, fields, algebras, and so on.
But that means that elements of fairly different rings can have the same type.
sage: P.<x,y> = GF(3)[]
sage: Q.<a,b> = GF(4,'z')[]
sage: type(x)==type(a)
True
On the other hand, one could also have different Python classes providing different implementations of the same mathematical structure (e.g., dense matrices versus sparse matrices)
sage: P.<a> = PolynomialRing(ZZ)
sage: Q.<b> = PolynomialRing(ZZ, sparse=True)
sage: R.<c> = PolynomialRing(ZZ, implementation='NTL')
sage: type(a); type(b); type(c)
<class 'sage.rings.polynomial.polynomial_integer_dense_flint.Polynomial_integer_dense_flint'>
<class 'sage.rings.polynomial.polynomial_ring.PolynomialRing_integral_domain_with_category.element_class'>
<class 'sage.rings.polynomial.polynomial_integer_dense_ntl.Polynomial_integer_dense_ntl'>
That poses two problems: On the one hand, if one has elements that are
two instances of the same class, then one may expect that their
__add__
method will allow to add them; but one does not want that,
if the elements belong to very different rings. On the other hand, if
one has elements belonging to different implementations of the same
ring, then one wants to add them, but that is not straight forward if
they belong to different Python classes.
The solution to these problems is called “coercion” and will be explained below.
However, it is essential that each element knows what it is element of. That
is available by the method parent()
:
sage: a.parent(); b.parent(); c.parent()
Univariate Polynomial Ring in a over Integer Ring
Sparse Univariate Polynomial Ring in b over Integer Ring
Univariate Polynomial Ring in c over Integer Ring (using NTL)
Parents and categories#
Similar to the hierarchy of Python classes addressed to elements of algebraic structures, Sage also provides classes for the algebraic structures that contain these elements. Structures containing elements are called “parent structures” in Sage, and there is a base class for them. Roughly parallel to the hierarchy of mathematical notions, one has a hierarchy of classes, namely for sets, rings, fields, and so on:
sage: isinstance(QQ,Field)
True
sage: isinstance(QQ, Ring)
True
sage: isinstance(ZZ,Field)
False
sage: isinstance(ZZ, Ring)
True
In algebra, objects sharing the same kind of algebraic structures are collected in so-called “categories”. So, there is a rough analogy between the class hierarchy in Sage and the hierarchy of categories. However, this analogy of Python classes and categories shouldn’t be stressed too much. After all, mathematical categories are implemented in Sage as well:
sage: Rings()
Category of rings
sage: ZZ.category()
Join of Category of euclidean domains
and Category of infinite enumerated sets
and Category of metric spaces
sage: ZZ.category().is_subcategory(Rings())
True
sage: ZZ in Rings()
True
sage: ZZ in Fields()
False
sage: QQ in Fields()
True
While Sage’s class hierarchy is centered at implementation details, Sage’s category framework is more centered on mathematical structure. It is possible to implement generic methods and tests independent of a specific implementation in the categories.
Parent structures in Sage are supposed to be unique Python objects. For example, once a polynomial ring over a certain base ring and with a certain list of generators is created, the result is cached:
sage: RR['x','y'] is RR['x','y']
True
Types versus parents#
The type RingElement
does not correspond perfectly to the
mathematical notion of a ring element. For example, although square
matrices belong to a ring, they are not instances of RingElement
:
sage: M = Matrix(ZZ,2,2); M
[0 0]
[0 0]
sage: isinstance(M, RingElement)
False
While parents are unique, equal elements of a parent in Sage are not necessarily identical. This is in contrast to the behaviour of Python for some (albeit not all) integers:
sage: int(1) is int(1) # Python int
True
sage: int(-15) is int(-15)
False
sage: 1 is 1 # Sage Integer
False
It is important to observe that elements of different rings are in general not distinguished by their type, but by their parent:
sage: a = GF(2)(1)
sage: b = GF(5)(1)
sage: type(a) is type(b)
True
sage: parent(a)
Finite Field of size 2
sage: parent(b)
Finite Field of size 5
Hence, from an algebraic point of view, the parent of an element is more important than its type.
Conversion versus Coercion#
In some cases it is possible to convert an element of one parent structure into an element of a different parent structure. Such conversion can either be explicit or implicit (this is called coercion).
The reader may know the notions type conversion and type coercion from, e.g., the C programming language. There are notions of conversion and coercion in Sage as well. But the notions in Sage are centered on parents, not on types. So, please don’t confuse type conversion in C with conversion in Sage!
We give here a rather brief account. For a detailed description and for information on the implementation, we refer to the section on coercion in the reference manual and to the thematic tutorial.
There are two extremal positions concerning the possibility of doing arithmetic with elements of different rings:
Different rings are different worlds, and it makes no sense whatsoever to add or multiply elements of different rings; even
1 + 1/2
makes no sense, since the first summand is an integer and the second a rational.
Or
If an element
r1
of one ringR1
can somehow be interpreted in another ringR2
, then all arithmetic operations involvingr1
and any element ofR2
are allowed. The multiplicative unit exists in all fields and many rings, and they should all be equal.
Sage favours a compromise. If P1
and P2
are parent structures
and p1
is an element of P1
, then the user may explicitly ask
for an interpretation of p1
in P2
. This may not be meaningful
in all cases or not be defined for all elements of P1
, and it is
up to the user to ensure that it makes sense. We refer to this as
conversion:
sage: a = GF(2)(1)
sage: b = GF(5)(1)
sage: GF(5)(a) == b
True
sage: GF(2)(b) == a
True
However, an implicit (or automatic) conversion will only happen if this can be done thoroughly and consistently. Mathematical rigour is essential at that point.
Such an implicit conversion is called coercion. If coercion is defined, then it must coincide with conversion. Two conditions must be satisfied for a coercion to be defined:
A coercion from
P1
toP2
must be given by a structure preserving map (e.g., a ring homomorphism). It does not suffice that some elements ofP1
can be mapped toP2
, and the map must respect the algebraic structure ofP1
.The choice of these coercion maps must be consistent: If
P3
is a third parent structure, then the composition of the chosen coercion fromP1
toP2
with the coercion fromP2
toP3
must coincide with the chosen coercion fromP1
toP3
. In particular, if there is a coercion fromP1
toP2
andP2
toP1
, the composition must be the identity map ofP1
.
So, although it is possible to convert each element of GF(2)
into
GF(5)
, there is no coercion, since there is no ring homomorphism
between GF(2)
and GF(5)
.
The second aspect - consistency - is a bit more difficult to explain. We illustrate it with multivariate polynomial rings. In applications, it certainly makes most sense to have name preserving coercions. So, we have:
sage: R1.<x,y> = ZZ[]
sage: R2 = ZZ['y','x']
sage: R2.has_coerce_map_from(R1)
True
sage: R2(x)
x
sage: R2(y)
y
If there is no name preserving ring homomorphism, coercion is not defined. However, conversion may still be possible, namely by mapping ring generators according to their position in the list of generators:
sage: R3 = ZZ['z','x']
sage: R3.has_coerce_map_from(R1)
False
sage: R3(x)
z
sage: R3(y)
x
But such position preserving conversions do not qualify as coercion:
By composing a name preserving map from ZZ['x','y']
to ZZ['y','x']
with a position preserving map from ZZ['y','x']
to ZZ['a','b']
,
a map would result that is neither name preserving nor position preserving,
in violation to consistency.
If there is a coercion, it will be used to compare elements of
different rings or to do arithmetic. This is often convenient, but
the user should be aware that extending the ==
-relation across
the borders of different parents may easily result in overdoing it.
For example, while ==
is supposed to be an equivalence relation
on the elements of one ring, this is not necessarily the case if
different rings are involved. For example, 1
in ZZ
and in
a finite field are considered equal, since there is a canonical coercion
from the integers to any finite field. However, in general there is no
coercion between two different finite fields. Therefore we have
sage: GF(5)(1) == 1
True
sage: 1 == GF(2)(1)
True
sage: GF(5)(1) == GF(2)(1)
False
sage: GF(5)(1) != GF(2)(1)
True
Similarly, we have
sage: R3(R1.1) == R3.1
True
sage: R1.1 == R3.1
False
sage: R1.1 != R3.1
True
Another consequence of the consistency condition is that coercions can
only go from exact rings (e.g., the rationals QQ
) to inexact rings
(e.g., real numbers with a fixed precision RR
), but not the other
way around. The reason is that the composition of the coercion from
QQ
to RR
with a conversion from RR
to QQ
is supposed
to be the identity on QQ
. But this is impossible, since some
distinct rational numbers may very well be treated equal in RR
, as
in the following example:
sage: RR(1/10^200+1/10^100) == RR(1/10^100)
True
sage: 1/10^200+1/10^100 == 1/10^100
False
When comparing elements of two parents P1
and P2
, it is possible
that there is no coercion between the two rings, but there is a canonical
choice of a parent P3
so that both P1
and P2
coerce into P3
.
In this case, coercion will take place as well. A typical use case is the
sum of a rational number and a polynomial with integer coefficients, yielding
a polynomial with rational coefficients:
sage: P1.<x> = ZZ[]
sage: p = 2*x+3
sage: q = 1/2
sage: parent(p)
Univariate Polynomial Ring in x over Integer Ring
sage: parent(p+q)
Univariate Polynomial Ring in x over Rational Field
Note that in principle the result would also make sense in the
fraction field of ZZ['x']
. However, Sage tries to choose a
canonical common parent that seems to be most natural (QQ['x']
in our example). If several potential common parents seem equally
natural, Sage will not pick one of them at random, in order to have
a reliable result. The mechanisms which that choice is based upon is
explained in the
thematic tutorial.
No coercion into a common parent will take place in the following example:
sage: R.<x> = QQ[]
sage: S.<y> = QQ[]
sage: x+y
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for +: 'Univariate Polynomial Ring in x over Rational Field' and 'Univariate Polynomial Ring in y over Rational Field'
The reason is that Sage would not choose one of the potential
candidates QQ['x']['y']
, QQ['y']['x']
, QQ['x','y']
or
QQ['y','x']
, because all of these four pairwise different
structures seem natural common parents, and there is no apparent
canonical choice.


Advisor: But why would there be cookies in the ground, your majesty?
Gus: Are you contradicting me?!?
Advisor: Oh, of course not, your majesty, no!
Mining seems to be a bit romanticized in fiction, from the idea of being able to strike it rich with one lucky stroke, to the horror of thinking that you might have to stay the rest of your life inside a mine working for an evil overlord. Since mining seems to be so interesting, any resource the characters need will be mined from the ground. Any resource.
A Comedy Trope in which an off-beat setting includes mines, wells or springs for substances that do not actually occur naturally in the Earth's crust (but that do exist; Unobtanium mines don't count. Neither do mines that are named after something abnormal, but are still normal mineral mines.) Foodstuffs are particularly common.
If the entire landscape is built of food, it's Level Ate. Compare to Grows on Trees.
Examples:
- A TV advert for "Pot Noodle", a British snack food played up a whole bunch of Welsh stereotypes about mining for the noodles that go into it at the "Crumlin Noodle Mine". See it here.
- Digimon Adventure 02: In the episode "Steel Angel, Shakkoumon" ("Stone Soup" in the dub), the soup served at a Chinese restaurant, run by a Digitamamon eventually turns out to come from a spring. The same spring later turns out to contain the last Holy Stone.
- In Ken Dodd's comedy routines about the Diddymen of Knotty Ash, the Diddymen worked in a jam butty (sandwich) mine.
- The merchandise tie-in comic book Air Raiders is set in a world where "air is more valuable than gold." Mention is made of "air mines", "air refinerys", and "air farms"...
Linkara: Which is it, comic? Is air mined or farmed?
- This gag appeared a few times in The Simpsons comics.
- When Bart gets Principle Skinner deported to Canada with fraudulent paperwork, Skinner ends up having to escape forced labor in the Maple Syrup mines.
- When the town splits, with Lower Springfield taking the water supply with them, the affluent Upper Springfielder start deliriously talking about Lower Springfilders enslaving them to work in their water mines.
- The Greek poet Homer (as played by Homer Simpson) claims to have faked blindness to get out of being a slave in the olive mines.
- Rudolph the Red-Nosed Reindeer: In a scene that has since been cut from the original television airing, Yukon Cornelius tests the ground around Santa's Workshop with his pickaxe and finds an underground peppermint mine. He then reveals that the peppermint is actually what he's been searching for (not silver and gold like he originally thought), which explains why he licks his pickaxe after testing the ground.
Yukon Cornelius: Peppermint! What I've been searching for all my life! I've struck it rich! I've got me a peppermint mine! Wahoo!
- In Charlie and the Chocolate Factory, the Oompa-Loompas are seen mining chunks of chocolate from Cocoa Mountain, a literal mountain of solid chocolate caught in an icy blizzard inside the factory.
- Treacle mines and treacle wells are a common concept in English folklore, and may have inspired Lewis Carroll and Terry Pratchett.
- Alice's Adventures in Wonderland:
- When the Dormouse tells a story about three sisters who lived at the bottom of a well and lived on treacle, Alice asks "Why did they live at the bottom of a well?" and he replies "It was a treacle well." This is a play on words: before it meant "molasses," the word "treacle" meant "medicine," so a "treacle well" was a well with allegedly healing waters, but Carroll imagines it here as a well full of treacle instead of water.
- Discussed when Alice asks if mustard is a mineral, the Duchess says that it is and that there's a mustard mine nearby. Upon hearing this, Alice realises that it actually isn't a mineral and tries to correct the Duchess but she won't listen.
"And the moral of that is — 'The more there is of mine, the less there is of yours.'"
- The book Charlie and the Chocolate Factory mentions a rock candy mine but it's never seen. Also in Charlie and the Great Glass Elevator, they go past a chocolate mine and, indeed, strike chocolate.
- Discworld:
- Treacle mines are mentioned in several books, and Treacle Mine Road is a location in Ankh-Morpork. Terry Pratchett actually goes into a bit of detail as to how these occurred; the treacle seams are made of fossilised sugar cane. The Discworld Companion says that there were also treacle deposits under Genua, but the heat and moisture transformed them into rum springs.
- Much of The Fifth Elephant revolves around, and takes place in, the "fat mines" of Uberwald. Vimes is sent there to negotiate a trade package for raw fat that has been preserved underground so that Ankh-Morpork can make candles and soap and the like. It's speculated to be either the remains of the titular Fifth Elephant or the result of some cataclysm that buried many shaggy, blubbery megafauna all at once.
- Llamedos (the Disc's equivalent of Wales) apparently has rain mines.
- There's a number mine in The Phantom Tollbooth. (Words, on the other hand, grow on trees.)
- The Hitchhiker's Guide to the Galaxy: One of the many things the captain of the Golgafrinchan B-Ark looks forward to is a hot spring to warm his bath with, preferably one in a nice leafy glade with a nearby soap mine. His response to anyone who doesn't think that soap can be mined is that perhaps no-one has looked hard enough, a possibility that is "reluctantly acknowledged".
- Invoked on The Big Bang Theory. When Penny complains about playing a made-up game, Sheldon counters that "all games are made up. They are not found in nature. No-one digs in the ground and finds a rich vein of Rock'em Sock'em Robots."
- The Goodies episode "Bunfight at the OK Tearooms", in which the Goodies find cream in an old tin mine in Cornwall, leading to a cream rush. They later strike strawberry jam. (It's also suggested that the old tin mine used to produce "old tins".)
- The folk song "Big Rock Candy Mountain" by Harry McClintock mentions cigarette trees, lemonade springs, streams of alcohol, a lake of stew, crystal fountains, and handouts that grow on bushes.
- Similar to the Spaghetti Hoax mentioned on Grows on Trees, an NPR economics correspondent once filed a story on cheese mining. It was set at the Lombardi Cheese Mine in Wisconsin, and the Parmesan Mine in Italy. The reporter quoted one miner: "People just have crazy ideas. Some people think cheese comes from cows! There's only one way to get cheese, and that's to dig it out of the ground." The date of the report was April 1.
- In Cookie Clicker, you can procure cookies in many absurd ways. Mining is one of the earlier options. Although the game suggests the planet is composed at least partially of cookie dough.
- James Pond 3: Operation StarFI5H is about Dr. Maybe mining cheese from the moon. The whole moon is made of not just cheese, but other dairy products too, but Dr. Maybe wants to mine specific, valuable cheese. The "Cheese Mine" levels are destroyed when James Pond clears them, which creates a Permanently Missable Content situation in one level with a Micro-Map.
- In Kingdom of Loathing and Spin-Off West of Loathing, meat (in the form of sirloin steaks) is both mined and chopped off of monsters. KoL players can also dig up things like cardboard, bubble wrap, and Velcro ore. WoL also has soup wells (presumably from hot springs boiling said meat into stew). While meat is used as money, the soup really is eaten.
- Lucky Tower: In the second game, during the credits from the ending in which Von Wanst becomes king, he can be seen sending slaves to a cake mine to bring him all the cake he wants.
- In Moshi Monsters, all candy sold at the Gross-ery Store is mined in the Candy Cane Caves, where marshmallow, toffee, liquorice, cake and all sort of other sweet treats naturally grow. Chocolate is taken to the Chocolate Refinery to create Chocolate Eggs.
- Scribblenauts Unlimited: in the "Kana Craters" stage, which is set on the moon, Maxwell encounters a mouse who is convinced the moon contains cheese and asks for a tool to mine for it. If Maxwell gives the mouse a useful tool, like a pickaxe, the mouse will indeed strike cheese, earning Maxwell the Moon Gold shard.
- In Transport Tycoon, the Toyland climate features Toffee and Sugar mines.
- World of Warcraft
- In the Beta and early release there were reports of people occasionally mining clam meat from mineral veins.
- In Ice Crown, you can mine Saronite. This contains or possibly is entirely the blood of the Eldritch Abomination Yog-Saron, God of Death, drives people who mine it mad, and naturally forms into the shape of skulls when smelted.
- A side quest in Borderlands: The Pre-Sequel! in The Claptastic Voyage DLC called "Chip's Data Mining Adventure" has the Vault Hunter going through a mine shaft and mining for embarrassing data relating to Claptrap.
- In Freefall, Sam tricked a gullible robot into buying shares in a meat mine. Fortunately he paid with 50 kg of diamonds, which Sam presumably hadn't realized yet were worthless on Jean.

- One VG Cats strip had Leo, mocking MMORPG players, spout several nonsensical lines including "How I mine for fish?"
- The main characters of Breadwinners deliver bread, which they get from mines deep in the planet of Pondgea.
- The Clangers has a "soup well".
- Codename: Kids Next Door:
- In "Operation: P.O.O.L.", the villain often threatens to send people to work in the broccoli mines.
- "Operation N.U.G.G.E.T." is a Cowboy Episode where kids pans a river for chicken nuggets instead of gold nuggets. It may or may not have been a dream.
- In "Operation: R.E.C.E.S.S.", salad oil is discovered under the school playground and so the adults transform the playground into an oil field and force the kids to work there during recess. After the KND sabotage the adult's plans to sell the oil, the playground is returned to normal, but then they strike prune juice.
- And in a similar fashion, "Operation: U.N.D.E.R.C.O.V.E.R." features adults extracting coffee on an off-shore rig as if it were oil.
- The main setting of Jelly Jamm is Planet Jammbo, the source of all the music in the universe. According to the explanation the planet's Queen gives to Bello about how her castle's music factory works, the music is apparently a mineral that is mined from underground and then refined in the factory before eventually being converted into bubbles that float in the sky and off into space.
- Looney Tunes:
- Subverted in "Lumber Jack-Rabbit", Bugs Bunny thinks he found a "carrot mine" and proceeds to dig through. Actually, he stumbled upon Paul Bunyan's garden, and those were just normal-sized carrots to a giant.
- At the end of the "Oily Hare" short, a Texas oilman dynamites Bugs Bunny's rabbit hole in hopes of an oil gusher. But instead it ends up gushing carrots, obviously to Bugs' delight.
- Played for Laughs in the Recess episode "King Gus". Gus is made king of the playground while Bob's away, and promptly go mad with power. His demands include that everyone start mining for cookies (his/Bob's advisors are too afraid to contradict him).
- In The Simpsons episode "Deep Space Homer", when Kent Brockman is welcoming Earth's "new insect overlords" he volunteers to help round up slave labour for their "underground sugar caves".
- The SpongeBob SquarePants episode "Mustard O' Mine" is about SpongeBob, Patrick, and Squidward going to the Mustard Mines to get more mustard for the Krusty Krab. Other condiments, like mayonnaise, ketchup, and hot sauce are found in the mine as well.
- In Underdog, the home planet of the villain Overcat possesses "milk wells" which are similar to oil wells. One episode is kicked off when the milk wells begin to run dry and he first steals Earth's supply of milking cows and then Sweet Polly Purebred to act as milk maid.
- One U.S. Acres segment on Garfield and Friends had Orson, Roy, and Wade go up to an old mine that their grandfathers had been mining in, which is revealed to contain chocolate. Unlike many instances of the trope, Orson recognizes that chocolate doesn't normally come from mines, but his grandfather's journal actually has an explanation for how it came to be: lightning hit cacao trees, and the charred beans combined with sugars from plants.
- One Bad Future episode of The Grim Adventures of Billy & Mandy is a parody of God-Emperor of Dune, where Mandy has become an immortal human-worm hybrid God Empress in the style of Emperor Leto. She maintains control of the world by keeping control of the spice equivalent, cinnamon. Her empire gets it from cinnamon mines instead of... you know... growing cinnamon trees.


Substance 5 API change overview
Removed client properties
- BACKGROUND_COMPOSITE, OVERLAY_PROPERTY.
- BORDER_PAINTER_PROPERTY, GRADIENT_PAINTER_PROPERTY, THEME_PROPERTY, TITLE_PAINTER_PROPERTY.
Use custom skin + COLORIZATION_FACTOR for colorizing components
- ENABLE_INVERTED_THEMES, ENABLE_NEGATED_THEMES
- GRIP_PAINTER
- PAINT_ACTIVE_PROPERTY
- TABBED_PANE_VERTICAL_ORIENTATION, TABBED_PANE_VERTICAL_ORIENTATION_ROTATE_ICONS -
left / right tabs are always rotated
- WATERMARK_IMAGE_KIND, WATERMARK_IMAGE_OPACITY, WATERMARK_IMAGE_PROPERTY -
use APIs on SubstanceImageWatermark
Modified client properties
- COLORIZATION_FACTOR - the colorization is on by default with
value of 50%. To remove colorization, set the client property value to 0.0
- NO_EXTRA_ELEMENTS - use SHOW_EXTRA_WIDGETS. The widgets are not
added by default (menu search panel, system menu entries, lock icon).
- WATERMARK_IGNORE, WATERMARK_TO_BLEED - use WATERMARK_VISIBLE.
Trees, tables, lists and text components don't show watermark unless
WATERMARK_VISIBLE is explicitly set to Boolean.TRUE
New client properties
- SKIN_PROPERTY - on the root pane to install a per-window
skin.
- WATERMARK_VISIBLE - combines WATERMARK_IGNORE and WATERMARK_TO_BLEED
- SHOW_EXTRA_WIDGETS - replaces NO_EXTRA_ELEMENTS
Removed VM flags
- CONFIG_FILE
- BORDER_PAINTER_PROPERTY, GRADIENT_PAINTER_PROPERTY, THEME_PROPERTY,
BUTTON_SHAPER_PROPERTY, TITLE_PAINTER_PROPERTY, WATERMARK_PROPERTY
- DEBUG_UI_MODE - use the substance-tools plugin
- ENABLE_INVERTED_THEMES, ENABLE_NEGATED_THEMES
- NO_EXTRA_ELEMENTS
- WATERMARK_IMAGE_KIND, WATERMARK_IMAGE_OPACITY, WATERMARK_IMAGE_PROPERTY
Modified VM flags
- HEAP_STATUS_PANEL - use setWidgetVisible(SubstanceWidgetType.TITLE_PANE_HEAP_STATUS)
and HEAP_STATUS_TRACE_FILE
New VM flags
- HEAP_STATUS_TRACE_FILE - replaces HEAP_STATUS_PANEL
Removed APIs
- addMixedTheme, addMixedThemeBy, hasMixedThemes, removeMixedTheme,
removeMixedThemeBy along with SubstanceMixTheme and
SubstanceMixBiTheme
- getActiveColorScheme, getDefaultColorScheme, getDisabledColorScheme
- getBackgroundComposite, setBackgroundComposite
- getCurrent*, getCurrent*Name, setCurrent*, register*ChangeListener,
unregister*ChangeListener, getAll*s for border painters, button shapers,
gradient painters, themes and watermarks. To get the current settings,
use getCurrentSkin and SubstanceSkin APIs. To change the current settings,
create a custom skin and use setSkin.
- getImageWatermarkKind, getImageWatermarkOpacity, setImageWatermarkKind,
setImageWatermarkOpacity - use getSkin, SubstanceSkin.getWatermark and
SubstanceImageWatermark APIs
- hideMenuSearchPanels, showMenuSearchPanels - use
setWidgetVisible(SubstanceWidgetType.MENU_SEARCH)
- permanentlyHideHeapStatusPanel, permanentlyShowHeapStatusPanel
- use setWidgetVisible(SubstanceWidgetType.TITLE_PANE_HEAP_STATUS)
- toBleedWatermark
- toEnableInvertedThemes, toEnableNegatedThemes
- ignoreAnimationsOnClass, toIgnoreAnimation - use FadeConfigurationManager
APIs
- toShowExtraElements
New APIs
- getCurrentSkin and the relevant SubstanceSkin APIs
- setWidgetVisible - currently for menu search and title pane
heap status panel


Contact us
Type any Title or Keyword and hit "Search"
search
CATEGORIES
Historical
view more
Environmental
view more
Social
view more
Geological
view more
Explore more...
view more
Historical
view more
Environmental
view more
Social
view more
Geological
view more
Explore more...
view more
Historical
view more
Environmental
view more
Social
view more
Geological
view more


Hurts worked on ball security during post-game workout
NORMAN — Oklahoma quarterback Jalen Hurts was doing his usual post-game workout in the early hours of Sunday morning, but, this time, he had an extra focus.
When the Sooners landed in Norman around 2 a.m. Sunday morning after beating Baylor 34-31, Hurts was practicing his ball security while he went through his now-routine, post-game workout.
Hurts fumbled the ball three times against the Bears. He recovered the ball once, but Baylor recovered the other two.
"It ain't the first time I've fumbled, and it probably won't be the last," Hurts said.
One of Hurts' fumbles against Baylor came in the third quarter as he was trying to get into the end zone. The ball was stripped out of his arm before he crossed the goal line, and the Bears recovered. Afterward, Hurts acknowledged his struggle with ball security in the game.
"My ball security, it sucks," Hurts said. "So I'll try to fix it."
Hurts said practice and focus are the only ways to keep from fumbling. Hurts has fumbled six times this season and lost it four times, according to CBSSports.
"What do shooters do when they really wanna hit shots? They keep shooting," Hurts said. "So (I) gotta keep going."
Hurts named Big 12 Offensive Player of Week
Jalen Hurts was named the Big 12 Offensive Player of the Week, the conference announced on Monday.
Hurts threw for 297 yards and four touchdowns and ran for 114 yards in Oklahoma's 34-31 win over Baylor on Saturday.
Hurts led Oklahoma's second half comeback on offense, after the Sooners had struggled to get going on the defense.
This is the third time this season Hurts has earned conference player of the week honors.
Sooners' O-line named semifinalist for Joe Moore Award
Oklahoma's offensive line is a semifinalist for the Joe Moore Award, it was announced Tuesday.
The Joe Moore Award is given annually to the nation's top offensive line unit, and the Sooners are one of 10 semifinalists.
The Sooners' offense leads the nation in yards per play, averaging 8.8 yards so far this season and ranks No. 3 nationally with 6.5 yards per rush.
Oklahoma won the Joe Moore Award last season.
Other semifinalists for the award include Alabama, Clemson, Georgia, LSU and Ohio State.
Finalists will be announced on Dec. 10, and the winning unit will be announced after a surprise visit to the winning team's campus in late December.
Sooners-Baylor highest rated game on Saturday
Oklahoma's comeback over Baylor was historical, and it made for great TV.
The Sooners' 34-31 win over the Bears was the most watched game of the week across all networks, attracting 6,785,000 viewers. It was the eighth most viewed game of the season across all networks.
Among full national windows only, the game was ABC's highest viewed Big 12 intra-conference game since Oklahoma played Oklahoma State in 2013.
Abby Bitterman, Staff writer


Subscribe to be notified when new content is posted:
I take your privacy seriously, and will not share this email or send you spam. This is purely so I can notify you when new posts are added!


Content
- Make Fewer HTTP Requests
- Reduce DNS Lookups
- Avoid Redirects
- Make Ajax Cacheable
- Postload Components
- Preload Components
- Reduce the Number of DOM Elements
- Split Components Across Domains
- Minimize Number of iframes
- Avoid 404s
---
layout: slide
title: Web Site Performance
description: Best Practices for Speeding Up Your Web Site
links:
- http://developer.yahoo.com/performance/rules.html
---
80% of the end-user response time is spent on the front-end. Most of this time is tied up in downloading all the components in the page: images, stylesheets, scripts, Flash, etc. Reducing the number of components in turn reduces the number of HTTP requests required to render the page. This is the key to faster pages. One way to reduce the number of components in the page is to simplify the page's design. Combined files are a way to reduce the number of HTTP requests by combining all scripts into a single script, and similarly combining all CSS into a single stylesheet. CSS Sprites are the preferred method for reducing the number of image requests. Combine your background images into a single image and use the CSS Image maps combine multiple images into a single image. Image maps only work if the images are contiguous in the page, such as a navigation bar. Defining the coordinates of image maps can be tedious and error prone. Using image maps for navigation is not accessible too, so it's not recommended. Inline images use the data: URL scheme to embed the image data in the actual page. This can increase the size of your HTML document. Combining inline images into your (cached) stylesheets is a way to reduce HTTP requests and avoid increasing the size of your pages. To learn more: Reducing the number of HTTP requests in your page is the place to start. This is the most important guideline for improving performance for first time visitors. 40-60% of daily visitors to your site come in with an empty cache. Making your page fast for these first time visitors is key to a better user experience.
The Domain Name System (DNS) maps hostnames to IP addresses. DNS has a cost. It typically takes 20-120 milliseconds for DNS to lookup the IP address for a given hostname. The browser can't download anything from this hostname until the DNS lookup is completed. DNS lookups are cached for better performance. Reducing the number of unique hostnames reduces the number of DNS lookups. The guideline is to split these components across at least two but no more than four hostnames. This results in a good compromise between reducing DNS lookups and allowing a high degree of parallel downloads. Redirects are accomplished using the 301 and 302 status codes. The main thing to remember is that redirects slow down the user experience. Inserting a redirect between the user and the HTML document delays everything in the page since nothing in the page can be rendered and no components can start being downloaded until the HTML document has arrived. Using Ajax is no guarantee that the user won't be twiddling his thumbs waiting for those asynchronous JavaScript and XML responses to return. It's important to remember that "asynchronous" does not imply "instantaneous". The most important way to improve the performance of Ajax is to make the responses cacheable, as discussed in Add an Expires or a Cache-Control Header. Some of the other rules also apply to Ajax: Even though your Ajax responses are created dynamically, and might only be applicable to a single user, they can still be cached. Doing so will make your apps faster.
You can take a closer look at your page and ask yourself: "What's absolutely required in order to render the page initially?". The rest of the content and components can wait.
JavaScript is an ideal candidate for splitting before and after the onload event.
The idea of progressive enhancement tells us that JavaScript, when supported, can improve the user experience but you have to make sure the page works even without JavaScript. So after you've made sure the page works fine, you can enhance it with some post-loaded scripts that give you more bells and whistles such as drag and drop and animations.
Preload may look like the opposite of post-load, but it actually has a different goal. By preloading components you can take advantage of the time the browser is idle and request components (like images, styles and scripts) you'll need in the future.
A complex page means more bytes to download and it also means slower DOM access in JavaScript. It makes a difference if you loop through 500 or 5000 DOM elements on the page when you want to add an event handler for example.
The number of DOM elements is easy to test, just type in Firebug's console:
Splitting components allows you to maximize parallel downloads. Make sure you're using not more than 2-4 domains because of the DNS lookup penalty. For example, you can host your HTML and dynamic content on
Iframes allow an HTML document to be inserted in the parent document. It's important to understand how iframes work so they can be used effectively.
HTTP requests are expensive so making an HTTP request and getting a useless response (i.e. 404 Not Found) is totally unnecessary and will slow down the user experience without any benefit.
Some sites have helpful 404s "Did you mean X?", which is great for the user experience but also wastes server resources (like database, etc).
Check out CSS Tricks' 404 Page
Particularly bad is when the link to an external JavaScript is wrong and the result is a 404. First, this download will block parallel downloads. Next the browser may try to parse the 404 response body as if it were JavaScript code, trying to find something usable in it. A content delivery network (CDN) is a collection of web servers distributed across multiple locations to deliver content more efficiently to users. The server selected for delivering content to a specific user is typically based on a measure of network proximity. Some large Internet companies own their own CDN, but it's cost-effective to use a CDN service provider, such as Microsoft Azure CDN, Akamai Technologies, EdgeCast, or level3. If you use a far future Expires header you have to change the component's filename whenever the component changes. We often make this step part of the build process: a version number is embedded in the component's filename, for example, Starting with HTTP/1.1, web clients indicate support for compression with the Accept-Encoding header in the HTTP request. If the web server sees this header in the request, it may compress the response using one of the methods listed by the client. Later, if the browser has to validate a component, it uses the
When users request a page, it can take anywhere from 200 to 500ms for the backend server to stitch together the HTML page. During this time, the browser is idle as it waits for the data to arrive. In PHP you have the function flush(). It allows you to send your partially ready HTML response to the browser so that the browser can start fetching components while your backend is busy with the rest of the HTML page.
A good place to consider flushing is right after the HEAD because the HTML for the head is usually easier to produce and it allows you to include any CSS and JavaScript files for the browser to start fetching in parallel while the backend is still processing.
When using An interesting side affect is that POST without actually posting any data behaves like GET. Based on the HTTP specs, GET is meant for retrieving information, so it makes sense (semantically) to use GET when you're only requesting data, as opposed to sending data to be stored server-side.
Image with empty string src attribute occurs more than one will expect. It appears in two form: Both forms cause the same effect: browser makes another request to your server.
HTTP cookies are used for a variety of reasons such as authentication and personalization. Information about cookies is exchanged in the HTTP headers between web servers and browsers. It's important to keep the size of cookies as low as possible to minimize the impact on the user's response time.
When the browser makes a request for a static image and sends cookies together with the request, the server doesn't have any use for those cookies. So they only create network traffic for no good reason. You should make sure static components are requested with cookie-free requests. Create a subdomain and host all your static components there.
Moving stylesheets to the document HEAD makes pages appear to be loading faster. This is because putting stylesheets in the HEAD allows the page to render progressively. The problem with putting stylesheets near the bottom of the document is that it prohibits progressive rendering in many browsers, including Internet Explorer. These browsers block rendering to avoid having to redraw elements of the page if their styles change. The user is stuck viewing a blank white page.
The HTML specification clearly states that stylesheets are to be included in the HEAD of the page:
The list includes 35 best practices divided into 7 categories
Content
Minimize HTTP Requests
Is there a way to build pages with richer content while also achieving fast response times?
Combine files
CSS Sprites
background-image
and background-position
properties to display the desired image segment.
.app-icon-read {
background-position: 0 0;
}
.app-icon {
background: url("/pics/app/app_icons_50_5.jpg") no-repeat scroll 0 0 transparent;
border-radius: 10px 10px 10px 10px;
box-shadow: 1px 1px 2px #999999;
display: inline-block;
height: 50px;
width: 50px;
}
Image Maps
Inline Images
data:[<mime type>][;charset=<charset>][;base64],<encoded data>

Summary
Reduce DNS Lookups
Guideline
Avoid Redirects
HTTP/1.1 301 Moved Permanently
Location: http://example.com/newuri
Content-Type: text/html
Common Reason of 302
Guidelines
Alias
and URL Rewrite
if the two code paths are hosted on the same server. Alias
or URL Rewrite
.Make Ajax Cacheable
Post-load Components
Preload Components
Types of preloading
Reduce the Number of DOM Elements
document.getElementsByTagName('*').length
Split Components Across Domains
www.example.org
and split static components between static1.example.org
and static2.example.org
Minimize the Number of iframes
iframe Pros and Cons
No 404s
Server
Use a Content Delivery Network
Add an Expires or a Cache-Control Header
Expires
headerCache-Control
header to help the browser with conditional requestsCache-Control public, max-age=31536000
Content-Length 9760
Content-Type image/png
Date Thu, 18 Dec 2014 23:17:07 GMT
Expires Fri, 18 Dec 2015 23:17:07 GMT
Last-Modified Mon, 02 Apr 2012 00:13:23 GMT
Server sffe
X-Content-Type-Options nosniff
X-Firefox-Spdy 3.1
X-XSS-Protection 1; mode=block
script_2.0.6.js
.Gzip Components
Accept-Encoding: gzip, deflate
Content-Encoding: gzip
Gzip efficiency
Gzip file type
Configure ETags
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195
If-None-Match
header to pass the ETag back to the origin server. If the ETags match, a 304 status code is returned reducing the response by 12195 bytes for this example.
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"
HTTP/1.1 304 Not Modified
Flush the Buffer Early
...

<?php flush(); ?>

...
Use GET for AJAX Requests
XMLHttpRequest
, POST is implemented in the browsers as a two-step process: sending the headers first, then sending data. So it's best to use GET, which only takes one TCP packet to send (unless you have a lot of cookies). The maximum URL length in IE is 2K, so if you send more than 2K data you might not be able to use GET.
Avoid Empty Image src
Browser Behaviors
Why is this behavior bad?
Reduce Cookie Size
Guidelines
Use Cookie-free Domains for Components
www.example.org
, you can host your static components on static.example.org
. However, if you've already set cookies on the top-level domain
example.org
as opposed to www.example.org
, then all the requests to
static.example.org
will include those cookies. In this case, you can buy a whole new domain, host your static components there, and keep this domain cookie-free. Yahoo! uses yimg.com
, YouTube uses ytimg.com
, Amazon uses images-amazon.com
and so on.
CSS
Put Stylesheets at the Top
"Unlike A, [LINK] may only appear in the HEAD section of a document, although it may appear any number of times."
Neither of the alternatives, the blank white screen or flash of unstyled content, are worth the risk. The optimal solution is to follow the HTML specification and load your stylesheets in the document HEAD.
CSS expressions are a powerful (and dangerous) way to set CSS properties dynamically. They were supported in Internet Explorer starting with version 5, but were deprecated starting with IE8.
background-color: expression((new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
The problem with expressions is that they are evaluated more frequently than most people expect. Not only are they evaluated when the page is rendered and resized, but also when the page is scrolled and even when the user moves the mouse over the page.
One of the previous best practices states that CSS should be at the top in order to allow for progressive rendering.
@import
will only trigger the resource download until the @import is parsed, so it adds additional critical round trips.
The IE-proprietary AlphaImageLoader
filter aims to fix a problem with semi-transparent true color PNGs in IE versions < 7.
The problem caused by scripts is that they block parallel downloads.
The HTTP/1.1 specification suggests that browsers download no more than two components in parallel per hostname. If you serve your images from multiple hostnames, you can get more than two downloads to occur in parallel. While a script is downloading, however, the browser won't start any other downloads, even on different hostnames.
Many of these performance rules deal with how external components are managed. However, before these considerations arise you should ask a more basic question:
Should JavaScript and CSS be contained in external files, or inlined in the page itself?
The key factor, then, is the frequency with which external JavaScript and CSS components are cached relative to the number of HTML documents requested .
This factor, although difficult to quantify, can be gauged using various metrics. If users on your site have multiple page views per session and many of your pages re-use the same scripts and stylesheets, there is a greater potential benefit from cached external files.
Minification is the practice of removing unnecessary characters from code to reduce its size thereby improving load times.
Two popular tools for minifying JavaScript code are JSMin and YUI Compressor. The YUI compressor can also minify CSS.
Obfuscation is an alternative optimization that can be applied to source code. It's more complex than minification and thus more likely to generate bugs as a result of the obfuscation step itself. In a survey of ten top U.S. web sites, minification achieved a 21% size reduction versus 25% for obfuscation. Although obfuscation has a higher size reduction, minifying JavaScript is less risky.
In addition to minifying external scripts and styles, inlined
An alternative in PHP would be to create a function called insertScript
.
<?php insertScript("menu.js") ?>
In addition to preventing the same script from being inserted multiple times, this function could handle other issues with scripts, such as dependency checking and adding version numbers to script filenames to support far future Expires headers.
Accessing DOM elements with JavaScript is slow so in order to have a more responsive page, you should:
For more information check the YUI theatre's "High Performance Ajax Applications" by Julien Lecomte.
Sometimes pages feel less responsive because of too many event handlers attached to different elements of the DOM tree which are then executed too often. That's why using event delegation is a good approach.
You also don't need to wait for the onload event in order to start doing something with the DOM tree. Often all you need is the element you want to access to be available in the tree. You don't have to wait for all images to be downloaded.
DOMContentLoaded
is the event you might consider using instead of onload, but until it's available in all browsers, you can use the YUI Event utility, which has an onAvailable
method.
After a designer is done with creating the images for your web page, there are still some things you can try before you FTP those images to your web server.
identify -verbose image.gif
When you see an image using 4 colors and a 256 color "slots" in the palette, there is room for improvement.
convert image.gif image.png
pngcrush image.png -rem alla -reduce -brute result.png
jpegtran -copy none -optimize -perfect src.jpg dest.jpg
Don't use a bigger image than you need just because you can set the width and height in HTML. If you need

then your image (mycat.jpg) should be 100x100px rather than a scaled down 500x500px image.
Since favicon is on the same server, cookies are sent every time it's requested. This image also interferes with the download sequence, for example in IE when you request extra components in the onload, the favicon will be downloaded before these extra components.
This restriction is related to the fact that iPhone won't cache components bigger than 25K. Note that this is the uncompressed size. This is where minification is important because gzip alone may not be sufficient.
For more information check "Performance Research, Part 5: iPhone Cacheability - Making it Stick" by Wayne Shea and Tenni Theurer.
Packing components into a multipart document is like an email with attachments, it helps you fetch several components with one HTTP request (remember: HTTP requests are expensive). When you use this technique, first check if the user agent supports it (iPhone does not).


Software Engineer. Focused on Full-Stack Development
Computer Engineering
English as a Second Language
It fetches GitHub's user profile information, via user handler, using GitHub API
It displays user items in a todo section and be moved to complete section when marked done
It fetches info from dynamic web-pages using Python, Beautiful-Soup and Selenium on a Flask framework
Hurray! You already checking it out. As you can see, it's a digital resume to showcase my professional identity
It uses ZXing Library to scan QR Codes, display the results using Crouton library and copy them into the system's clipboard
It uses The Guardians API to fetch headline news based on user’s search
Apart from being a Software Engineer, I enjoy most of my time being outdoors. When indoors, I follow a number of series, movies and television shows, I love reading & video-gaming, and I spend a large amount of my free time exploring the latest technolgy advancements in the React & MERN Stack world.