stargeek
PHP news website logo.
home    PHP scripts    articles    seo tools    links    search    contact    shop    realtors


The Laptopia Odyssey, Part 2







The Laptopia Odyssey, Part 2

The Laptopia Odyssey, Part 2 06/23/2004 06:16 AM

Linux Journal's least technical editor reports on the road to Laptopia with his new ThinkPad T40.




This is a GrokNews Entry: (what is grok?)





Similar Items

The Laptopia Odyssey, Part 2

Grok Headline matches for The Laptopia Odyssey, Part 2

The Odyssey Project


The Odyssey Project 10/31/2003 04:58 AM
Released Version 1!!!

Odyssey Of Reality


Odyssey Of Reality 07/27/2004 08:00 AM
arret du projet

2250 AD: A Nautical Odyssey


2250 AD: A Nautical Odyssey 09/20/2004 10:28 AM

Stomp: A Final Cut Pro Odyssey


Stomp: A Final Cut Pro Odyssey 11/04/2003 08:20 PM
"Using the Apple platform enabled us to run an amazing system." (Apple via MyAppleMenu)

Microsoft's Tablet PC Odyssey


Microsoft's Tablet PC Odyssey 04/15/2005 02:46 AM
Opinion: Despite the hype, electronic books and higher-powered small devices are years away from being ubiquitous.

The odyssey of the german parliament
flag


The odyssey of the german parliament
flag
07/17/2004 06:25 AM
Oh how much can this flag endure?

Two Years Before the Prompt: A Linux
Odyssey


Two Years Before the Prompt: A Linux
Odyssey
09/10/2004 09:05 AM

"ljbpreaching : An Advent-urous Odyssey"


"ljbpreaching : An Advent-urous Odyssey" 12/29/2003 03:03 PM

A quick Flickr Odyssey of my time in San
Francisco...


A quick Flickr Odyssey of my time in San
Francisco...
08/19/2004 09:04 PM

A quick Flickr odyssey of my time in San Francisco - I'll probably pull out some of my favourite photos and post them on the site proper, but in the meantime:

Read the comments


Texas Children Home After African
Odyssey


Texas Children Home After African
Odyssey
08/17/2004 09:11 PM
Reuters via Wired News Aug 18 2004 1:45AM GMT

NASA Extends Mars Odyssey Orbiter
Mission


NASA Extends Mars Odyssey Orbiter
Mission
08/27/2004 01:44 PM

Direct and Related Links for 'NASA Extends Mars Odyssey Orbiter Mission'

“NASA has extended the mission of the Mars Odyssey orbiter, which has been studying and mapping the Red Planet since early 2002 as well as serving as a relay for data from the surface rovers Spirit and Opportunity. Odyssey’s primary mission, which cost $297 million, ended Tuesday. The $35 million extension will fund operations through September 2006, and NASA noted that the spacecraft has enough fuel left to operate through this decade and the next…

Top Searches of 2003, A Dave Odyssey,
Banned Words for 2004


Top Searches of 2003, A Dave Odyssey,
Banned Words for 2004
12/31/2003 11:59 PM

Top Searches of 2003, A Dave Odyssey,
Banned Words for 2004


Top Searches of 2003, A Dave Odyssey,
Banned Words for 2004
01/01/2004 03:25 AM
Slashdot Jan 1 2004 2:17AM ET

Court Order Bans Sale of Odyssey 2-Ball
Putter Knockoffs; Protects Other
Callaway Golf Intellectual Property


Court Order Bans Sale of Odyssey 2-Ball
Putter Knockoffs; Protects Other
Callaway Golf Intellectual Property
06/25/2004 05:11 PM
PA News via The Scotsman Online Jun 25 2004 7:58PM GMT

Space odyssey The 'father of the
internet' on taking the net into space


Space odyssey The 'father of the
internet' on taking the net into space
09/18/2004 10:13 PM
BBC Sep 19 2004 2:33AM GMT

John Lautner's Chemosphere: part
Jetsons, part Bond and vintage L.A.
Modern.


John Lautner's Chemosphere: part
Jetsons, part Bond and vintage L.A.
Modern.
04/07/2005 12:53 PM
The most modern home built in the world. "From the outside it looks like a spaceship you cannot enter. But if you go inside, it feels very cozy… very Zen and calming. Maybe because you are floating above the city, in the sky". John Lautner's Chemosphere residence is the product of a fortuitous union of architect, client, time and place. Leonard Malin was a young aerospace engineer in late-1950s L.A. whose father-in-law had just given him a plot north of Mulholland Drive, near Laurel Canyon. The only catch: at roughly 45 degrees, the slope was all but unbuildable. Lautner sketched a bold vertical line, a cross, and a curve above it. "Draw it up," he told his assistant. Now publisher Benedik t Taschen owns Chemosphere (NSFW), and after 20 years of neglect the house has been beautifully restored (.pdf) by Frank Escher.

Part Butler and Part Buddy, Aide Keeps
Kerry Running


Part Butler and Part Buddy, Aide Keeps
Kerry Running
04/28/2004 12:17 AM
Marvin Nicholson Jr. is the man literally behind Senator John Kerry, ready with an uncapped bottle of water whenever Mr. Kerry's throat runs dry.

New Form of Internet Fiction is Part
Story, Part Game


New Form of Internet Fiction is Part
Story, Part Game
06/05/2005 10:52 PM
Internet startup City of IF today launched a web site dedicated to “storygaming” – a new form of storytelling over the Web. Storygaming is a unique combination of storytelling and computer games in which players cooperatively play characters in a story guided by a human author. [PRWEB Jun 2, 2005]

Into the Itanium, Part 2
http://www.devhardware.com/c/a/Computer-
Processors/Into-the-Itanium-Part-2/ In
our la


Into the Itanium, Part 2
http://www.devhardware.com/c/a/Computer-
Processors/Into-the-Itanium-Part-2/ In
our la
12/27/2004 01:08 PM
DevHardware Dec 27 2004 4:25PM GMT

Focus on the Family and Digital Praise
Unveil Two New Interactive Computer
Games Based on Adventures in Odyssey;
One of America’s Most Popular Family
Radio Shows Comes to Life in Interactive
Computer Games


Focus on the Family and Digital Praise
Unveil Two New Interactive Computer
Games Based on Adventures in Odyssey;
One of America’s Most Popular Family
Radio Shows Comes to Life in Interactive
Computer Games
06/30/2004 03:04 AM
New game titles announced for ages 8 and up; Titles based on Adventures in Odyssey radio show. [PRWEB Jun 30, 2004]

"Part 1"


"Part 1" 02/14/2004 03:42 AM

part one


part one 09/24/2004 03:06 AM

goldsteinhowe.com/blog/files/VFPart1.pdf
track this site | 3 links


Do your part


Do your part 12/02/2003 01:09 AM
Fight AIDS @home is a valuable resource for your "wasted" computer cycles. Instead of search the universe for extraterrestrial life, shouldn't we be searching our world for cures to our own diseases?

You are who you know: Part 2


You are who you know: Part 2 06/16/2004 12:23 AM
Salon Jun 16 2004 4:11AM GMT

Grr, part II


Grr, part II 12/30/2003 06:26 PM
Ha! Two more victories today! Five wins out of six games... One more win and I might get a prize!

And by the way - if it's dangerous to go into a DVD sale in Anttila, it is twice as much dangerous to go to a DVD sale in Tower Records in London... I was seriously tempted to buy the entire Fawlty Towers, but managed to resist the tempation after picking up some interesting bargain stuff like both Tetsuos and Holy Grail (and what do you mean by "odd combination"?)


Grr, part III


Grr, part III 12/31/2003 06:11 PM
Whee! Seven wins out of eight games - I even beat a dan-grade player. I got a certificate and a prize and everything :).

This was a good way to end the year. See you in 2004.

(And yeah, it's really 2003 as I'm writing this. Timezone differences schmisserences)


"37 CFR Part 201"


"37 CFR Part 201" 10/30/2003 03:49 PM

Ask EA Part 4


Ask EA Part 4 07/11/2004 06:34 AM

shacknews.com/onearticle.x/32582
track this site | 3 links


Implementing CSS (Part 1)


Implementing CSS (Part 1) 06/05/2005 11:17 PM

One of the most interesting problems (to me at least) in browser layout engines is how to implement a style system that can determine the style information for elements on a page efficiently. I worked on this extensively in the Gecko layout engine during my time at AOL and I've also done a lot of work on it for WebCore at Apple. My ideal implementation would actually be a hybrid of the two systems, since some of the optimizations I've done exist only in one engine or the other.

When dealing with style information like font size or text color, you have both the concept of back end information, what was specified in the style rule, and the concept of front end information, the computed result that you'll actually use when rendering. The interesting problem is how to compute this front end information for a given element efficiently.

Back end information can be specified in two different ways. It can either be specified using CSS syntax, whether in a stylesheet or in an inline style attribute on the element itself, or it is implicitly present because another attribute on the element specified presentational information. An example of such an attribute would be the color attribute on the font tag. Both WebCore and Gecko use the term mapped attribute to describe an attribute whose value (or even mere presence) maps to some implicit style declaration.

A rule in CSS consists of two pieces. There is the selector, that bit of information that says under what conditions the rule should match a given element, and there is the declaration, a list of property/value pairs that should be applied to the element should the selector be matched.

All back end information can ultimately be thought of as supplying a declaration. A normal rule in a stylesheet that is matched has the declaration specified as part of the rule. An inline style attribute on an element has no selector and is simply a declaration that always applies to that element. Similarly each individual mapped attribute (like the color and face attributes on the font tag) can be thought of as supplying a declaration as well.

Therefore the process of computing the style information for an element can be broken down into two phases. The first phase is to determine what set of declarations apply to an element. Once that back end information has been determined, the second phase is to take that back end information and quickly determine the information that should be used when rendering.

WebCore (in upcoming Safari releases) has a really cool optimization that I came up with to avoid even having to compute the set of declarations that apply to an element. This optimization in practice results in not even having to match style for about 60% of the elements on your page.

The idea behind the optimization is to recognize when two elements in a page are going to have the same style through DOM (and other state) inspection and to simply share the front end style information between those two elements whenever possible.

There are a number of conditions that must be met in order for this sharing to be possible:
(1) The elements must be in the same mouse state (e.g., one can't be in :hover while the other isn't)
(2) Neither element should have an id
(3) The tag names should match
(4) The class attributes should match
(5) The set of mapped attributes must be identical
(6) The link states must match
(7) The focus states must match
(8) Neither element should be affected by attribute selectors, where affected is defined as having any selector match that uses an attribute selector in any position within the selector at all
(9) There must be no inline style attribute on the elements
(10) There must be no sibling selectors in use at all. WebCore simply throws a global switch when any sibling selector is encountered and disables style sharing for the entire document when they are present. This includes the + selector and selectors like :first-child and :last-child.

The algorithm to locate a shared style then goes something like this. You walk through your previous siblings and for each one see if the above 10 conditions are met. If you find a match, then simply share your style information with the other element. Such a system obviously assumes a reference counting model for your front end style information.

Where this optimization kicks into high gear, however, is that it doesn't have to give up if no siblings can be located. Because the detection of identical style contexts is essentially O(1), nothing more than a straight pointer comparison, you can easily look for cousins of your element and still share style with those elements.

The way this works is that if you can't locate a sibling, you can go up to a parent element and attempt to find a sibling or cousin of the parent element that has the same style pointer. If you find such an element, you can then drill back down into its children and attempt to find a match.

This means that for HTML like the following:

<table>
<tr class='row'>
<td class='cell' width=300 nowrap>Cell One</td>
</tr>
<tr class='row'>
<td class='cell' width=300 nowrap>Cell Two</td>
</tr>

In the above example, not only do the two rows share the same style information, but the two cells do as well. This optimization works extremely well for both old-school HTML (in which many deprecated presentational tags are used) and newer HTML (in which class attributes might figure more prominently).

Once the engine determines that a style can't be shared, i.e., that no pre-existing front end style pointer is available, then it's time to figure out the set of declarations that match a given element. It is obvious that for inline style attributes and mapped attributes that you can find the corresponding declaration quickly. The inline style declaration can be owned by the element, and the mapped attributes can be kept in a document-level hash. WebCore has a bit of an edge over Gecko here in that it treats each individual mapped attribute on an element as a separate declaration, whereas Gecko hashes all of the mapped attributes on an element as a single "rule." This means that Gecko will not be able to share the mapped attribute declaration for the following two elements:

<img width=300 border=0>
<img width=500 border=0>

WebCore creates three unique declarations and hashes them, one for a width of 300, one for a width of 500, and one for a border of 0. Gecko creates two different "rules," one for (width=300,border=0) and another for (width=500,border=0). As you can see in such a system, you will frequently not be able to treat the identical border attributes as the same.

Aside from this difference in mapped attribute handling, the two engines employ a similar optimization for quickly determining matching stylesheet rules called rule filtering. All rules that are potentially matchable by any element (i.e., that have the correct media type) are hashed based on the contents of the rightmost simple selector in the rule.

A selector in CSS can be either simple (meaning that all of the contents of that selector apply only to a single element) or compound (meaning that you may examine multiple elements like parents or siblings of that element). A compound selector is essentially a chain of simple selectors, so the following rule:

tr > td { color: blue }

has two simple selectors, tr and td. The rightmost simple selector in the rule is the one that we will use for the rule filtering optimization.

The rightmost simple selector falls into four categories.

(1) The selector uses an ID. (Example: #foo)
(2) The selector doesn't have an ID but uses a class. (Example: .foo)
(3) The selector has no class or ID but specifies a tag name. (Example: div)
(4) The selector specifies none of these things. (Example: *[disabled])

The rule is placed into one of four hashtables depending on which category it falls into. The idea behind these categorizations is to always filter out more specific information first. For example, if an element has a specific ID, then obviously any rules whose rightmost selector uses a different ID cannot match. Technically the last category can just be a list and not a hashtable, since those rules must always be examined by all elements.

Each hashtable, therefore, consists of a mapping from a given atomic string to a set of rules that match. The class attribute is exceptional in that you must put the rule into the hashtable multiple times if multiple class attributes are used.

When determining the set of rules that match a given element, you only examine rules that correspond to the correct hash entry based off your ID, classes and tag name. This optimization basically eliminates 95+% of the rules up front so that they need not even be considered during the matching process.

Each rule is then examined in detail, with all selectors being checked, to determine if it is a match, and the set of matches is collected. The set of matches can then be sorted by priority and specificity such that all the declarations are in the proper application order.

This brings us to the final phase of the style computation, which is taking the set of matches and quickly computing the appropriate front end style information. It is here that Gecko really shines. What I implemented in Gecko was a data structure called the rule tree for efficient storing of cached style information that can be shared *even when* two elements are not necessarily the same.

The idea behind the rule tree is as follows. You can think of the universe of possible rules in your document as an alphabet and the set of rules that are matched by an element as a given input word. For example, imagine that you had 26 rules in a stylesheet and you labeled them A-Z. One element might match three rules in the sheet, thus forming the input word "C-A-T" or another might form the input word "D-O-G."

There are several important observations one can make once you formulate the problem this way. The first is that words that are prefixes of a larger word will end up applying the same set of rules. All additional letters in the word do is result in the application of more declarations. Thus the rule tree is effectively a lexicographic tree of nodes, with each node in a tree being created lazily as you walk the tree spelling out a given word.

This system allows you to cache style information at each node in the tree. This means that once you've looked up the word "C-A-T-E-R-W-A-U-L", and cached information at all of the nodes, then looking up the word "C-A-T" becomes more efficient.

In order to make the caching efficient, properties can be grouped into categories, with the primary criterion for categorization being whether the property inherits by default. It's also important to group properties together that would logically be specified together, so that when a fault occurs and you have to make a copy of a given struct, you do so knowing that the other values in the struct were probably going to be different anyway.

Once you have the properties grouped into categories like the border struct or the background struct, then you can either store these structs in the rule tree or as part of a style tree that more or less matches the structure of the document. Inheritance has to apply down the style tree and tends to force a fault, whereas non-inherited properties can usually be cached in the rule tree for easy access.

WebCore doesn't contain a rule tree, but it is smart enough to refcount the structs and share them as long as no properties have been set in the struct. In practice this works pretty well but is not as ideal as the rule tree solution.


Bluetooth and YOU: Part 1


Bluetooth and YOU: Part 1 06/16/2004 06:18 PM
macteens Jun 16 2004 10:25PM GMT

The intranet gets serious: part 1/2


The intranet gets serious: part 1/2 11/17/2003 04:27 AM

Getting Flat, Part 1


Getting Flat, Part 1 04/15/2005 09:25 AM
Our Senior Editor digs into Tom Friedman's new bestseller, from a Linux/open source angle.

The intranet gets serious: part 1/4


The intranet gets serious: part 1/4 11/17/2003 04:27 AM

OLAP and DW (Part 2)


OLAP and DW (Part 2) 04/15/2005 12:41 PM

Doing More With XML Schemas (part 1)


Doing More With XML Schemas (part 1) 01/08/2003 07:11 PM
Get into the more advanced aspects of XML Schema design with a discussion of simple and complex datatypes, and learn to apply the basic OOP concepts of extensibility and inheritance to your schemas.

The ease of (ab)using X11, Part 2


The ease of (ab)using X11, Part 2 06/09/2004 07:12 PM

Doing More with phpMyAdmin (Part 2)


Doing More with phpMyAdmin (Part 2) 12/08/2003 11:46 AM
In the first segment of this two-part tutorial, I gave you a quick overview of some of the interesting new features available in phpMyAdmin. In this concluding segment, find out how to use phpMyAdmin to define relationships between tables, maintain a log of commonly-used queries and create entity-relationship diagrams.

Doing More With XML Schemas (part 2)


Doing More With XML Schemas (part 2) 01/23/2003 08:07 PM
In this second part, find out how to derive new element types by constraining existing ones, control access to your schema definitions, and redefine externally-provided schemas in place.

fish on -- part one


fish on -- part one 07/13/2004 10:43 AM
"Do you have to get up early tomorrow?" I said.

"No. I'm going to the Dodger game at 1," he said.

"Want to get out of here and go play cards?"

"Are you finally taking me to Odessa?"

"No. It's Saturday, so it's a dance club tonight," I said. "I hear it gets pretty crazy."

"Plato's retreat crazy?" he said.

"You stole that from my blog!" I said.

We both laughed.

"Let's go to Commerce," I said.

Read the entire entry @ WWdN!
Grok Description matches for The Laptopia Odyssey, Part 2
GrokA matches for The Laptopia Odyssey, Part 2

The Laptopia Odyssey, Part 2

The following phrases have been identified by the grok system as matching this entry: ljbpreaching

















Also check out:


Grok

Ipod Porn on the
Rise

Brief Abstract of
Wikipedia's
Mesothelioma Cancer
page

Get first aid
instructions in your
cell phone

IE is crap
JSPWiki gains
podcasting support

Strong sales for
iTunes in Europe

Theft of A-level
papers revealed

Concerns spark
tissue bill change

Housing bubble fears
'overblown'

Anti-social law move
fails

Southern England
lashed by gales

US rules out
Pakistan aid curbs

Army probes Hebron
'abuse' show

UN warns DR Congo
neighbours

Flintoff to miss
series

Humber chief backed
by chairman

Wilco Pays Up for
Spycasts

Stars Power Move to
Green Energy

Weblogs.com Rises
From the Flames

Trend Micro
Continues Support
for Cisco NAC

Intel 915G Chipset
Powers Wipro
SuperGenius 900

Embedded Turnaround
Microsoft Goes
Mobile

FlyNet Sets New
Standard in Onboard
Communications

SBC to build network
offering digital TV

Combined Microsoft
product offers
resellers new
revenue streams

RIAA launches more
lawsuits against
swappers

Private space travel
can blend
technologies for the
benefit of all

Regulation Of
Internet Cafe In
Pakistan

The Google of Travel
Search?

Queens teachers
arrested in Internet
sting operation

Net cafe users
nabbed for hacking
into online bank
account

Internet Providers
Showing Their
Frustration With
Spam-Sending PCs

Ghana's First
Private Internet
Service Launched

Internet firms unite
against spam

Top online stories
at
baxterbulletin.com
»

Major union turns to
Internet to create
'virtual labor
group'

Allawi gets online
death threat

Showtime signs deal
with NetAdvantage
for online ad sales

United Online signs
distribution deal

Wireless race for
speed intensifies
(USATODAY.com)

Techies plug in to
Capitol Hill power
(USATODAY.com)

Quite a three pipe
metafilter post.

Watch the guy with
the beard

Inside America's
secret Afghan gulag

MozLinker 0.2.2
Con Kolivas
Patchset-based
Overloaded Kernel
2.6.7-cko2

libextractor 0.3.3
UnifiedIO 1.31
Cut The Crap
Software 2004-06-23

xlayout 0.1
One-JAR 0.9
BlogBridge 0.5.2
UseBB 0.2.3
PHPlist 2.8.8
what is grok?