惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
WordPress大学
WordPress大学
L
LINUX DO - 热门话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
V
Visual Studio Blog
O
OpenAI News
AI
AI
Hacker News: Ask HN
Hacker News: Ask HN
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
Spread Privacy
Spread Privacy
Y
Y Combinator Blog
I
InfoQ
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
F
Fortinet All Blogs
C
CERT Recently Published Vulnerability Notes
T
The Blog of Author Tim Ferriss
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
Project Zero
Project Zero
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
G
Google Developers Blog

David Baron's Weblog

Software engineering, responsibility, and ownership Software engineering, responsibility, and ownership David Baron's weblog: Security and Inequality Running animations on the compositor thread David Baron's weblog: Tying ecosystems through browsers David Baron's weblog: Payments on the Web Thoughts on migrating to a secure Web David Baron's weblog: The need for government David Baron's weblog: Priority of constituencies How browser developers should seek feedback from Web developers A possible approach to shorter release cycles David Baron's weblog: Fifteen years Why debug builds (and assertions) are important Ten years of the Mozilla Foundation Open licensing at the W3C Why adding compositing and blending to CSS is harder than it looks How you can help with removing -moz- prefixes Moving bug history out of the primary display of a bug report Beware of locale-specific behavior in the C library Eating dogfood and shipping software Specification style and the future of the Web The bug system I wish I had CSS border-image changes and unprefixing Improving font size readability on Firefox for Android David Baron's weblog: CSS Animations, part 2 Hue-preserving color inversion with SVG filters Changes to handling of @-moz-keyframes David Baron's weblog: window.matchMedia() David Baron's weblog: CSS Animations What does a blur radius mean? Crash analysis in the future David Baron's weblog: calc() David Baron's weblog: colorDepth David Baron's weblog: Hidden complexity in specifications The most important field in a bug report: the summary WOFF font format submitted to W3C David Baron's weblog: :-moz-any() selector grouping setTimeout with a shorter delay Faster repainting in SVG foreignObject David Baron's weblog: Distributed Extensibility David Baron's weblog: Broadening crash analysis Correlating crashes with binary extensions or plugins David Baron's weblog: ex-HTML Downloadable font formats for the Web Web Accessibility as a Political Movement David Baron's weblog: CSS priorities David Baron's weblog: Bug priorities David Baron's weblog: Semi-vacation Some new CSS features in Firefox 3 David Baron's weblog: New selectors David Baron's weblog: The age of bugs Seeking a good Linux distribution David Baron's weblog: Teaching to the test David Baron's weblog: March 2008 David Baron's weblog: February 2008 David Baron's weblog: January 2008 David Baron's weblog: October 2007 David Baron's weblog: September 2007 David Baron's weblog: August 2007 David Baron's weblog: June 2007 David Baron's weblog: April 2007 David Baron's weblog: March 2007 David Baron's weblog: January 2007 David Baron's weblog: September 2006 David Baron's weblog: August 2006 David Baron's weblog: July 2006 David Baron's weblog: May 2006 David Baron's weblog: February 2006 David Baron's weblog: January 2006 David Baron's weblog: December 2005 David Baron's weblog: October 2005 David Baron's weblog: September 2005 David Baron's weblog: June 2005 David Baron's weblog: May 2005 David Baron's weblog: April 2005 David Baron's weblog: March 2005 David Baron's weblog: February 2005 David Baron's weblog: October 2004 David Baron's weblog: September 2004 David Baron's weblog: August 2004 David Baron's weblog: June 2004 David Baron's weblog: May 2004 David Baron's weblog: April 2004 David Baron's weblog: March 2004 David Baron's weblog: February 2004 David Baron's weblog: January 2004 David Baron's weblog: November 2003 David Baron's weblog: October 2003 David Baron's weblog: September 2003 David Baron's weblog: August 2003 David Baron's weblog: July 2003 David Baron's weblog: June 2003 David Baron's weblog: May 2003 David Baron's weblog: April 2003 David Baron's weblog: March 2003 David Baron's weblog: February 2003 David Baron's weblog: December 2002 David Baron's weblog: November 2002 David Baron's weblog: September 2002
David Baron's weblog: January 2003
David Baron · 2003-01-30 · via David Baron's Weblog

Wednesday 2003-01-29

In the fun with old hardware category...

I've never had a good way of testing things on MSIE for Windows. It's a pain to reboot my Linux box into Windows (wait, twice, and then restart the programs I was in), I have no interest in setting up WINE, and fitting one of my old machines that still dual-boots Windows into the same room would be tight.

However, I finally decided to make my dad's old laptop (running Windows 95) useful. The problem is, it doesn't have a network card, so it can't be added to the two computers (mine and my dad's) that are already running over the DSL. So to use it without using the modem I'd have to connect it to the network via a serial connection to another computer.

So after a few hours of fiddling with cables to see which cable was a null-modem and which wasn't (I was right from the start that only the Laplink cable was an unlabeled null-modem, but the serial ports were trying to run at different speeds), reading the PPP HOWTO, a short document on something close to what I did, the IP Masquerade HOWTO, and some less useful documentation, I had a solution.

On the Linux end, I run the script to set up masquerading (but from ppp1 to ppp0), and then run /usr/sbin/pppd -detach crtscts lock connect '/usr/sbin/chat -t 240 AT OK AT OK AT OK ATDT CONNECT' proxyarp 192.168.0.6:192.168.0.50 /dev/ttyS0 115200. The messy chat command is only because Windows doesn't seem to have a null-modem driver, so I have to have the Linux box pretend to be a modem. The Windows box is just set up to use a "Standard 28800 modem" (on COM1, which took some time to figure out too), but with the maximum serial port speed (somewhere in the modem configuration) set to 115200.

Oh, and in other news, I've finished Harvard. I haven't actually gotten my degree yet, though. My last exam was last Tuesday (8 days ago) morning, and I packed all my stuff in boxes on Tuesday evening and Wednesday morning, shipped it via UPS on Wednesday morning and took the train home the same day. Then I did a lot of unpacking when they arrived Friday. So I'm at home until I get myself a job, something I should probably be pursuing a bit more aggressively than I am.

Sunday 2003-01-12

Just for the record, I was exaggerating when I said “twice the amount of memory.”

I've also become less sure whether we should even try cleaning up mozilla/layout incrementally, or whether we should throw pretty much the whole thing (nsIFrame and its implementations) out and start over. There really isn't much there that I like, and I think converting it to support concepts such as display-model and display-role or vertical text (ignoring the insanity of splitting direction into two separate properties) would be almost as hard as (if not harder than) starting over. Note that when I say start over, I mean starting with a new design, but pulling in bits of existing code that we want to keep. I don't mean throwing out every last line.

Thursday 2003-01-09

Since everyone else (hyatt, shaver, jwz) is commenting on Safari, I may as well add a few words.

Why is Mozilla's layout engine so big and complex? Perhaps the simple answer is that there were too many people available to write it, and they wrote as much code as they could. After all, they didn't have any incentives to keep the code small.

But what, in detail, is wrong? (Now I'm just speaking of the code in mozilla/layout, which is one of the pieces code I work on, and by far the most discouraging one for a company coming along and thinking of building a web browser based on Mozilla's layout engine.)

  • I think some of the people who wrote the code didn't understand the specifications that they were implementing. Part of the problem may lie in the specifications themselves. For example, there's almost no information in CSS2 describing shrink wrapping. Might being an afterthought explain why Mozilla's layout engine has shrink wrapping code scattered throughout it in a disorganized fashion? Even lately I've watched some developers want to make incorrect changes in behavior or fail to understand the reason that another browser lays a page out differently.

  • I think part of the problem may have been a desire to make everything modular so that it could be split up between different programmers. In the end, there were just too many pieces. (Could this be a problem of too many design documents?)

  • There's overoptimization in certain areas. For example, our rendering object structures are extremely optimized for size at the cost of code complexity, and, to some degree, performance. However, our content tree structures are larger and the code is simpler. From what I understand about khtml, it has much smaller content tree structures (with the DOM using tearoffs), while its rendering objects (what Mozilla calls frames for some confusing reason) are much larger, allowing for simpler code.

  • There's been an inability to focus on more than one or two things at the same time. In 1998-1999, there was a focus on standards compliance. In 2000-2002, there was a focus on making real web sites work. In 2001 there was a focus on performance. Now (late 2002/early 2003) there's a focus on memory use. In many of these cases, working on one objective can hurt another one, and I think we've often failed to balance them appropriately.

    (The real solution to cleaning up layout probably involves making layout objects use twice the amount of memory that they currently do. Is that a problem? I don't think so, since they take up so little of the total. We're better off increasing the amount of memory that frames use and attacking memory use in other areas. If I do this, will I be told that I have to fix the memory use regression in 72 hours or back out the changes? I hope not.)

In the end, khtml's code is a lot simpler. Perhaps more importantly, the code looks a lot more like a description of the way the layout process works. After hearing a short explanation of what's what, I can understand some of khtml's code almost as well as the equivalent code in Mozilla.

How can Mozilla get from here to there? We need to concentrate on architectural cleanup rather than adding new features. Can it be done step-by-step? Perhaps. Can it be done without sacrificing at least some of the endless compatibility work that's made the layout engine compatible with obscure bugs in WinIE? Probably not. A lot of the compatibility work was done by grafting on little bits and pieces of code. (Oh, this value is wrong here in a certain case? Well, let's fix it.)

However, if we do find a way to do things step by step, we will be able to maintain a lot of the compatibility work that was done simply by regression testing. In theory, if we're switching to a better architecture, it should be possible to find better places for various hacks to go. Will those places always exist when we need them? Probably not. Would it be an easier development process if we didn't have to put in a lot of intermediate hacks? Certainly. Does that mean it would be better for any major architecture work to go off on a branch for six months and then land all at once? I'm not sure.