<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planet WebKit</title>
	<link rel="self" href="http://planet.webkit.org/atom.xml"/>
	<link href="http://planet.webkit.org/"/>
	<id>http://planet.webkit.org/atom.xml</id>
	<updated>2009-07-02T22:53:09+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="en">
		<title type="html">A QtWebKit KPart is no answer for a KDE browser</title>
		<link href="http://www.kdedevelopers.org/node/3998"/>
		<id>http://www.kdedevelopers.org/3998 at http://www.kdedevelopers.org</id>
		<updated>2009-07-01T20:13:12+00:00</updated>
		<content type="html">&lt;p&gt;&lt;b&gt;Disclaimer: I have no desire to re-ignite KHTML vs WebKit arguments.  Rather, the purpose of this blog post is to hopefully enlighten a technical question.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Over the last few months I've heard many KDE developers in various forums bemoan the lack of a working and stable WebKit KPart.  The motivation behind this complaint seems to be that KDE folk want a WebKit browser option for KDE.  Thus the naive solution is to just get the WebKit KDE KPart in shape.  Given this motivation... the solution is wrong IMO.&lt;/p&gt;
&lt;p&gt;I can speak from some experience here.  I've been working on QtWebKit for quite awhile and have also worked - in the past - on the WebKit KPart plus Konqueror integration that Simon started.  For a time, it was building and running just fine.  You could install it and change a configuration file and Konqueror would render using QtWebKit.  However, the integration was *far* from complete.  Plumbing the sources of Konqueror I learned a nasty secret: Konqueror is highly KHTML API specific.  Konqueror has deep integration with KHTML that goes far above and beyond the KPart API.  Creating a QtWebKit KPart is woefully insufficient for the purpose of providing anything more than a basic HTML viewer.  &lt;/p&gt;
&lt;p&gt;A simple HTML viewer is no where close to a fully modern desktop browser.&lt;/p&gt;
&lt;p&gt;This all makes sense if you stop to think about the history of Konqueror.  Konqueror is a generic desktop shell.  It is designed to allow basic viewing of various documents in various formats.  Of course, it has become much, much, more than that.  And the key to this growth of features is Konqueror's steady adoption of API's above and beyond the generic KPart API.&lt;/p&gt;
&lt;p&gt;Which brings me to my point: if parts of the KDE community truly want a modern browser based on QtWebKit they'd best be looking at solutions beyond Konqueror.  Otherwise you are left with two hacky solutions:  make a QtWebKit KPart that is API compatible with KHTMLPart OR migrate Konqueror source to make it less dependent on KHTMLPart.  The former is not going to be fun as the KHTMLPart API is not refined or polished and highly KHTML specific.  The latter can only be accomplished with a lot of work set aside for refactoring or through nasty '#ifdef KHTML callThisWay() #else callThatWay();'&lt;/p&gt;
&lt;p&gt;Both of these solutions are sub-optimal in my opinion.&lt;/p&gt;</content>
		<author>
			<name>Adam Treat</name>
			<uri>http://www.kdedevelopers.org/blog/105</uri>
		</author>
		<source>
			<title type="html">manyoso's blog</title>
			<subtitle type="html">KDE Development in action.</subtitle>
			<link rel="self" href="http://www.kdedevelopers.org/blog/105/feed"/>
			<id>http://www.kdedevelopers.org/blog/105/feed</id>
			<updated>2009-07-02T22:53:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Transparent QWebView (or QWebPage)</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/30/transparent-qwebview-or-qwebpage/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/30/transparent-qwebview-or-qwebpage/</id>
		<updated>2009-06-29T23:01:44+00:00</updated>
		<content type="html">&lt;p&gt;If you use &lt;a href=&quot;http://doc.trolltech.com/qwebview.html&quot;&gt;QWebView&lt;/a&gt;, do you know how make its background to be translucent? Apparently, the trick is not so well known, hence I decide to share it here.&lt;/p&gt;
&lt;p&gt;Basically it boils down the following code snippet:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;QPalette palette = view-&amp;gt;palette();&lt;br /&gt;
palette.setBrush(QPalette::Base, Qt::transparent);&lt;br /&gt;
view-&amp;gt;page()-&amp;gt;setPalette(palette);&lt;br /&gt;
view-&amp;gt;setAttribute(Qt::WA_OpaquePaintEvent, false);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The first three lines set a new transparent brush for the page. This is necessary so that all the painting is blended properly. The last one ensures that the web view is not opaque, i.e. it does not paint all the pixels contained in its rectangle. Opaque paint event for QWebView is the default, most of the time you want to have a web page with typical normal background color, either set by the web page or something you specify as the fallback color.&lt;/p&gt;
&lt;p&gt;If you combine QWebView see-through background with top-level widget opacity feature (see what &lt;a href=&quot;http://labs.trolltech.com/blogs/2008/09/23/translucent-widgets-on-x11/&quot;&gt;Samuel wrote about this&lt;/a&gt; some time ago), you will get something like the following screenshot (the wallpaper image is Soft Green, from Valient Gough). Neat, isn&amp;#8217;t it? Note that of course it requires a window system which supports composition, e.g. modern X11 window manager, recent versions of Windows, and so on.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://picasaweb.google.com/lh/photo/CrUv9s8Lpu4QGAtuuhLvLQ?feat=embedwebsite&quot;&gt;&lt;br /&gt;
&lt;img id=&quot;transparentweb&quot; src=&quot;http://lh6.ggpht.com/_Oijhf1ZPv-4/SivccHwuKMI/AAAAAAAABBo/thRKJ9kpqYA/s400/transparentweb.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;As usual, the code for this short example is available from &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo&quot;&gt;the git repository&lt;/a&gt;, just check the &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/transparentweb&quot;&gt;transparentweb&lt;/a&gt; subdirectory. Again, I already prepared both the Qt/C++ and Python (via PyQt) versions. Enjoy!&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Port of QtWebKit to S60</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/29/port-of-qtwebkit-to-s60/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/29/port-of-qtwebkit-to-s60/</id>
		<updated>2009-06-29T15:06:48+00:00</updated>
		<content type="html">&lt;p&gt;In the recent pre-release of Qt for S60 we have included a build of WebKit that compiles and runs on S60. This pre-release is an important milestone for this porting effort that started about half a year ago. Hence, I would like to briefly highlight a few things about it:&lt;/p&gt;
&lt;p&gt;The main work is finding good solutions for quirks in the toolchain. That includes the ARM RVCT compiler and the Metrowerks compiler used by the emulator on Windows, both with their own unique set of challenges.&lt;/p&gt;
&lt;p&gt;The team working on this consists of Norbert Leser and Laszlo Gombos from the Nokia Browser Team in Boston as well as Janne Koskinen from Digia and Kristian Amlie from the QtSoftware Team here in Oslo. In addition Ariya wrote the little but super-cool anomaly demo browser, which is included in the Qt/S60 Tower release. The port is still in early stages, but it&amp;#8217;s looking quite good already and rather performant.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve been maintaining the patches in separate repositories and we&amp;#8217;ve been pushing patches in small steps upstream for a few months now. There&amp;#8217;s still a lot to go, but things are progressing. And the result is looking really cool &lt;img src=&quot;http://labs.trolltech.com/blogs/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;img src=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/06/qtwebkits60.png&quot; alt=&quot;QtWebKit for Qt/S60 running on 5800 and N87&quot; /&gt;&lt;/center&gt;&lt;/p&gt;</content>
		<author>
			<name>Simon</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Helping Out -- Windows License</title>
		<link href="http://lwat.blogspot.com/2009/06/helping-out-windows-license.html"/>
		<id>tag:blogger.com,1999:blog-3416807.post-1486213465130647117</id>
		<updated>2009-06-28T20:07:34+00:00</updated>
		<content type="html">&lt;a href=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SkggySSc3RI/AAAAAAAAAH4/07thgw-jLJ4/s1600-h/IMG_0350.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SkggySSc3RI/AAAAAAAAAH4/07thgw-jLJ4/s320/IMG_0350.jpg&quot; border=&quot;0&quot; alt=&quot;Example of not using WebKit&quot; id=&quot;BLOGGER_PHOTO_ID_5352564205404609810&quot; /&gt;&lt;/a&gt;&lt;br /&gt;A few people who have found the Windows Cairo WebKit port useful have asked if there was any way to 'donate' to the project or otherwise help out.  While the most useful thing anyone can do is to contribute debugging or coding help, there one thing that would really help me out would be if someone could contribute a valid (i.e., Legally transferrable) Windows XP, Windows Vista, or (someday) Windows 7 license so I could do more coding after hours or one weekends.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To help motivate your desire to donate such a license, I present here a photo I took while on vacation this past week.  This is a nice example of what awaits you if you rely on Internet Explorer for your &lt;a href=&quot;http://www.chabotspace.org/default.asp&quot;&gt;web kiosk&lt;/a&gt; needs!  ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3416807-1486213465130647117?l=lwat.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Brent</name>
			<email>noreply@blogger.com</email>
			<uri>http://lwat.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Lambda, Where Art Thou?</title>
			<subtitle type="html">Rantings and Ravings about type systems, functional programming, and the corporations that hate them.  And also lots of WebKit stuff.</subtitle>
			<link rel="self" href="http://lwat.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3416807</id>
			<updated>2009-06-29T17:53:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">QtWebKit has been ported to S60</title>
		<link href="http://sideshowbarker.net/2009/06/26/s60-qtwebkit/"/>
		<id>http://sideshowbarker.net/2009/06/26/s60-qtwebkit/</id>
		<updated>2009-06-25T19:00:21+00:00</updated>
		<content type="html">&lt;p&gt;Alessandro Portale has &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/06/25/the-new-pre-release-of-qt-for-s60-is-there/announced&quot;&gt;announced the “Tower” release of the Qt for S60&lt;/a&gt;. He writes that “there are three fresh modules: Phonon, QtSql and &lt;b&gt;QtWebkit&lt;/b&gt;”, and adds that “QtWebkit on S60 is still considered experimental. However, You should already be able to start developing QtWebKit refined applications for the pocket.”&lt;/p&gt;
&lt;p&gt;QtWebKit is a port of the WebKit browser engine to the Qt cross-platform application-development framework, and Qt for S60 is in turn a port of Qt to the Symbian OS, widely used on mobile devices.&lt;/p&gt;</content>
		<author>
			<name>Michael(tm)Smith</name>
			<email>mike@w3.org</email>
			<uri>http://sideshowbarker.net</uri>
		</author>
		<source>
			<title type="html">Michael(tm) Smith</title>
			<subtitle type="html">smith@sideshowbarker.net</subtitle>
			<link rel="self" href="http://sideshowbarker.net/feed/"/>
			<id>http://sideshowbarker.net/feed/atom/</id>
			<updated>2009-06-25T19:53:09+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Developer Tools for Google Chrome</title>
		<link href="http://blog.chromium.org/2009/06/developer-tools-for-google-chrome.html"/>
		<id>tag:blogger.com,1999:blog-2471378914199150966.post-2373106468846215816</id>
		<updated>2009-06-24T16:44:00+00:00</updated>
		<content type="html">&lt;div&gt;Since the &lt;a href=&quot;http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html&quot;&gt;initial launch&lt;/a&gt; of Google Chrome back in September we have had the Elements and Resources tabs of WebKit's &lt;a href=&quot;http://webkit.org/blog/197/web-inspector-redesign/&quot;&gt;Inspector&lt;/a&gt; available. We are now ready to present Inspector's Scripts and Profiles panels built on top of the V8 engine providing web developers with full-featured Javascript debugger and sample-based profiler in the &lt;a href=&quot;http://dev.chromium.org/getting-involved/dev-channel&quot;&gt;dev channel&lt;/a&gt; release of Google Chrome. We are also re-introducing the Elements and Resources tabs running out of process for better robustness, security and support for the new debugger and profiler setup.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can invoke new developer tools by selecting &quot;JavaScript console&quot; from the Developer menu (or using Ctrl+Shift+J). For example, running the statistical profiler on the V8 benchmark suite (below screenshot) will give exact information on the actual code execution as the data is generated straight from running the optimized code from V8.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_LJuAPqyUVas/SkJYlwK1GdI/AAAAAAAAABM/Yfvhg-wKJQw/s1600-h/dcq7s2gz_24c6f7jdhc_b.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_LJuAPqyUVas/SkJYlwK1GdI/AAAAAAAAABM/Yfvhg-wKJQw/s400/dcq7s2gz_24c6f7jdhc_b.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5350936712878299602&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As with the rest of Google Chrome, the developer tools are open source and built upon WebKit and in particular WebKit's Inspector. We would love to get feedback - both in terms of bugs reports and feature requests - on the Chromium public &lt;a href=&quot;http://code.google.com/p/chromium/issues/list?q=area%3DDevTools&quot;&gt;issue tracker&lt;/a&gt;. Or even better yet, we would love to get contributions to improving developer tools further in WebKit and Google Chrome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;post-author&quot;&gt;Posted by Yury Semikhatsky, Software Engineer&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2471378914199150966-2373106468846215816?l=blog.chromium.org&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Ian Fette</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.chromium.org/</uri>
		</author>
		<source>
			<title type="html">Chromium Blog</title>
			<link rel="self" href="http://blog.chromium.org/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-2471378914199150966</id>
			<updated>2009-07-01T01:53:01+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Background rationale for layered architecture of WebKit JavaScript engine</title>
		<link href="http://sideshowbarker.net/2009/06/22/webkit-jit-layering/"/>
		<id>http://sideshowbarker.net/2009/06/22/webkit-jit-layering/</id>
		<updated>2009-06-21T21:19:06+00:00</updated>
		<content type="html">&lt;p&gt;A recent WebKit &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=24986#c43&quot;&gt;bug comment from Gavin Barraclough&lt;/a&gt; gives some insights into the rationale for the layered architecture and MacroAssembler used in the current JavaScript engine in WebKit. Some excerpts from that comment:&lt;/p&gt;
&lt;blockquote cite=&quot;https://bugs.webkit.org/show_bug.cgi?id=24986#c43&quot;&gt;
&lt;p&gt;The abstract code generation layer (MacroAssembler interface down) is layered like a traditional compiler. In a traditional compiler, it is common to have an assembler layer completely independent of the compiler (often a separate application). The compiler takes a source code file, compiles it, and produces an output file of assembly code.…&lt;/p&gt;
&lt;p&gt;Layering the compiler on top of an assembler in this fashion provides a number of benefits. For the compiler developer, layering the compiler on the assembler separates the instruction selection from the minutiae of machine instruction encoding.  For clients of the compiler providing a well defined language for machine instruction generation is useful if the compiler provides facilities to bypass the higher level language, and directly emit a specific sequence of machine instructions…&lt;/p&gt;
&lt;p&gt;The assembler interface within the JIT is designed to closely mimic that of the assembler layer in a traditional compiler…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If that sounds interesting, you can find a lot more details by reading the &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=24986#c43&quot;&gt;full text of the comment&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>Michael(tm)Smith</name>
			<email>mike@w3.org</email>
			<uri>http://sideshowbarker.net</uri>
		</author>
		<source>
			<title type="html">Michael(tm) Smith</title>
			<subtitle type="html">smith@sideshowbarker.net</subtitle>
			<link rel="self" href="http://sideshowbarker.net/feed/"/>
			<id>http://sideshowbarker.net/feed/atom/</id>
			<updated>2009-06-25T19:53:09+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKit: Facilitating alternative/experimental implementations of existing features vs. discouraging unnecessary duplication of efforts</title>
		<link href="http://sideshowbarker.net/2009/06/22/webkit-project/"/>
		<id>http://sideshowbarker.net/2009/06/22/webkit-project/</id>
		<updated>2009-06-21T20:57:12+00:00</updated>
		<content type="html">&lt;p&gt;On the webkit-dev mailing list back in April, there was an &lt;a href=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/thread.html#7313&quot;&gt;interesting thread&lt;/a&gt; that Michael Nordman from the Google Chrome team started with a &lt;a href=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007313.html&quot;&gt;message titled, “AppCache functionality provided by the embedder of webkit”&lt;/a&gt; (related to the offline-Web-applications feature in HTML5). Michael begins that message with this paragraph:&lt;/p&gt;
&lt;blockquote cite=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007313.html&quot;&gt;
&lt;p&gt;I’m working on the app cache for Chrome. We’ve decided to hoist most the functionality provided by the app cache into Chrome’s main browser process, so we won’t be using most of the implementation provided by WebKit. I’d like to work through what changes to make within WebKit/WebCore to allow an embedder pull that off. Any suggestions would be much appreciated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Darin Adler responded with &lt;a href=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007314.html&quot;&gt;some thoughts and a question&lt;/a&gt; (to which Michael &lt;a href=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007315.html&quot;&gt;replied&lt;/a&gt;) but the discussion about specifics didn’t go anywhere after that (not on the mailing list at least), because in the &lt;a href=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007316.html&quot;&gt;next message in the thread&lt;/a&gt;, Maciej Stachowiak replied to question the general approach — in fact, to question whether the WebKit trunk should be providing mechanisms to facilitate replacements of parts of its own core code:&lt;/p&gt;
&lt;blockquote cite=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007316.html&quot;&gt;
&lt;p&gt;It’s been a recurring theme for the Chrome team to request hooks to bypass WebKit functionality and replace it with Chrome-specific code  that lives outside the WebKit tree. So far this has been mostly for  code developed when Chrome was originally a secret project. While we  felt it was best to grandfather in the existing carve-outs, in general  I believe this is not the best way to move the WebKit project forward.  I would not like to see this pattern replicated for newly developed  functionality.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Earlier in the same message, Maciej cites a reason why facilitating the proposed general approach can have a potentially negative side effect:&lt;/p&gt;
&lt;blockquote cite=&quot;https://lists.webkit.org/pipermail/webkit-dev/2009-April/007316.html&quot;&gt;
&lt;p&gt;One downside of this approach is that, if the application cache ever  needs to change, it may be necessary to make changes to two separate  implementations hosted in different repositories. In addition, quality-of-implementation improvements to one version won’t benefit the other.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;a href=&quot;http://sideshowbarker.net/2009/06/22/webkit-project/#more-52&quot;&gt;[&amp;#8230;Continued&amp;#8230;]&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>Michael(tm)Smith</name>
			<email>mike@w3.org</email>
			<uri>http://sideshowbarker.net</uri>
		</author>
		<source>
			<title type="html">Michael(tm) Smith</title>
			<subtitle type="html">smith@sideshowbarker.net</subtitle>
			<link rel="self" href="http://sideshowbarker.net/feed/"/>
			<id>http://sideshowbarker.net/feed/atom/</id>
			<updated>2009-06-25T19:53:09+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKit destined to get its own content sniffer</title>
		<link href="http://sideshowbarker.net/2009/06/22/webkit-sniffer/"/>
		<id>http://sideshowbarker.net/2009/06/22/webkit-sniffer/</id>
		<updated>2009-06-21T20:54:46+00:00</updated>
		<content type="html">&lt;p&gt;Web/browser-security maven and coder Adam Barth has been working on implementing a &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=25064&quot;&gt;content sniffer in WebKit&lt;/a&gt;, based on a content-sniffing algorithm that was originally specified in  the HTML5 draft, but that’s now specified as a separate IETF draft that Adam is editing and that’s titled, &lt;a href=&quot;http://tools.ietf.org/id/draft-abarth-mime-sniff&quot;&gt;Content-Type Processing Model&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;WebKit applications/ports for particular platforms all currently need to rely on platform-specific content-sniffer code outside of WebKit. There are some reasons why it’s a good idea to do things that way — but there are also some good reasons not to; as Adam notes, doing things that way runs the risk of creating compatibility and security differences among various WebKit ports. So implementing a content-sniffer in WebKit itself will eliminate those differences.&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://sideshowbarker.net/2009/06/22/webkit-sniffer/#more-54&quot;&gt;[&amp;#8230;Continued&amp;#8230;]&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>Michael(tm)Smith</name>
			<email>mike@w3.org</email>
			<uri>http://sideshowbarker.net</uri>
		</author>
		<source>
			<title type="html">Michael(tm) Smith</title>
			<subtitle type="html">smith@sideshowbarker.net</subtitle>
			<link rel="self" href="http://sideshowbarker.net/feed/"/>
			<id>http://sideshowbarker.net/feed/atom/</id>
			<updated>2009-06-25T19:53:09+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKit team is implementing HTML datagrid element/API</title>
		<link href="http://sideshowbarker.net/2009/06/21/webkit-datagrid/"/>
		<id>http://sideshowbarker.net/2009/06/21/webkit-datagrid/</id>
		<updated>2009-06-21T13:53:35+00:00</updated>
		<content type="html">&lt;p&gt;David Hyatt just opened a new WebKit master feature-implementation bug on June 19th: &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=26545&quot;&gt;Implement the HTML5 datagrid&lt;/a&gt;. His first comment there:&lt;/p&gt;
&lt;blockquote cite=&quot;https://bugs.webkit.org/show_bug.cgi?id=26545&quot;&gt;
&lt;p&gt;This implementation may end up being very different from what&amp;#8217;s in the spec.&lt;/p&gt;
&lt;p&gt;The goal is to create a simpler implementation that can help improve the spec.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#datagrid&quot;&gt;&amp;lt;datagrid&gt; element&lt;/a&gt; is a new HTML element in the &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/&quot;&gt;HTML5 draft standard&lt;/a&gt;, with a corresponding &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#htmldatagridelement&quot;&gt;DOM interface&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Elliotte Rusty Harold did a &lt;a href=&quot;http://www.ibm.com/developerworks/library/x-html5/#N103B0&quot;&gt;writeup on datagrid for the IBM developerWorks site&lt;/a&gt; a couple years ago, describing it in these terms:&lt;/p&gt;
&lt;blockquote cite=&quot;http://www.ibm.com/developerworks/library/x-html5/#N103B0&quot;&gt;
&lt;p&gt;What distinguishes [datagrid] from a regular table is that the user can select rows, columns, and cells; collapse rows, columns, and cells; edit cells; delete rows, columns, and cells; sort the grid; and otherwise interact with the data directly in the browser on the client.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &amp;lt;datagrid&gt; spec has been updated since the time when that article was published, but at a high-level, the feature remains the pretty much the same as in that description quoted above.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s great to see a browser project finally starting to implement &amp;lt;datagrid&gt;, because it&amp;#8217;s a great feature that I think a lot of Web authors and Web developers are going to be very glad to have.&lt;/p&gt;</content>
		<author>
			<name>Michael(tm)Smith</name>
			<email>mike@w3.org</email>
			<uri>http://sideshowbarker.net</uri>
		</author>
		<source>
			<title type="html">Michael(tm) Smith</title>
			<subtitle type="html">smith@sideshowbarker.net</subtitle>
			<link rel="self" href="http://sideshowbarker.net/feed/"/>
			<id>http://sideshowbarker.net/feed/atom/</id>
			<updated>2009-06-25T19:53:09+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Palm released WebCore/WebKit sourcecode for their Palm Pre..</title>
		<link href="http://zecke.blogspot.com/2009/06/palm-released-webcorewebkit-sourcecode.html"/>
		<id>tag:blogger.com,1999:blog-13875843.post-7203552626361674622</id>
		<updated>2009-06-19T01:47:23+00:00</updated>
		<content type="html">My friends just told me that you can get the sourcecode from &lt;a href=&quot;http://opensource.palm.com/packages.html&quot;&gt;this place&lt;/a&gt;. Or a direct link to their &lt;a href=&quot;http://palm.cdnetworks.net/opensource/1.0.1/webcore-patch.gz&quot;&gt;WebCore modifications&lt;/a&gt; and &lt;a href=&quot;http://palm.cdnetworks.net/opensource/1.0.1/webkit-patch.gz&quot;&gt;WebKit modifications&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13875843-7203552626361674622?l=zecke.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>zecke</name>
			<email>noreply@blogger.com</email>
			<uri>http://zecke.blogspot.com/search/label/WebKit</uri>
		</author>
		<source>
			<title type="html">Some Blog</title>
			<subtitle type="html">Some random thoughts</subtitle>
			<link rel="self" href="http://zecke.blogspot.com/feeds/posts/full/-/WebKit"/>
			<id>tag:blogger.com,1999:blog-13875843</id>
			<updated>2009-07-02T02:53:10+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Using JavaScriptCore as the QtScript Back-end</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/16/using-javascriptcore-as-the-qtscript-back-end/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/16/using-javascriptcore-as-the-qtscript-back-end/</id>
		<updated>2009-06-16T16:52:30+00:00</updated>
		<content type="html">&lt;p&gt;As Ariya mentioned in &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/03/monster-evolution-in-qt-part-1-using-qt-script/&quot;&gt;one of his previous posts&lt;/a&gt;, we&amp;#8217;ve been doing some work on using JavaScriptCore (JSC) as the QtScript back-end. The whole idea is that you&amp;#8217;ll get the same QtScript API, but with JSC performance. There&amp;#8217;s also the prospect of being able to use the QtScript API together with QtWebKit, giving a smooth integration (e.g. having a function similar to QWebFrame::evaluateJavaScript() that returns a QScriptValue rather than a QVariant, and being able to use QScriptValue::call() and QScriptValue::setProperty() and friends; in general, having such API will just make it much easier for the C++ side and JS side to communicate).&lt;/p&gt;
&lt;p&gt;The main challenge we&amp;#8217;re facing is keeping the QtScript API behave 100% as it does today; it&amp;#8217;s not acceptable that the behavior changes just because us speed freaks decide to replace the back-end, of course. The main aid we have in this regard is the set of QtScript autotests; assuming the tests are all-encompassing (which, let&amp;#8217;s face it, is hard to guarantee, but let&amp;#8217;s pretend&amp;#8230;), after completing the back-end swap, all the tests should still pass. Once this goal is reached, some brave soul would step forward, brown paper bag in hand, asserting that except for performance improvements, it&amp;#8217;s not possible for the application developer to tell that the QtScript runtime was replaced. OK, so we&amp;#8217;ll probably have to do some real-world testing as well.&lt;/p&gt;
&lt;p&gt;Work on the back-end had been put on hold for some time due to various other projects, but now we&amp;#8217;re slowly getting back in business again. And the best news is that the ongoing work is now &lt;a href=&quot;http://qt.gitorious.org/+qt-developers/qt/webkit&quot;&gt;out in the open&lt;/a&gt; (&lt;a href=&quot;http://qt.gitorious.org/+qt-developers/qt/webkit/commits/qtscript-jsc-backend&quot;&gt;qtscript-jsc-backend branch)&lt;/a&gt;! Now before you start doing the Qt dance, just keep in mind that the branch is not currently in a state where it can be used to run new or existing apps against the back-end, because not all the API and/or behavior is implemented yet. Currently we&amp;#8217;re working on bringing it up-to-date with the last few months of changes in WebKit trunk, then we can focus on remaining API. In case you&amp;#8217;re interested in helping out &lt;em&gt;hardcore hacker&lt;/em&gt;-style, though, there&amp;#8217;s an easy recipe that we all follow: Run one of the qscript* autotests, look for failures or asserts that say &amp;#8220;Implement me&amp;#8221;, and hack on the implementation until the test passes. &lt;img src=&quot;http://labs.trolltech.com/blogs/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; Test statement by test statement, the compatibility will get there. Happy hacking!&lt;/p&gt;</content>
		<author>
			<name>Kent</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">The Chirp Of a Great Framework</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/16/the-chirp-of-a-great-framework/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/16/the-chirp-of-a-great-framework/</id>
		<updated>2009-06-16T07:45:33+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.thelins.se/johan/uploaded_images/DSC02645-747966.JPG&quot;&gt;&lt;img src=&quot;http://www.thelins.se/johan/uploaded_images/DSC02645-747966.JPG&quot; width=&quot;160&quot; height=&quot;120&quot; align=&quot;left&quot; hspace=&quot;5&quot; vspace=&quot;5&quot; /&gt;&lt;/a&gt;While planning for &lt;a href=&quot;http://www.qtsoftware.com/qtdevdays2008&quot;&gt;Developer Days 2008&lt;/a&gt; I tried to wring something interesting out of my technically starved brain to show off to the crowds of hackers attending. At the time I had just noticed Twitter, a service that seemed to promise the value of Facebook without all the junk - seeing status updates from my friends and the ramblings from people I find interesting or useful from an academic perspective.&lt;/p&gt;
&lt;p&gt;I started looking into the Twitter API and found that using Qt&amp;#8217;s QNetworkAccessManager I could quickly create something powerful that interoperated with URL API&amp;#8217;s. Attempting to be different, I decided that it wouldn&amp;#8217;t be cool to create a UI based on traditional QWidgets, and definately too boring to simply browse twitter.com. So, using the Twitter API which returns XML data, QtXmlPattern&amp;#8217;s XSLT support and a little bit of creative tinkering with exposing Qt native objects to QtWebKit, I ended up with a useful Twitter client that converted the XML data to UI.&lt;/p&gt;
&lt;p&gt;After returning from Developer Days, we enlisted the help of Girish - a(n ex )Troll and Generally Great Guy who helped polish my haphazardly written demo-code into something beautiful and functional - as well as write a completely new example on how to integrate with YouTube! Girish also made some nice screencasts for our Qt 4.5 launch (source follows after);&lt;/p&gt;




&lt;p&gt;




&lt;p&gt;
&lt;p&gt;And now we have finally pushed the two cool examples of QtWebKit that shows how easy and elegant it is to mixing web programming paradigms with native code in Qt! If you want to try it out, play with it, modify it, please head over to the &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo&quot;&gt;Graphics Dojo&lt;/a&gt; and look for &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/twitterview&quot;&gt;twitterview&lt;/a&gt; and &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/videofeed&quot;&gt;videofeed&lt;/a&gt;. Happy hacking!&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
		<author>
			<name>Henrik Hartz</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">DumpRenderTree: Windows Cairo 'Mostly' Good</title>
		<link href="http://lwat.blogspot.com/2009/06/dumprendertree-windows-cairo-mostly.html"/>
		<id>tag:blogger.com,1999:blog-3416807.post-69338581385531719</id>
		<updated>2009-06-11T18:35:56+00:00</updated>
		<content type="html">&lt;a href=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SjGgAYkjFSI/AAAAAAAAAHw/N1SQe7i3SI4/s1600-h/Picture+2.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SjGgAYkjFSI/AAAAAAAAAHw/N1SQe7i3SI4/s320/Picture+2.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5346230161121678626&quot; /&gt;&lt;/a&gt;I recently found and corrected the cause of the hated &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=22891&quot;&gt;scrolling bug&lt;/a&gt;.  A question by Jonghoon Kim about the inconsistent use of &lt;span class=&quot;Apple-style-span&quot;&gt;SetGraphicsMode(bitmapDC, GM_ADVANCED); &lt;/span&gt;prompted me to review the handling of graphics context between Windows and Cairo.  This led to the discovery that the Windows &lt;span class=&quot;Apple-style-span&quot;&gt;HDC&lt;/span&gt; and the Cairo &lt;span class=&quot;Apple-style-span&quot;&gt;cairo_t&lt;/span&gt; contexts were not being kept in sync in all cases, and so various transformations were being inconsistently applied, resulting in the strange behavior that prompted me to file the bug.   Now that the only major rendering discrepancy was resolved, it's time to start solidifying the Cairo port.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I finally got around to updating DumpRenderTree so that it can run the enormous suite of layout tests included with the WebKit sources.  I was pretty sure that things would be fairly broken, but I am pretty happy that DumpRenderTree decided that the Windows Cairo build desired a grade of &quot;D&quot;.&lt;br /&gt;&lt;br /&gt;Here are the test results:&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;7907.74s total testing time&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;5598 test cases (54%) succeeded&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;4597 test cases (44%) had incorrect layout&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;19 test cases (1%)&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;4 test cases (1%)&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;409 test cases (4%) had stderr output&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Clearly there is a lot of room for improvement.  However, as you can see in the screen grab above, many of the differences are a matter of one or two pixels.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll probably target the crashes first.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3416807-69338581385531719?l=lwat.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Brent</name>
			<email>noreply@blogger.com</email>
			<uri>http://lwat.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Lambda, Where Art Thou?</title>
			<subtitle type="html">Rantings and Ravings about type systems, functional programming, and the corporations that hate them.  And also lots of WebKit stuff.</subtitle>
			<link rel="self" href="http://lwat.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3416807</id>
			<updated>2009-06-29T17:53:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Night-mode in QWebView</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/09/night-mode-in-qwebview/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/09/night-mode-in-qwebview/</id>
		<updated>2009-06-09T07:01:24+00:00</updated>
		<content type="html">&lt;p&gt;An interesting feature of a navigation system (so I was told, I don&amp;#8217;t own a car) is the so-called &amp;quot;night mode&amp;quot;. Basically the display is adjusted so that the text and the map become more readable under low ambient light condition. An easy trick to do this is by inverting the color, just like what Mac OS X can do for the whole desktop.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http://doc.trolltech.com/qpainter.html&quot;&gt;QPainter&lt;/a&gt;, it is fairly easy to do that in just a few lines of code. Basically we need to use a proper &lt;a href=&quot;http://doc.trolltech.com/qpainter.html#CompositionMode-enum&quot;&gt;composition mode&lt;/a&gt;. If you think composition modes are like black magic, here is a chance to understand a bit of it. As you read the &lt;a href=&quot;http://doc.trolltech.com/4.5/qpainter.html#CompositionMode-enum&quot;&gt;documentation&lt;/a&gt; on QPainter::CompositionMode_Difference or CompositionMode_Exclusion, you will find that &lt;i&gt;Painting with white inverts the destination color&lt;/i&gt;. Voila! That is exactly the cheating path that we have to use.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/ncexhkwISuVYeYY3wtU8dg?feat=embedwebsite&quot;&gt;&lt;img id=&quot;webnightmode&quot; src=&quot;http://lh6.ggpht.com/_Oijhf1ZPv-4/Siwd2kFnN5I/AAAAAAAABCI/cGIewu0-Aic/s800/webnightmode.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;The super-short example for color inversion is in the &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo&quot;&gt;Graphics Dojo repository&lt;/a&gt; under the webnightmode directory (available for both Qt/C++ and PyQt). Although the trick here is illustrated for QWebView, of course it is suitable for other widgets, too (see &lt;a href=&quot;http://stackoverflow.com/questions/893490/qt-double-buffering-are-there-any-neat-tricks-to-capture-pixels-or-manipulate/897722#897722&quot;&gt;Henrik&amp;#8217;s yesMan example&lt;/a&gt;). Note that not every paint engine/device supports QPainter::CompositionMode_Difference, hence why in the code I force the use of raster graphics system under X11.&lt;/p&gt;
&lt;p&gt;Note that an actual implementation of a night-mode feature is likely more complicated than just a color inversion method (feel free to suggest or brainstorm the ideas for such an algorithm). The overall brightness and constrast should be taken into account. Likely this requires an adventure in the non-RGB color space, something that is outside the scope of this example. Most of the cases however, you can get away with the discussed trick.&lt;/p&gt;
&lt;p&gt;Exercise for the brave readers: use selectors (CSS or jQuery) to find the map element, then invert that element only.&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Adam Barth and Dave Levin are now WebKit reviewers</title>
		<link href="http://webkit.org/blog/379/adam-barth-and-dave-levin-are-now-webkit-reviewers/"/>
		<id>http://webkit.org/blog/?p=379</id>
		<updated>2009-06-08T22:13:26+00:00</updated>
		<content type="html">&lt;p&gt;Adam has been a long-time contributer of security fixes.   Dave comes to us through the Chromium porting effort and has done quite a bit of work on HTML5 Workers as well.  Please join me in congratulating Adam and Dave on their reviewer status!&lt;/p&gt;</content>
		<author>
			<name>Surfin&amp;rsquo; Safari</name>
			<uri>http://webkit.org/blog</uri>
		</author>
		<source>
			<title type="html">Surfin' Safari</title>
			<subtitle type="html">All about WebKit development</subtitle>
			<link rel="self" href="http://webkit.org/blog/feed/"/>
			<id>http://webkit.org/blog/feed/atom/</id>
			<updated>2009-06-08T22:53:06+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">CFLite Corrections, Web Inspector</title>
		<link href="http://lwat.blogspot.com/2009/06/cflite-corrections-web-inspector.html"/>
		<id>tag:blogger.com,1999:blog-3416807.post-2360886397004790183</id>
		<updated>2009-06-08T17:36:04+00:00</updated>
		<content type="html">&lt;a href=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SibuY42MvQI/AAAAAAAAAHo/SGb63I1rYf0/s1600-h/Picture+6.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_hInRJC0BnDo/SibuY42MvQI/AAAAAAAAAHo/SGb63I1rYf0/s320/Picture+6.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5343220119265656066&quot; /&gt;&lt;/a&gt;Apple recently released an update of the CoreFoundation sources to their Open Source website, which prompted me to take a pass over the OpenCFLite project to merge the (minor) bits of new code.  While doing so, I decided to track down the cause of the bundle loading failure which was preventing WebKit from loading resources from the bundle.&lt;br /&gt;&lt;br /&gt;The problem turned out to be due to an incorrect file access method (it turns out that you have to pass the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx&quot;&gt;FILE_FLAG_BACKUP_SEMANTICS&lt;/a&gt; flag to CreateFile if you want to get a handle to a directory.  If you just ask for general permissions you get an &quot;Access Denied&quot; error.)&lt;br /&gt;&lt;br /&gt;Lo and behold, once this bug was corrected, CFLite.dll began happily loading WebKit resources which caused the myriad of context menu options to suddenly start working.&lt;br /&gt;&lt;br /&gt;The benefit?  The AWESOME WEB INSPECTOR is now live and functional!  The attached screenshot shows what this looks like under the Windows Cairo build.  Not too shabby!  :-)&lt;br /&gt;&lt;br /&gt;I've updated the &lt;a href=&quot;http://files.me.com/bfulgham/iay8p5&quot;&gt;requirements.zip&lt;/a&gt; file with the revised CFLite.dll.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3416807-2360886397004790183?l=lwat.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Brent</name>
			<email>noreply@blogger.com</email>
			<uri>http://lwat.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Lambda, Where Art Thou?</title>
			<subtitle type="html">Rantings and Ravings about type systems, functional programming, and the corporations that hate them.  And also lots of WebKit stuff.</subtitle>
			<link rel="self" href="http://lwat.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3416807</id>
			<updated>2009-06-29T17:53:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Taking over memprof</title>
		<link href="http://zecke.blogspot.com/2009/06/taking-over-memprof.html"/>
		<id>tag:blogger.com,1999:blog-13875843.post-6519401493796559761</id>
		<updated>2009-06-08T08:50:40+00:00</updated>
		<content type="html">Where did all my memory go? Who is allocating it, how much is being allocated? From where were theses QImages allocated? valgrind provides an accurate leak checker, but for a running application you might want to know about allocations and browse through them and don't take the performance hit of valgrind (e.g with massif).&lt;br /&gt;&lt;br /&gt;There is an easy way to answer these questions, use &lt;a href=&quot;http://www.secretlabs.de/projects/memprof/&quot;&gt;memprof&lt;/a&gt;. &lt;a href=&quot;http://www.secretlabs.de/projects/memprof/&quot;&gt;memprof&lt;/a&gt; used to be a GNOME application, it was unmaintained, the website was gone from the net, but this tool is just way too good to just drop out of the net. After trying to reach the maintainer twice I decided to adopt the orphaned thing.&lt;br /&gt;&lt;br /&gt;Check the application out, it is great, it helps me to get an overview of memory allocations for WebKit/GTK+...&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13875843-6519401493796559761?l=zecke.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>zecke</name>
			<email>noreply@blogger.com</email>
			<uri>http://zecke.blogspot.com/search/label/WebKit</uri>
		</author>
		<source>
			<title type="html">Some Blog</title>
			<subtitle type="html">Some random thoughts</subtitle>
			<link rel="self" href="http://zecke.blogspot.com/feeds/posts/full/-/WebKit"/>
			<id>tag:blogger.com,1999:blog-13875843</id>
			<updated>2009-07-02T02:53:10+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">QWebView snap-scrolling</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/06/qwebview-snap-scrolling/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/06/qwebview-snap-scrolling/</id>
		<updated>2009-06-06T08:33:14+00:00</updated>
		<content type="html">&lt;p&gt;When you develop a web browser for a mobile platform, a D-pad or a mini trackball is usually the main in-page navigation input. In some browsers, going &amp;quot;down&amp;quot; scrolls the whole web page or jumps to the nearest (sensible) hyperlink. There is an interesting observation here. As you scroll to read e.g. a news site, your eyes are locked to the topmost part of the browser. Hence, a scrolling system that avoids &amp;quot;slicing&amp;quot; the content right at the top of the view will be useful. Your eyes are not distracted because it is easier to locate the &amp;quot;next-to-read&amp;quot; spot after the page scrolls.&lt;/p&gt;
&lt;p&gt;If the above paragraph is not easy to understand, consider the following screenshot. Both windows show the mobile version of BBC News, after scrolling (I pressed the down arrow nine times). On the right side, the image is cut. On the left side however, the image is positioned so that it will be aligned properly. In fact, if I continue pressing down arrow key many times until I reach the section where there is no image anymore, it always scrolls and snaps each text line, which is very convenient as you read the text.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/Y1Wv2aHv_veZ4RSJ6zVPHg?feat=embedwebsite&quot;&gt;&lt;br /&gt;
&lt;img id=&quot;snapscroll&quot; src=&quot;http://lh6.ggpht.com/_Oijhf1ZPv-4/SikT0q7GEEI/AAAAAAAABBE/BDXm0J_z5LA/s800/snapscroll.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The example for doing this snap-scrolling is in the &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo&quot;&gt;Graphics Dojo repository&lt;/a&gt; under the snapscroll directory (available for both Qt/C++ and PyQt). To keep the example as simple as possible, I implement the snapping when down arrow key is only. Ideally, you might want to handle e.g. the up arrow, as well as page up and page down. Furthermore, the snap threshold constant actually should be font size dependent to ensure smooth scrolling. If you try the code, sometimes it fails because it snaps only in one direction. If you really prefer the &amp;quot;magnet behavior&amp;quot; consider adding some intelligence to snap in both directions.&lt;/p&gt;
&lt;p&gt;The code also shows how to find out the bounding boxes (of the DOM elements) in a particular area of interest &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebframe.html#hitTestContent&quot;&gt;QWebFrame::hitTestContent()&lt;/a&gt; (in Qt 4.6 we will have the full QWebElement solution for this). The code proves, it is sufficient (at least for this scrolling purpose) to check for a hit in several sample points in that area. Beside, if a 3&amp;#215;3 pixels image escapes our detection and will not be snapped, how does it matter anyway?&lt;/p&gt;
&lt;p&gt;Happy snapping!&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Web Developers: Keeping Up With Google Chrome</title>
		<link href="http://blog.chromium.org/2009/06/web-developers-keeping-up-with-google.html"/>
		<id>tag:blogger.com,1999:blog-2471378914199150966.post-2276029719196820390</id>
		<updated>2009-06-03T23:57:00+00:00</updated>
		<content type="html">&lt;div&gt;Google Chrome is moving fast. Version 2.0 was stabilized just six months after 1.0, and auto-updates have ensured that nearly all users are using the newest version of the browser within days of a release. As a web developer, it can be a bit daunting that the browser version changes so fast: What if the new version breaks something? How can I be prepared for changes that will affect my sites?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To answer these questions, it's helpful to know how Google Chrome releases are made, the relationship between &quot;dev,&quot; &quot;beta,&quot; and &quot;stable&quot; update channels, and how you can test new versions. In this post, we'll be expanding on &lt;a href=&quot;http://blog.chromium.org/2009/01/google-chrome-release-channels.html&quot;&gt;Mark Larson's earlier explanation of the update channel system&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Stable channel. &lt;span class=&quot;Apple-style-span&quot;&gt;As Mark outlines, the Stable channel is, well, stable. As a web developer, that means that as long as the major version &amp;#x2014; the &quot;2&quot; in &quot;version 2.0.181.1&quot; &amp;#x2014; doesn't change, you can count on Stable channel builds to use the same versions of WebKit (CSS, layout, etc.), V8 (JavaScript), and other components that might affect how a page loads or renders. Stable updates between major version releases are generally focused on addressing security issues, fixing egregious bugs, and improving stability. The big developer-facing bits of the browser won't change on the Stable channel until the next major version is released, and you can always preview upcoming changes using the Beta channel.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Beta channel.&lt;/b&gt; As a web developer, being on the Beta channel will ensure that you can test your sites with the next version of Google Chrome's rendering behavior before it's sent to the Stable channel and into the hands of most users. Whenever a major version lands in the Beta channel, the versions of WebKit, V8, networking, and the other systems that affect how web pages load and render generally become fixed. These versions may change during the major version's beta cycle, but changes are usually incremental fixes to help stabilize a feature rather than changes in behavior. New versions of WebKit may be introduced during a beta period, but those versions are always accompanied by a new build number (e.g. 2.0.169.xx vs. 2.0.172.xx) and are unlikely to differ drastically. As this major version moves closer to a stable release, these kinds of changes become more and more infrequent. Since Google Chrome development moves so quickly, you should stay on the Beta channel to catch compatibility issues ahead of time.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Dev channel.&lt;/b&gt; The Dev channel is where the sausage gets made. Dev releases happen frequently, and they track what's happening upstream in WebKit, V8, and other relevant systems very closely. This means that changes that might affect rendering, performance, and layout are likely to occur on the Dev channel on a regular basis. We don't recommend that you install the Dev channel if you're looking to maintain site compatibility, since tracking breaking changes as they happen can be a major headache. You should be able to spot any problems early enough via the Beta channel.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Users are on the Stable channel by default. To get onto the Beta or Dev channel, follow &lt;a href=&quot;http://dev.chromium.org/getting-involved/dev-channel&quot;&gt;these instructions&lt;/a&gt;. Once you change to a less stable channel, e.g. from Stable to Dev, there isn't a supported &quot;downgrade&quot; path. If you change from the less stable channel back to a more stable one, Google Chrome will simply stop updating until your new channel &quot;catches up&quot; with the installed build. To force an immediate downgrade, uninstall and reinstall using an appropriate installer. This may occasionally cause errors when your more stable (older) version tries to read the newer user data left over from the previous installation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you have a copy of Google Chrome, you can test your site's compatibility. &lt;a href=&quot;http://code.google.com/p/doctype/wiki/Welcome&quot;&gt;Google Doctype&lt;/a&gt; has a helpful &lt;a href=&quot;http://code.google.com/p/doctype/wiki/ArticleGoogleChromeCompatFAQ&quot;&gt;FAQ on best practices for Google Chrome compatibility&lt;/a&gt;.  In short, prefer object detection over userAgent string parsing; don't rely on pixel-accurate font and element sizes; declare your pages' encodings correctly; double check &lt;span class=&quot;Apple-style-span&quot;&gt;&amp;lt;object&amp;gt;&lt;/span&gt; and &lt;span class=&quot;Apple-style-span&quot;&gt;&amp;lt;embed&amp;gt;&lt;/span&gt; parameters; check for illegal markup; and avoid browser-specific CSS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Chromium and WebKit teams work hard to ensure compatibility with websites. If after reading the above you discover browser problems, please don't hesitate to file a bug. If a particular problem with your site occurs in both Google Chrome and a corresponding version of Safari, it may be due to a WebKit issue, which you can file in the &lt;a href=&quot;https://bugs.webkit.org/&quot;&gt;WebKit bug tracker&lt;/a&gt;. If the problem only happens in Google Chrome, log an issue in the &lt;a href=&quot;http://code.google.com/p/chromium/issues/&quot;&gt;Chromium bug tracker&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;post-author&quot;&gt;Posted by Alex Russell, Software Engineer&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2471378914199150966-2276029719196820390?l=blog.chromium.org&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Ian Fette</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.chromium.org/</uri>
		</author>
		<source>
			<title type="html">Chromium Blog</title>
			<link rel="self" href="http://blog.chromium.org/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-2471378914199150966</id>
			<updated>2009-07-01T01:53:01+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Weather applet (again)</title>
		<link href="http://labs.trolltech.com/blogs/2009/06/02/weather-applet-again/"/>
		<id>http://labs.trolltech.com/blogs/2009/06/02/weather-applet-again/</id>
		<updated>2009-06-02T07:25:13+00:00</updated>
		<content type="html">&lt;p&gt;For any widget system, be it KDE4 Plasma, Mac OS X Dashboard, Yahoo! Widgets, Opera Widget, Google Gadgets, Microsoft Gadgets, and so on, weather applet is usually the typical example (beside a digital clock, an analog clock, or other variants of the clock). What is shown here is yet another little weather info tool, built using &lt;a href=&quot;http://doc.trolltech.com/qtwebkit.html&quot;&gt;QtWebKit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The idea came up when the other day I presented a challenge to myself: what is the shortest possible code that shows the weather, along with the forecasts for the next few days, for any places in the world? Usually this involves a lot of thinking. Thanks to Google however, the solution came instantly (avid Google users know this by heart). Hint: see the result of searching for &lt;a href=&quot;http://www.google.com/search?q=Weather+in+Oslo&quot;&gt;&amp;quot;Weather in Oslo&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By smartly (some people call it cheating, though) combining this powerful Google service and a web rendering engine, the solution magically appears. Or rather it should not. Because by using magic, I will be unfair to my fellow (poor) software engineers, I decided to fire my Qt Creator and implemented the answer to that challenge the hard way, i.e. by actually doing it. The screenshot first:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/PrXOIDcvBr7ugErnTs_sCA?feat=embedwebsite&quot;&gt;&lt;br /&gt;
&lt;img id=&quot;gweather&quot; src=&quot;http://lh5.ggpht.com/_Oijhf1ZPv-4/SiPWOAQF2vI/AAAAAAAABAQ/m-Bdgk4znqo/s800/gweather.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The logic of the program is rather simple. Just loads the proper URL corresponding to the search for the weather, as if you would have typed in manually in your favorite web browser. After the web page shows up, find the DOM element that represents that information snippet (we are not interested in the search results lists), this is done using little jQuery-based JavaScript code. The web page is rendered to a pixmap, only the region of that DOM element is painted, and then the pixmap is shown.&lt;/p&gt;
&lt;p&gt;The code is just one git clone (or git pull) away from &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo&quot;&gt;the Graphics Dojo repository&lt;/a&gt; (yes, we are also moving to Gitorious). Check the subdirectory named &lt;a href=&quot;http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/gweather&quot;&gt;gweather&lt;/a&gt;. You need Qt at least version 4.5.&lt;/p&gt;
&lt;p&gt;As healthy exercises for the readers, try the following things. Implement an auto-reload feature (be gentle, no need to refresh the page every 5 minutes). In addition, add a possibility to change the location or city. Remember, magic is not allowed.&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Recent WebKit Updates</title>
		<link href="http://lwat.blogspot.com/2009/05/recent-webkit-updates.html"/>
		<id>tag:blogger.com,1999:blog-3416807.post-7802989290175459052</id>
		<updated>2009-06-01T15:12:13+00:00</updated>
		<content type="html">&lt;a href=&quot;http://2.bp.blogspot.com/_hInRJC0BnDo/SiBw0MH3gzI/AAAAAAAAAHg/k7QANW-WqPg/s1600-h/Picture+5.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_hInRJC0BnDo/SiBw0MH3gzI/AAAAAAAAAHg/k7QANW-WqPg/s320/Picture+5.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5341393199971140402&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I've beaten back the recent bit-rot that is endemic in tracking the WebKit project.  This project moves so fast that if you don't stay on top of things it rapidly leaves you behind!&lt;br /&gt;&lt;br /&gt;Recent updates now provide proper support for synthetic bold/oblique fonts, as well as using more of the Chromium team's image decoders.  I also corrected various build settings that were causing the Cairo build to attempt to link against old ICU libraries.&lt;br /&gt;&lt;br /&gt;The never-ending &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=17484&quot;&gt;patch&lt;/a&gt; is now down to just slightly over 2 KB.  Once I get the printing stuff sorted out this patch should no longer be needed.&lt;br /&gt;&lt;br /&gt;Next week I should get the sample JavaScript example application working.  This little app will probably start linking against the new JavaScriptCore.dll, since WebKit is now broken into two DLL's to simplify access to the core JavaScript routines.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3416807-7802989290175459052?l=lwat.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Brent</name>
			<email>noreply@blogger.com</email>
			<uri>http://lwat.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Lambda, Where Art Thou?</title>
			<subtitle type="html">Rantings and Ravings about type systems, functional programming, and the corporations that hate them.  And also lots of WebKit stuff.</subtitle>
			<link rel="self" href="http://lwat.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3416807</id>
			<updated>2009-06-29T17:53:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">CallJS Updated</title>
		<link href="http://lwat.blogspot.com/2009/06/calljs-updated.html"/>
		<id>tag:blogger.com,1999:blog-3416807.post-2603876678445447256</id>
		<updated>2009-06-01T15:12:01+00:00</updated>
		<content type="html">I've updated the &lt;a href=&quot;http://files.me.com/bfulgham/socw2n&quot;&gt;CallJS&lt;/a&gt; sample project with current WebKit binaries.&lt;br /&gt;&lt;br /&gt;* Now uses the WebKit COM API call &quot;WebKitCreateInstance&quot;, which greatly simplifies using WebKit.  No more having to figure out the right incantation to get the manifest files built properly.&lt;br /&gt;* Cleaned up some of the MFC code.&lt;br /&gt;* Updated to current ICU and other support files.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3416807-2603876678445447256?l=lwat.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Brent</name>
			<email>noreply@blogger.com</email>
			<uri>http://lwat.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Lambda, Where Art Thou?</title>
			<subtitle type="html">Rantings and Ravings about type systems, functional programming, and the corporations that hate them.  And also lots of WebKit stuff.</subtitle>
			<link rel="self" href="http://lwat.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-3416807</id>
			<updated>2009-06-29T17:53:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">My first patch to WebKitGTK+ committed!</title>
		<link href="http://blog.kov.eti.br/?p=75"/>
		<id>http://blog.kov.eti.br/?p=75</id>
		<updated>2009-06-01T03:19:10+00:00</updated>
		<content type="html">&lt;p&gt;Well, not really my first patch. But the first thing I tried to mess with when I first started looking at WebKitGTK+ was the &lt;a href=&quot;http://webkitgtk.org/reference/webkitgtk-WebKitNetworkRequest.html&quot;&gt;WebKitNetworkRequest&lt;/a&gt; object, because I was fancing the idea of writing stuff such as HTTP transactions monitoring, and things like that. So I wrote a big patch which exposed the internal WebCore object (ResourceRequest) fully through our own object. That was back in early 2008. We have come a long way since, and through all these months I got a broader perception of what kind of APIs we need, and how WebCore works. We also decided on going soup-only, which had a huge impact on what the final patch actually looks like.&lt;/p&gt;
&lt;p&gt;The patch which finally got committed this week is, how can I put it, &lt;em&gt;VERY&lt;/em&gt; different from what I had originally written. You can take a look at the long discussions about it in the &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=18608&quot;&gt;bug report&lt;/a&gt; I used to track progress. I think I should point out that Marco Barisione and Christian Dywan were crucial in helping me get going with my contribution to WebKit at that time.&lt;/p&gt;
&lt;p&gt;What this change gives us is basically the fact that a WebKitNetworkRequest now carries more than just the URI for the request (it actually carries with it a reference to the SoupMessage that will be used later in the request processing, which we are planning to expose in the near future), meaning that when WebKit API gives you a request, and you use it to cause a new load (for, say, opening in a new tab), you still get all the headers that were supposed to go with the request, so you don&amp;#8217;t lose things such as, for instance, Referer. So, now, after more than 5 years, the bug that complained that Epiphany &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=120341&quot;&gt;did not set Referer&lt;/a&gt; (and &lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=59572&quot;&gt;Galeon&lt;/a&gt; before that) for new tabs is finally closed.&lt;/p&gt;
&lt;p&gt;By the way, this problem has been &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=48902&quot;&gt;fixed for Mozilla&amp;#8217;s browser&lt;/a&gt; back in 2002, but the embedding API is &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=135659&quot;&gt;still buggy&lt;/a&gt; up to now. There is still hope, since there&amp;#8217;s an attached patch that fixes the issue to be reviewed, and landed. If anyone is reading, it might be a good oportunity to get this fixed in there as well, so that users of applications that use Gecko&amp;#8217;s embedding API can also benefit!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Noronha</name>
			<uri>http://blog.kov.eti.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Noronha (kov) » webkit</title>
			<subtitle type="html">um hacker debiano que mora num lugar chamado mundo</subtitle>
			<link rel="self" href="http://blog.kov.eti.br/wp-rss2.php?cat=16"/>
			<id>http://blog.kov.eti.br/wp-rss2.php?cat=16</id>
			<updated>2009-07-01T14:53:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Epiphany/WebKitGTK+ in Debian unstable</title>
		<link href="http://blog.kov.eti.br/?p=73"/>
		<id>http://blog.kov.eti.br/?p=73</id>
		<updated>2009-05-19T03:29:42+00:00</updated>
		<content type="html">&lt;p&gt;I have prepared an epiphany-webkit source package some time ago, and it has finally got out of NEW, thanks to the work Ganeff did this weekend on processing the queue =).&lt;/p&gt;
&lt;p&gt;The good thing about those packages is I have patched them heavily to allow for easy parallel installation with Epiphany/Gecko, so you don&amp;#8217;t need to give up your current browser to experiment and test Epiphany with the WebKitGTK+ backend. The gconf tree used for this package is &lt;em&gt;/apps/epiphany-webkit&lt;/em&gt;, separate from the normal &lt;em&gt;/apps/epiphany&lt;/em&gt;, for extra safety, but notice that your &lt;em&gt;~/.gnome2/epiphany&lt;/em&gt; will be shared between the Gecko and WebKit versions, even though the files used by each of them are different most of the time.&lt;/p&gt;
&lt;p&gt;Go ahead and install the epiphany-webkit package, and have fun. Notice that if you have an already running session of Epiphany/Gecko, running epiphany-webkit will not be enough to launch Epiphany/Webkit, since Epiphany will just request that a new window be opened through D-Bus. The easiest way to test, if you just want a quick peek, is to run &lt;em&gt;epiphany-webkit -p&lt;/em&gt;; this will run a &amp;#8216;private&amp;#8217; instance of Epiphany/WebKit, which doesn&amp;#8217;t touch your history, bookmarks, and passwords.&lt;/p&gt;
&lt;p&gt;If you are feeling adventurous and want to make Epiphany/WebKit your default Epiphany you can do so using the following command, and selecting epiphany-webkit:&lt;/p&gt;
&lt;pre&gt;
# update-alternatives --config epiphany-browser
&lt;/pre&gt;</content>
		<author>
			<name>Gustavo Noronha</name>
			<uri>http://blog.kov.eti.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Noronha (kov) » webkit</title>
			<subtitle type="html">um hacker debiano que mora num lugar chamado mundo</subtitle>
			<link rel="self" href="http://blog.kov.eti.br/wp-rss2.php?cat=16"/>
			<id>http://blog.kov.eti.br/wp-rss2.php?cat=16</id>
			<updated>2009-07-01T14:53:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKitGTK+ 1.1.7!</title>
		<link href="http://blog.kov.eti.br/?p=71"/>
		<id>http://blog.kov.eti.br/?p=71</id>
		<updated>2009-05-15T00:27:50+00:00</updated>
		<content type="html">&lt;p&gt;So WebKitGTK+ 1.1.7 is here. JIT is finally enabled for x86-64 on Linux! Yay! Go &lt;a href=&quot;http://webkitgtk.org/&quot;&gt;get it!&lt;/a&gt;. I am hoping for 1.1.8 we will have serious improvements on what we have landed recently, and on the Media Player. So, stay tuned =D. It looks more and more like we will have a good release for GNOME 2.28.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Noronha</name>
			<uri>http://blog.kov.eti.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Noronha (kov) » webkit</title>
			<subtitle type="html">um hacker debiano que mora num lugar chamado mundo</subtitle>
			<link rel="self" href="http://blog.kov.eti.br/wp-rss2.php?cat=16"/>
			<id>http://blog.kov.eti.br/wp-rss2.php?cat=16</id>
			<updated>2009-07-01T14:53:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Jan Michael Alonzo is now a WebKit Reviewer</title>
		<link href="http://webkit.org/blog/377/jan-michael-alonzo-is-now-a-webkit-reviewer/"/>
		<id>http://webkit.org/blog/?p=377</id>
		<updated>2009-05-13T19:46:36+00:00</updated>
		<content type="html">&lt;p&gt;Jan has been around for a very long time now, and has contributed lots of patches to the GTK+ port of WebKit. He&amp;#8217;s worked tirelessly on the build system, and on keeping the port compilable. He has also done important work on the testing infra-structure, and contributed sizable chunks of API. Please join me in congratulating Jan on his reviewer status!&lt;/p&gt;</content>
		<author>
			<name>Surfin&amp;rsquo; Safari</name>
			<uri>http://webkit.org/blog</uri>
		</author>
		<source>
			<title type="html">Surfin' Safari</title>
			<subtitle type="html">All about WebKit development</subtitle>
			<link rel="self" href="http://webkit.org/blog/feed/"/>
			<id>http://webkit.org/blog/feed/atom/</id>
			<updated>2009-06-08T22:53:06+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Scrolling in GTK+ and WebKit/GTK+</title>
		<link href="http://zecke.blogspot.com/2009/05/scrolling-in-gtk-and-webkitgtk.html"/>
		<id>tag:blogger.com,1999:blog-13875843.post-345632619412876135</id>
		<updated>2009-05-10T19:40:27+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;Model/View &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkAdjustment.html&quot;&gt;GtkAdjustment&lt;/a&gt; and &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkScrollbar.html&quot;&gt;GtkScrollbar&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;The GtkAdjustment is probably best described as a model for scrolling. It has several properties, e.g. the current position (value), the lower and upper possibilities, and the size increments. The GtkScrollbar is operating on top of a GtkAdjustment. It is responsible for taking user events and painting. When scrolling it will look at the lower and upper properties, it will update the value in case of something is happening.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;WebCore::Scrollbar in WebCore&lt;/h3&gt;&lt;br /&gt;The Scrollbar is created by the Scrollbar::createNativeScrollbar &quot;factory&quot;. For many platforms the painting/theming and behaviour is entriely done within that class. For GTK+ we will use a GtkScrollbar, this widget happens to not have its own GdkWindow which makes painting a bit more easy, we will just forward the original expose event and let it draw as well (from &lt;code&gt;ScrollbarGtk::paint&lt;/code&gt;). WebCore::Scrollbar in WebCore are used in two places. One prominent one is the WebCore::ScrollView which is the base class of the WebCore::FrameView and will be used to enable people to scroll on their content in horizontal and vertical direction, the other big user are scrollable div's (we have a manual test in WebCore/manual-tests/gtk/ to test positioning of these scrollbars).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;Scrolling on &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkWidget.html&quot;&gt;GtkWidget&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;The scrolling starts quite innocently with the description of &lt;a href=&quot;http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-set-scroll-adjustments&quot;&gt;gtk_widget_set_scroll_adjustments&lt;/a&gt;. In case of WebKitWebView in WebKit/GTK+ we do want to support scrolling so we need to return TRUE... but how. If you take a look at the class structure of GtkWidget there is a GObject signal identifier you will have to set with the signal you have created. This is done in the WebKitWebView class init and we will remember and use the GtkAdjustment, e.g. set by a GtkScrolledWindow, in the WebCore::ScrollView (base of WebCore::FrameView class). The usage of GtkAdjustment allows to have different means of scrolling, e.g. by fingers on a touchscreen, or by a wheel... the representation of the scroll concept will change, the implementation not...&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;The problem of mainFrame and subframes&lt;/h3&gt;&lt;br /&gt;So far we will most of the times only have external GtkAdjustment set on the mainFrame that is embedded in something like a GtkScrolledWindow but there are pages that will create a frameset and you will have subframes that require scrolling (my test case here is &lt;a href=&quot;http://images.google.com&quot;&gt;Google Images&lt;/a&gt;). What we are ending up with is having a WebCore::FrameView with GtkAdjustments set from the WebKitWebView and some WebCore::FrameView without GtkAdjustments set at all. On cases without a GtkAdjustment, there is no one that will place a GtkScrollbar (and resize the WebKitWebView to be next to it), so the WebCore::ScrollView will create a ScrollbarGtk to handle this job. This creates the siutation that one WebCore::FrameView class will or will not have a Scrollbar (and manage its size...).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;The current solution&lt;/h3&gt;&lt;br /&gt;When we have a GtkAdjustment set in the WebCore::ScrollView do not think about scrollbars, the need of them, the positioning of them at all. Simply update the properties including the current value, the visibleWidth and contentWidth. The upside is we have a GtkWidget that is working like a GtkWidget and can be embedded into a GtkScrolledWindow or a MokoFingerScroll (back in the better days). The downside of this include that we have more platform specific code and that we will not send onscroll events... due not going through ScollbarClient::valueChanged....&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;h3&gt;The new solution&lt;/h3&gt;&lt;br /&gt;Wrap the GtkAdjustment we get set into a ScrollbarGtk but do not create a GtkScrollbar. This should create a WebCore::Widget with WebCore::Widget::platformWidget() returning zero and this should set the width() and height() of this Scrollbar to zero meaning that the ScrollView calculation (e.g. updating visibleWidth/visibleHeight) is not negatively influenced, we can kill some more &lt;code&gt;#ifdef PLATFORM(GTK)&lt;/code&gt; from WebCore::ScrollView and that we properly send onscroll events as all scrolling is going through the WebCore::Scrollbar code path, like with every other port. For having navigation working we must be sure to reset the GtkAdjustment, due the nature of the FrameView this is best done when creating the ScrollBar... The progress of this can be tracked in &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=25646&quot;&gt;bug #25646&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13875843-345632619412876135?l=zecke.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>zecke</name>
			<email>noreply@blogger.com</email>
			<uri>http://zecke.blogspot.com/search/label/WebKit</uri>
		</author>
		<source>
			<title type="html">Some Blog</title>
			<subtitle type="html">Some random thoughts</subtitle>
			<link rel="self" href="http://zecke.blogspot.com/feeds/posts/full/-/WebKit"/>
			<id>tag:blogger.com,1999:blog-13875843</id>
			<updated>2009-07-02T02:53:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">FrameView and navigation</title>
		<link href="http://zecke.blogspot.com/2009/05/frameview-and-navigation.html"/>
		<id>tag:blogger.com,1999:blog-13875843.post-1294331315291129841</id>
		<updated>2009-05-10T19:04:05+00:00</updated>
		<content type="html">Visiting a site can have certain changes on a FrameView that will not be undone when leaving it. The most prominent example is a fixed background (by CSS) which will disable using blit on scrolling. There might be different things as well. Another one would be the PageCache and navigation to pages in it. The result is that for every page navigation you will create a new FrameView. For most/all ports this is done in &lt;code&gt;FrameLoaderClient::transitionToCommittedForNewPage()&lt;/code&gt;. There is even a convience method shared between most ports in the form of &lt;code&gt;Frame::createView&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From an API point of view this means that there is one WebKitWebView (in terms of Gtk+) and this WebKitWebView has one WebCore::Page and this page has exactly one WebCore::Frame the so called mainFrame but throughout the lifetime of WebKitWebView there will be multiple instances of FrameView's setup on the WebCore::Frame mainFrame. This also means that there are times were multiple WebCore::FrameView instances are around but only one should be active at a time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For WebKit/GTK+ we will need to make sure that all the state of a WebKitWebView is transferred/set to the WebCore::FrameView when it gets created and ever change to a WebKitWebView gets forwarded to it. The most prominet state information are colors and GtkAdjustment (another posting). I think Gustavo is also about to introduce Scrollbar policies soon.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13875843-1294331315291129841?l=zecke.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>zecke</name>
			<email>noreply@blogger.com</email>
			<uri>http://zecke.blogspot.com/search/label/WebKit</uri>
		</author>
		<source>
			<title type="html">Some Blog</title>
			<subtitle type="html">Some random thoughts</subtitle>
			<link rel="self" href="http://zecke.blogspot.com/feeds/posts/full/-/WebKit"/>
			<id>tag:blogger.com,1999:blog-13875843</id>
			<updated>2009-07-02T02:53:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Embedding a GtkWidget into a HTML page</title>
		<link href="http://zecke.blogspot.com/2009/05/embedding-gtkwidget-into-html-page.html"/>
		<id>tag:blogger.com,1999:blog-13875843.post-4806369870798190544</id>
		<updated>2009-05-08T06:46:27+00:00</updated>
		<content type="html">In the last few days I have suprisingly (actually not, it comes natural when resigning from a job) more time to do stuff that I really want to do. For the last months my webkit involvement has been mostly been reviewing patches created by other people but now I have done something I wanted to add for quite a long time...&lt;br /&gt;&lt;br /&gt;I think one of the benefits of having a native web renderer widget in the toolkit is the integration that is possible. You can embed it into other native widgets and you should be able to embed native widgets into the web renderer. I have been working on the second part and the result can be seein in &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=25613&quot;&gt;this&lt;/a&gt; bug. The attached example is putting the Gtk Scribble example into every plugin.&lt;br /&gt;&lt;br /&gt;In the arora web browser this feature is used to implement ClickToFlash and I plan to still this idea too.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13875843-4806369870798190544?l=zecke.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>zecke</name>
			<email>noreply@blogger.com</email>
			<uri>http://zecke.blogspot.com/search/label/WebKit</uri>
		</author>
		<source>
			<title type="html">Some Blog</title>
			<subtitle type="html">Some random thoughts</subtitle>
			<link rel="self" href="http://zecke.blogspot.com/feeds/posts/full/-/WebKit"/>
			<id>tag:blogger.com,1999:blog-13875843</id>
			<updated>2009-07-02T02:53:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Chromium Tech Talks</title>
		<link href="http://blog.chromium.org/2009/04/chromium-tech-talks.html"/>
		<id>tag:blogger.com,1999:blog-2471378914199150966.post-1861024976847006236</id>
		<updated>2009-04-30T00:55:00+00:00</updated>
		<content type="html">&lt;div&gt;Since starting work at Google, I've formed a deep appreciation for the number of high quality talks we have access to here (both &lt;a href=&quot;http://www.youtube.com/user/googletechtalks&quot;&gt;technical&lt;/a&gt; and &lt;a href=&quot;http://www.youtube.com/user/AtGoogleTalks&quot;&gt;not&lt;/a&gt;). Reading code and documentation is pretty much unavoidable when you're a developer, but you really can't beat hearing directly from the expert's mouth on topics that you're interested in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last Wednesday, 5 Chromium experts gave mini tech talks on subjects ranging from the network stack to hacking on WebKit. Armed with 2 video cameras, a microphone, and a whiteboard, we did the best we could to capture these talks and make them available to Chromium developers around the world. Whether you're a seasoned Chromium contributor or just getting started, I think these videos have a lot to offer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a rundown of the videos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=A0Z0ybTCHKs&quot;&gt;Darin Fisher&lt;/a&gt; talking about Chromium's multi-process architecture&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=IiN9fxwjcL0&quot;&gt;Brett Wilson&lt;/a&gt; talking about the various layers of Chromium&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=QND2lFCrIGw&quot;&gt;Dimitri Glazkov&lt;/a&gt; talking about hacking on WebKit&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=WsvNebq1dRg&quot;&gt;Ben Goodger&lt;/a&gt; talking about Views (and how to write good tests for them)&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ZhDb42M6ZLk&quot;&gt;Wan-Teh Chang and Eric Roman&lt;/a&gt; talking about Chromium's network stack (and its history)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope these are just the first of many tech talks we can offer to you, the Chromium community.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;post-author&quot;&gt;Posted by Jeremy Orlow, Software Engineer&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2471378914199150966-1861024976847006236?l=blog.chromium.org&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Ian Fette</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.chromium.org/</uri>
		</author>
		<source>
			<title type="html">Chromium Blog</title>
			<link rel="self" href="http://blog.chromium.org/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-2471378914199150966</id>
			<updated>2009-07-01T01:53:01+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKitGTK+ 1.1.6, and on patch reviewing</title>
		<link href="http://blog.kov.eti.br/?p=70"/>
		<id>http://blog.kov.eti.br/?p=70</id>
		<updated>2009-04-29T21:09:43+00:00</updated>
		<content type="html">&lt;p&gt;This time, I won&amp;#8217;t bother too much with release announcement. Xan &lt;a href=&quot;http://blogs.gnome.org/xan/2009/04/29/two-releases-for-the-price-of-one/&quot;&gt;has done that job for us&lt;/a&gt; =D. The good news that preceeded this release by about a week is that now both me and Xan are reviewers for the GTK+ port, so we are able to approve patches, too, along with the already existing reviewers. This may help our port move forward more quickly. If you think your patch is an easy review, or urgent, do catch us on IRC, and let us know, since our port has quite a backlog, and it may be sometime before our scanning of the list catches your entry =).&lt;/p&gt;
&lt;p&gt;Thanks to everyone who contributed to this release. I am sure there are many rough edges to sharpen on the new features, so come test and report bugs, (and provide patches if possible =)) please!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Noronha</name>
			<uri>http://blog.kov.eti.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Noronha (kov) » webkit</title>
			<subtitle type="html">um hacker debiano que mora num lugar chamado mundo</subtitle>
			<link rel="self" href="http://blog.kov.eti.br/wp-rss2.php?cat=16"/>
			<id>http://blog.kov.eti.br/wp-rss2.php?cat=16</id>
			<updated>2009-07-01T14:53:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Two releases for the price of one</title>
		<link href="http://blogs.gnome.org/xan/2009/04/29/two-releases-for-the-price-of-one/"/>
		<id>http://blogs.gnome.org/xan/2009/04/29/two-releases-for-the-price-of-one/</id>
		<updated>2009-04-29T12:53:07+00:00</updated>
		<content type="html">I didn't blog about the 1.1.5 release (although Gustavo did, much better than I do as usual), so now that 1.1.6 is out I'll make a 2x1 post with the highlights.

	gtk-doc support was integrated into the build system. There's still a few rough edges, but hopefully it won't be too ...</content>
		<author>
			<name>Xan López</name>
			<uri>http://blogs.gnome.org/xan</uri>
		</author>
		<source>
			<title type="html">Iocane powder » webkit</title>
			<subtitle type="html">Just another GNOME Blogs weblog</subtitle>
			<link rel="self" href="http://blogs.gnome.org/xan/category/webkit/feed/rss/"/>
			<id>http://blogs.gnome.org/xan/category/webkit/feed/rss/</id>
			<updated>2009-05-23T17:53:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="fr">
		<title type="html">WebKit's week - #8</title>
		<link href="http://hanblog.info/blog/post/2009/04/23/WebKit-s-week-8"/>
		<id>urn:md5:a76c44e8efc4c57fd8b0fec756948dcb</id>
		<updated>2009-04-23T14:30:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://hanblog.info/blog/post/2009/04/23/La-semaine-de-WebKit-8&quot;&gt;French version&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;After four months without news, I'll try to be more regular. Let's hope my new organisation will help.&lt;/p&gt;


&lt;h2&gt;Changes of the week&lt;/h2&gt;

&lt;p&gt;Everything mentioned below should work with the &lt;a href=&quot;http://nightly.webkit.org&quot; hreflang=&quot;en&quot;&gt;latest nightly&lt;/a&gt; available at the moment (42662).&lt;/p&gt;


&lt;h3&gt;6 parallel connections (&lt;a href=&quot;http://trac.webkit.org/changeset/42457&quot; hreflang=&quot;en&quot;&gt;42457&lt;/a&gt;, &lt;a href=&quot;http://trac.webkit.org/changeset/42559&quot; hreflang=&quot;en&quot;&gt;42559&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;With this commit, WebKit can now use 6 parallel connections per domain, previously 4. The number of parallel connections is important to download as fast as possible the resources of a web page. WebKit is now behaving like latest versions of IE, Firefox or Chrome. Opera uses 8 connections per domain. To test this, you'll have to wait for a future version of the CFNetwork library.&lt;/p&gt;


&lt;h3&gt;&lt;a href=&quot;http://trac.webkit.org/changeset/42478&quot; hreflang=&quot;en&quot;&gt;function.displayName (42478)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;You can create anonymous function in JavaScript. They are very useful but the drawback is they also appear anonymous in the profiler. This make the interpretation of the results pretty hard. Now, you can give a name to those functions and it will be used in the profiler.&lt;/p&gt;


&lt;h3&gt;&lt;a href=&quot;http://trac.webkit.org/changeset/42481&quot; hreflang=&quot;en&quot;&gt;Yarr! (42481)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Yarr! (Yet Another Regex Runtime) is, as it suggests, a new Regex Runtime. It is disabled by default for some reasons like being incomplete at the moment but said to be faster than the old one. Hoperfully, we'll have more news when he'll be live.&lt;/p&gt;


&lt;h3&gt;&lt;a href=&quot;http://trac.webkit.org/changeset/42483&quot; hreflang=&quot;en&quot;&gt;XMLHttpRequest withCredentials (42483)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This is a new feature from the &lt;a href=&quot;http://www.w3.org/TR/XMLHttpRequest2/#credentials&quot; hreflang=&quot;en&quot;&gt;XMLHttpRequest Level 2&lt;/a&gt; spec. With the withCredentials attribute, you can define whether or not you wanna send the cookies and HTTP authentication data when using a cross domain XHR. Like the number of parallel connections, we need a new version of CFNetwork to test this.&lt;/p&gt;


&lt;h3&gt;Array.reduce and Array.reduceRight (&lt;a href=&quot;http://trac.webkit.org/changeset/42563&quot; hreflang=&quot;en&quot;&gt;42563&lt;/a&gt;, &lt;a href=&quot;http://trac.webkit.org/changeset/42570&quot; hreflang=&quot;en&quot;&gt;42570&lt;/a&gt;)&lt;/h3&gt;

&lt;p&gt;These are two new methods define by &lt;a href=&quot;http://www.ecma-international.org/news/PressReleases/PR_Ecma_finalises_major_revision_of_ECMAScript.htm&quot; hreflang=&quot;en&quot;&gt;ECMAScript 5&lt;/a&gt;. You are invited to read the documentation on the &lt;a href=&quot;https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce&quot; hreflang=&quot;fr&quot;&gt;Mozilla developer center&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;&lt;a href=&quot;http://trac.webkit.org/changeset/42616&quot; hreflang=&quot;en&quot;&gt;SQL is read only with private browsing (42616)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;When using the private browsing mode (aka porn mode), the web database is no longer writeable. Inserts, updates, deletes are no longer available. This way, the website can't record stuff while in a private session.&lt;/p&gt;


&lt;h3&gt;&lt;a href=&quot;http://trac.webkit.org/changeset/42619&quot; hreflang=&quot;en&quot;&gt;Implementation of the played attribute (42619)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;The new video element has a played attribute which give info about what part of the video has been played. You got access to a &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#timeranges&quot; hreflang=&quot;en&quot;&gt;TimeRanges&lt;/a&gt; object.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;This is everything for this week. Of course, this is just a selection I've made. If you've noticed any other interesting changes, please let me know. Same thing if I got something wrong.&lt;/p&gt;</content>
		<author>
			<name>Anthony Ricaud</name>
			<uri>http://hanblog.info/blog/</uri>
		</author>
		<source>
			<title type="html">Hanblog - WebKit</title>
			<link rel="self" href="http://hanblog.info/blog/feed/category/WebKit/atom"/>
			<id>urn:md5:bf61b2e51f5d21992f38e5e7172f6e92</id>
			<updated>2009-06-30T21:53:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Xan Lopez and Gustavo Noronha are now WebKit reviewers</title>
		<link href="http://webkit.org/blog/375/xan-lopez-and-gustavo-noronha-are-now-webkit-reviewers/"/>
		<id>http://webkit.org/blog/?p=375</id>
		<updated>2009-04-22T22:10:55+00:00</updated>
		<content type="html">&lt;p&gt;Over the last six months, Xan Lopez and Gustavo Noronha have been working tirelessly on the GTK+ port of WebKit.  They&amp;#8217;ve contributed over 150 improvements to WebKit in the form of bug fixes and API improvements, and have played important roles in driving the development of the GTK+ port forward and assisting contributors that are new to the WebKit project.  Please join me in congratulating Xan and Gustavo on their reviewer status!&lt;/p&gt;</content>
		<author>
			<name>Surfin&amp;rsquo; Safari</name>
			<uri>http://webkit.org/blog</uri>
		</author>
		<source>
			<title type="html">Surfin' Safari</title>
			<subtitle type="html">All about WebKit development</subtitle>
			<link rel="self" href="http://webkit.org/blog/feed/"/>
			<id>http://webkit.org/blog/feed/atom/</id>
			<updated>2009-06-08T22:53:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Fourth Annual WebKit Open Source Party</title>
		<link href="http://webkit.org/blog/372/fourth-annual-webkit-open-source-party/"/>
		<id>http://webkit.org/blog/?p=372</id>
		<updated>2009-04-17T20:04:51+00:00</updated>
		<content type="html">&lt;p&gt;WWDC is upon us, and we hope to see you all there! Our party is open to anyone who is interested, free of charge. So if you will be in town or you are already in town, come and meet some cool web developers, WebKit hackers, browser developers, and lots of folks with an interest in cool technology.&lt;/p&gt;
&lt;h4&gt;Details&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Place:&lt;/strong&gt; Thirsty Bear Restaurant &amp;amp; Brewery &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=661+Howard+St,+san+francisco,+ca&amp;sll=37.800019,-122.419281&amp;sspn=0.14649,0.22419&amp;ie=UTF8&amp;ll=37.786335,-122.39969&amp;spn=0.009157,0.014012&amp;z=16&amp;iwloc=A&quot;&gt;(map)&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;Date:&lt;/strong&gt; Wednesday, June 10th&lt;br /&gt;
&lt;strong&gt;Time:&lt;/strong&gt; 7:30 PM &lt;br /&gt;
&lt;a href=&quot;http://upcoming.yahoo.com/event/2422534/?ps=5&quot;&gt;upcoming.org&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Surfin&amp;rsquo; Safari</name>
			<uri>http://webkit.org/blog</uri>
		</author>
		<source>
			<title type="html">Surfin' Safari</title>
			<subtitle type="html">All about WebKit development</subtitle>
			<link rel="self" href="http://webkit.org/blog/feed/"/>
			<id>http://webkit.org/blog/feed/atom/</id>
			<updated>2009-06-08T22:53:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">jQuery and QWebElement</title>
		<link href="http://labs.trolltech.com/blogs/2009/04/17/jquery-and-qwebelement/"/>
		<id>http://labs.trolltech.com/blogs/2009/04/17/jquery-and-qwebelement/</id>
		<updated>2009-04-17T10:56:57+00:00</updated>
		<content type="html">&lt;p&gt;Any tools which can save the developers the cost of headache pills are always valuable. For web development, JavaScript frameworks such as &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt; and &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt; (and many other similar ones) are these valuable tools. Just for doing content manipulation via JavaScript, using jQuery instead of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Document_Object_Model&quot;&gt;standard DOM API&lt;/a&gt; would save many precious working hours. No wonder they become so &lt;a href=&quot;http://blog.jquery.com/2008/09/28/jquery-microsoft-nokia/&quot;&gt;popular&lt;/a&gt; these days. Nokia &lt;a href=&quot;http://www.allaboutsymbian.com/news/item/8178_Nokia_to_ship_jQuery_with_WRT.php&quot;&gt;packs jQuery&lt;/a&gt; for its Web Run Time, Microsoft &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx&quot;&gt;bundles it&lt;/a&gt; with ASP.NET AJAX.&lt;/p&gt;
&lt;p&gt;The QtWebKit team at Qt Software often gets the question like &lt;i&gt;&amp;quot;Can I use jQuery in QtWebKit?&amp;quot;&lt;/i&gt;. Since QtWebKit is just a normal web-rendering engine, of course the answer is &lt;i&gt;&amp;quot;Yes&amp;quot;&lt;/i&gt;. To get your feet wet quickly for using the deadly combination of QtWebKit and jQuery, continue reading and examine the demo presented in the following explanation.&lt;/p&gt;
&lt;p&gt;There are two ways you can jQuerify your HTML content. If you have total control over the content that you want to display (e.g. using &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebview.html&quot;&gt;QWebView&lt;/a&gt; to display help or other rich-text), then you can refer jQuery directly in the HTML, i.e. inserting the proper &amp;lt;script&amp;gt; referring to the jQuery JavaScript code. If you don&amp;#8217;t have a control over the content that you want to display (e.g. using QWebView for a web browser), then the best bet is to inject the jQuery JavaScript code. This can be carried out using &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebframe.html#evaluateJavaScript&quot;&gt;QWebFrame::evaluateJavaScript&lt;/a&gt;. A nice place to do is after the document is &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebview.html#loadFinished&quot;&gt;fully loaded&lt;/a&gt;. The drawback is that you can&amp;#8217;t do any manipulation while loading is in progress, but hey, you don&amp;#8217;t have a control over the content anyway.&lt;/p&gt;
&lt;p&gt;There are also two methods to pass the jQuery JavaScript code. For convenient access, you may want to store it as a file in the &lt;a href=&quot;http://doc.trolltech.com/4.5/resources.html&quot;&gt;resource&lt;/a&gt;, thus it will be shipped along with your application. After that, the code can be referred from within QtWebKit using the qrc:/ URL, i.e. &amp;lt;script src=&amp;quot;qrc:/jQuery.js&amp;quot;&amp;gt;. If your application is pure web-based or an online hybrid C++/web, you can also source the script from e.g. &lt;a href=&quot;http://code.google.com/apis/ajaxlibs/&quot;&gt;Google AJAX libraries&lt;/a&gt; or using &lt;a href=&quot;http://doc.trolltech.com/4.5/qnetworkaccessmanager.html&quot;&gt;the network access manager&lt;/a&gt; to retrieve it (see the previous &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/15/monster-evolution-in-qt-episode-3-revenge-of-the-cylinders/&quot;&gt;Monster example&lt;/a&gt; for similar trick). This means downloading the script at run-time (eating the bandwidth), but then you get the benefit of automatically update (zero-cost deployment). Judge it based on your needs, which trade-off suits you better.&lt;/p&gt;
&lt;p&gt;Without further ado, the code is available in &lt;a href=&quot;http://labs.trolltech.com/gitweb?p=GraphicsDojo&quot;&gt;Graphics Dojo repository&lt;/a&gt; (no time to git-pull? download &lt;a href=&quot;http://labs.trolltech.com/gitweb?p=GraphicsDojo;a=snapshot;h=635bed55901f09d8cbf980e7a54cb3a33820f442;sf=tgz&quot;&gt;the gzipped archive&lt;/a&gt;), under the directory &lt;tt&gt;fancybrowser&lt;/tt&gt;. You need Qt 4.5 to build the example. It is basically a normal minimalistic web browser with two extra buttons: to toggle the images upside down and to perform several actions, notably to highlight all links and removing certain types of elements.&lt;/p&gt;
&lt;p&gt;For a quick glance of what the demo can do, enjoy the following screencast (&lt;a href=&quot;http://www.youtube.com/watch?v=UVayvE8ZVXw&quot;&gt;watch on YouTube&lt;/a&gt; or &lt;a href=&quot;http://blip.tv/file/get/Ariya-FancyBrowserShowingJQueryWithQtWebKit973.ogv&quot;&gt;download/view 18 MB Ogg Theora video&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;




&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;As an example, here is the function to highlight all the links (yes, it is extremely short!):&lt;/p&gt;
&lt;pre&gt;
void highlightAllLinks() {
    QString code = &quot;$('a').each( function () { $(this).css('background-color', 'yellow') } )&quot;;
    view-&gt;page()-&gt;mainFrame()-&gt;evaluateJavaScript(code);
}
&lt;/pre&gt;
&lt;p&gt;Imagine if we would have to implement the same function using DOM API.&lt;/p&gt;
&lt;p&gt;Careful readers might notice that the rotation is effect is achieved through two cool features implemented in WebKit: &lt;a href=&quot;http://webkit.org/blog/138/css-animation/&quot;&gt;CSS Animation&lt;/a&gt; and &lt;a href=&quot;http://webkit.org/blog/130/css-transforms/&quot;&gt;CSS Transform&lt;/a&gt;. If you check out the rotateImages() function, it is also as simple as 7 lines of code. Couldn&amp;#8217;t be simpler.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/fancybrowser.png&quot; title=&quot;fancybrowser.png&quot;&gt;&lt;img src=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/fancybrowser.png&quot; id=&quot;fancybrowser&quot; alt=&quot;fancybrowser.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So far so good. But then, Qt 4.6 will sport &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/07/qwebelement-sees-the-light-do-i-hear-a-booyakasha/&quot;&gt;QWebElement&lt;/a&gt;, as Tor Arne recently blogged about. Although it is not replacement for jQuery, for most cases this new element API allows a wide range of content manipulation. It is based on the concept of &lt;a href=&quot;http://www.w3.org/TR/css3-selectors/&quot;&gt;CSS 3 Selectors&lt;/a&gt;, whose query language is surprisingly very similar to jQuery. QWebElement was relatively easy to implement, in particular because WebKit &lt;a href=&quot;http://webkit.org/blog/156/queryselector-and-queryselectorall&quot;&gt;supports CSS 3 Selector&lt;/a&gt; &lt;s&gt;since some time already&lt;/s&gt; (thanks to David Smith for the implementation).&lt;/p&gt;
&lt;p&gt;Although 4.6 is still not on the horizon yet, I modified the example demo to be able to use QWebElement when you build it with Qt &amp;gt; 4.5 (thus, after 4.6 will be released sometime in future, come back and recompile the demo). It is of course no magic that the code change is pretty minimal, in fact the implementation is very similar. For example, here is highlightAllLinks() function implemented using QWebElement (compare it to the previous jQuery flavor):&lt;/p&gt;
&lt;pre&gt;
void highlightAllLinks() {
    foreach (QWebElement element, view-&gt;page()-&gt;mainFrame()-&gt;findAllElements(&quot;a&quot;))
        element.setStyleProperty(&quot;background-color&quot;, &quot;yellow&quot;);
}
&lt;/pre&gt;
&lt;p&gt;(As you can witness above, we even went so far to implement the necessary iterator, then &lt;a href=&quot;http://doc.trolltech.com/4.5/containers.html#the-foreach-keyword&quot;&gt;foreach&lt;/a&gt; works flawlessly!)&lt;/p&gt;
&lt;p&gt;As an exercise for the reader, implement a new functionality to undo the highlighting of links. For this to work, you need to change the highlighting code to use a new class (in the context of &lt;a href=&quot;http://www.w3.org/TR/CSS2/selector.html#class-html&quot;&gt;CSS class&lt;/a&gt;, not C++ class), instead of just modifying the background color of the link elements. You need to inject the suitable class definition into the stylesheet as well. Removing the highlighting is then as easy as removing the class from each of the link elements.&lt;/p&gt;
&lt;p&gt;Happy CSS-Selecting!&lt;/p&gt;&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKitGTK+ 1.1.5</title>
		<link href="http://blog.kov.eti.br/?p=68"/>
		<id>http://blog.kov.eti.br/?p=68</id>
		<updated>2009-04-16T13:16:48+00:00</updated>
		<content type="html">&lt;p&gt;So, we are still mostly able to keep our release each two weeks promise. For this release we have two big additions to the &amp;#8217;support&amp;#8217; side of the project: translations support, and gtk-doc support. The former is made of the usual makefile rules used by gettext-enabled projects with a rework to fit in the non-recursive build process of WebKitGTK+. The later is not as well integrated yet, so you have to go manually to WebKit/gtk/docs and type make, but not before editing WebKit/gtk/webkit/webkitprivate.cpp and adding a call to g_thread_init(NULL); to webkit_init(). You get the idea, we need help in polishing this one.&lt;/p&gt;
&lt;p&gt;As for code, &lt;a href=&quot;http://blogs.gnome.org/xan/&quot;&gt;Xan Lopez&lt;/a&gt; has been doing some serious work on accessibility support, using ATK. After the a11y hackfest he landed a number of patches moving forward in this direction. It looks like we will be able to meet the requirements for becoming blessed for use by GNOME. We also got a nice printing API, that allows applications to stop using the nasty hack that would send a print() call through javascript. They are also able to control/monitor the print process, or automate it, so that no print dialog is shown, if they wish.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s it, come join the party =D. Now, for 1.1.6, I&amp;#8217;m hoping &lt;a href=&quot;http://blogs.gnome.org/diegoe/&quot;&gt;Diego&lt;/a&gt; finishes the &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=15616&quot;&gt;spelling check patch&lt;/a&gt;, and it would be awesome to have Jan&amp;#8217;s proper &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=18344&quot;&gt;error reporting&lt;/a&gt;!&lt;/p&gt;</content>
		<author>
			<name>Gustavo Noronha</name>
			<uri>http://blog.kov.eti.br</uri>
		</author>
		<source>
			<title type="html">Gustavo Noronha (kov) » webkit</title>
			<subtitle type="html">um hacker debiano que mora num lugar chamado mundo</subtitle>
			<link rel="self" href="http://blog.kov.eti.br/wp-rss2.php?cat=16"/>
			<id>http://blog.kov.eti.br/wp-rss2.php?cat=16</id>
			<updated>2009-07-01T14:53:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Monster Evolution in Qt: Episode 3 (Revenge of the Cylinders)</title>
		<link href="http://labs.trolltech.com/blogs/2009/04/15/monster-evolution-in-qt-episode-3-revenge-of-the-cylinders/"/>
		<id>http://labs.trolltech.com/blogs/2009/04/15/monster-evolution-in-qt-episode-3-revenge-of-the-cylinders/</id>
		<updated>2009-04-15T08:46:14+00:00</updated>
		<content type="html">&lt;p&gt;Seems nobody is interested in free drinks these days. At last that is my impression since &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/07/monster-evolution-in-qt-episode-2-attack-of-the-squirrelfish/#comments&quot;&gt;not many guesses&lt;/a&gt; have been thrown for the title of this episode. Of course, that could also mean that this monster series is really boring anyway.&lt;/p&gt;
&lt;p&gt;Whatever the case, here I present you the third and the latest episode of the Monsterwalker family saga. For those who missed the previous two episodes: &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/03/monster-evolution-in-qt-part-1-using-qt-script/&quot;&gt;The QtScript Menace&lt;/a&gt; and &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/07/monster-evolution-in-qt-episode-2-attack-of-the-squirrelfish/&quot;&gt;Attack of the SquirrelFish&lt;/a&gt;, I suggest reading them first to get the clue of the context. It&amp;#8217;s merely about running &lt;a href=&quot;http://www.chromeexperiments.com/detail/monster/&quot;&gt;Monster Evolution&lt;/a&gt;, part of &lt;a href=&quot;http://www.chromeexperiments.com&quot;&gt;the Chrome Experiments&lt;/a&gt;, &lt;a href=&quot;http://google-code-updates.blogspot.com/2009/03/monster-mesh-google-chrome-experiment.html&quot;&gt;written by Dean&lt;/a&gt;. As I have hinted before, now we make a radical move. After using Qt Script and JavaScriptCore in the first and second episode, respectively, now we are going to use &lt;a href=&quot;http://code.google.com/apis/v8/&quot;&gt;V8, the fast JavaScript engine&lt;/a&gt; behind &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;Google Chrome&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/cymonster.png&quot; title=&quot;cymonster.png&quot;&gt;&lt;br /&gt;
&lt;img src=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/cymonster.png&quot; id=&quot;cymonster&quot; alt=&quot;cymonster.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using V8 means that we have to deal with the bindings manually. With Qt Script, we have the luxury of using &lt;a href=&quot;http://doc.trolltech.com/4.5/qtscript.html#making-a-qobject-available-to-the-script-engine&quot;&gt;its built-in Qt integration&lt;/a&gt;. Same goes with JavaScriptCore, we have &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebframe.html#evaluateJavaScript&quot;&gt;the hook via QWebFrame&lt;/a&gt;. For V8, we need to go low-level and invoke the necessary V8 functions ourselves. Fortunately, V8 is already designed with &lt;a href=&quot;http://code.google.com/apis/v8/embed.html&quot;&gt;embedding usage in mind&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Can&amp;#8217;t wait to see the code? Check out &lt;a href=&quot;http://labs.trolltech.com/gitweb?p=GraphicsDojo&quot;&gt;the git repository&lt;/a&gt; under &lt;tt&gt;cymonster&lt;/tt&gt; subdirectory. Grab the archive (find the snapshot link) if you do not use git. Make sure to open the README file and follow the instructions there, this is absolutely mandatory as this code requires a working &lt;a href=&quot;http://code.google.com/apis/v8/build.html&quot;&gt;V8 shared library&lt;/a&gt;. Don&amp;#8217;t be shocked to see that the code is still as short as the previous examples. Despite our use of V8, the book-keeping and binding parts are kept to minimum.&lt;/p&gt;
&lt;p&gt;Since V8 is claimed to have &lt;a href=&quot;http://code.google.com/apis/v8/design.html&quot;&gt;a fantastic performance&lt;/a&gt;, don&amp;#8217;t be surprised if now you will a very fast rotating monster, unlike in the previous episodes. Typically you should easily reach 25 fps in modern machines these days. For the fun of it, the frame rate is capped at 50 fps (I didn&amp;#8217;t bother to do it in the previous episodes, it won&amp;#8217;t be reachable anyway). On a high-end machine with fast graphics card and running the demo with OpenGL graphics system, a stunning 30 fps is not so uncommon. If you follow this series faithfully and try all these three episodes, care to share the frame rate you got from each of the episodes?&lt;/p&gt;
&lt;p&gt;As a side note, the use of &lt;a href=&quot;http://doc.trolltech.com/4.5/qt.html#WidgetAttribute-enum&quot;&gt;OpaquePaintEvent&lt;/a&gt; to avoid offscreen buffer (since we stick to &lt;a href=&quot;http://doc.trolltech.com/4.5/qpainter.html#CompositionMode-enum&quot;&gt;SourceOver composition mode&lt;/a&gt; all the time) seems to work only on Windows and Linux/X11, the latter often also depends on the composition manager and good graphics driver, or a combination thereof. Thus, I decided to enable the use of offscreen buffer for Mac OS X. You can still enable it by hand on other platforms if you experience the lack of said effect. Mind you, this would cost you few fps, but that is the price you need to pay.&lt;/p&gt;
&lt;p&gt;Last but not least, writing this monster series has been the source of fun and learning for me. I hope you enjoy reading it as much as I enjoy preparing it. &lt;em&gt;May the Script be with you!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The final FAQ:&lt;/p&gt;
&lt;p&gt;Q: Since V8 is so fast, don&amp;#8217;t you want a V8-based Qt Script?&lt;br /&gt;
A: No, since JavaScriptCore is still the official JavaScript engine for WebKit. In addition, there are other reasons that I won&amp;#8217;t elaborate here (to mention one: lack of a bytecode interpreter for non JIT-supported platforms).&lt;/p&gt;
&lt;p&gt;Q: But you use it already in this example?&lt;br /&gt;
A: To use V8 is different that to build a full-blown Qt Script implementation using V8. The former is a fun hacking session for one afternoon, the latter is a real engineer project that spans weeks.&lt;/p&gt;
&lt;p&gt;Q: Will there be &lt;em&gt;The Monkey Traces Back&lt;/em&gt;?&lt;br /&gt;
A: Unlikely, I am exhausted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Postscript&lt;/strong&gt;: No monsters were harmed in the making of these demos.&lt;/p&gt;</content>
		<author>
			<name>ariya</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Ariya Hidayat is a WebKit reviewer</title>
		<link href="http://webkit.org/blog/370/ariya-hidayat-is-a-webkit-reviewer/"/>
		<id>http://webkit.org/blog/?p=370</id>
		<updated>2009-04-14T21:29:21+00:00</updated>
		<content type="html">&lt;p&gt;Ariya Hidayat is our newest WebKit reviewer. He has done extensive work in the&lt;br /&gt;
Qt port with countless bugfixes, performance improvements and API designs.&lt;br /&gt;
Please join me in congratulating Ariya on his reviewer status.&lt;/p&gt;</content>
		<author>
			<name>Surfin&amp;rsquo; Safari</name>
			<uri>http://webkit.org/blog</uri>
		</author>
		<source>
			<title type="html">Surfin' Safari</title>
			<subtitle type="html">All about WebKit development</subtitle>
			<link rel="self" href="http://webkit.org/blog/feed/"/>
			<id>http://webkit.org/blog/feed/atom/</id>
			<updated>2009-06-08T22:53:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">WebKitGTK+ a11y (virtual) hackfest</title>
		<link href="http://blogs.gnome.org/xan/2009/04/07/webkitgtk-a11y-virtual-hackfest/"/>
		<id>http://blogs.gnome.org/xan/2009/04/07/webkitgtk-a11y-virtual-hackfest/</id>
		<updated>2009-04-07T16:53:03+00:00</updated>
		<content type="html">Interested in WebKitGTK+, a11y or both? This Thursday (April 9th 2009), from 14:00 UTC onwards, we'll hold a virtual a11y hackfest on #webkit-gtk at irc.freenode.net. Willie Walker from Sun will join us, and we'll try to move forward and set up a plan to fix this last blocker in the ...</content>
		<author>
			<name>Xan López</name>
			<uri>http://blogs.gnome.org/xan</uri>
		</author>
		<source>
			<title type="html">Iocane powder » webkit</title>
			<subtitle type="html">Just another GNOME Blogs weblog</subtitle>
			<link rel="self" href="http://blogs.gnome.org/xan/category/webkit/feed/rss/"/>
			<id>http://blogs.gnome.org/xan/category/webkit/feed/rss/</id>
			<updated>2009-05-23T17:53:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">QWebElement sees the light, do I hear a booyakasha!?</title>
		<link href="http://labs.trolltech.com/blogs/2009/04/07/qwebelement-sees-the-light-do-i-hear-a-booyakasha/"/>
		<id>http://labs.trolltech.com/blogs/2009/04/07/qwebelement-sees-the-light-do-i-hear-a-booyakasha/</id>
		<updated>2009-04-07T15:37:39+00:00</updated>
		<content type="html">&lt;p&gt;One of the main missing parts of QtWebKit so far has been a proper way to inspect and manipulate the document structure. In JavaScript this is provided by the &lt;a href=&quot;http://www.w3.org/DOM/&quot;&gt;Document Object Model (DOM)&lt;/a&gt; bindings &amp;#8212; giving you methods like &lt;code&gt;getElementById()&lt;/code&gt;, &lt;code&gt;createElement()&lt;/code&gt;, and &lt;code&gt;insertBefore()&lt;/code&gt;. These methods were also accessible in Qt 4.4 and 4.5 though &lt;a href=&quot;http://chaos.troll.no/~tavestbo/webkit/domapi/qwebframe.html#evaluateJavaScript&quot;&gt;&lt;code&gt;QWebFrame::evaluateJavaScript()&lt;/code&gt;&lt;/a&gt;, but it was hardly a optimal way of working with the document.&lt;/p&gt;
&lt;p&gt;The reason a proper API for this was deferred in the earlier versions of QtWebKit was because we wanted to provide an API that was not only powerful, but also easy to use. That left out using &lt;a href=&quot;http://doc.trolltech.com/4.5/qtxml.html#the-qt-dom-classes&quot;&gt;QDom&lt;/a&gt;, or a similar exhaustive API, as customer feedback has shown that writing code on that level can be both tedious and error prone. &lt;/p&gt;
&lt;p&gt;Consider the following snippet:&lt;/p&gt;
&lt;pre&gt;
QDomElement docElem = doc.documentElement();

QDomElement root = docElem.firstChildElement(&quot;database&quot;);
QDomElement entry = root.firstChildElement(&quot;entry&quot;);
for (; !entry.isNull(); entry = entry.nextSiblingElement(&quot;entry&quot;)) {
	QDomElement data = entry.firstChildElement(&quot;data&quot;);
	for (; !data.isNull(); data = data.nextSiblingElement(&quot;data&quot;)) {
		QDomAttr attribute = data.attributeNode(&quot;format&quot;);
		if (!attribute.isNull() &amp;#038;&amp;#038; attribute.value() == &quot;human&quot;) {
			cout   &quot;Data:&quot;  data.text()  endl;
		}
	}
}
&lt;/pre&gt;
&lt;p&gt;Traversing the DOM like this quickly becomes hairy. The same pattern can be found in JavaScript code: using &lt;code&gt;getElementById()&lt;/code&gt;, traversing children, looking for a element of a certain type, etc. &lt;/p&gt;
&lt;p&gt;Another typical use case is manipulation, where you would do something like:
&lt;/p&gt;
&lt;pre&gt;
QDomElement foo = doc.getElementById(&quot;foo&quot;);
QDomElement elem = doc.createElement(&quot;img&quot;);
elem.setAttribute(&quot;src&quot;, &quot;myimage.png&quot;);
foo.parent().insertAfter(elem, foo);
&lt;/pre&gt;
&lt;p&gt;Remember to keep your tongue straight when building that &lt;code&gt;insertAfter() &lt;/code&gt; statement!&lt;/p&gt;
&lt;p&gt;Now some of you are probably jumping on your chairs now, screaming &amp;#8220;this is not how you would do it in JavaScript!&amp;#8221;. And you&amp;#8217;re right, the JavaScript world has found a way to shield off the above annoyances: wrapper libraries like &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt; and &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Taking inspiration from these libraries we did a one-day prototyping/hacking session  back in November, and the &lt;a href=&quot;http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=commit;h=18f346e125034cb2c7dd0e0c48a3aeecdf651dee&quot;&gt;results were promising&lt;/a&gt;. We also asked customers what they really meant when they were asking for a DOM API, and it turned out that the goal was to inspect and manipulate the DOM, but not necessarily though a one-to-one mapping of the API provided by the DOM specification. Last week we managed to reserve some cycles to &lt;a href=&quot;http://trac.webkit.org/changeset/42238&quot;&gt;continue the work&lt;/a&gt;, and we&amp;#8217;re now ready for some feedback.&lt;/p&gt;
&lt;p&gt;So how does the new shiny QtWebKit DOM API look? There&amp;#8217;s two classes: &lt;a href=&quot;http://chaos.troll.no/~tavestbo/webkit/domapi/qwebelement.html&quot;&gt;&lt;code&gt;QWebElement&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;http://chaos.troll.no/~tavestbo/webkit/domapi/qwebelementselection.html&quot;&gt;&lt;code&gt;QWebElementSelection&lt;/code&gt;&lt;/a&gt;.The former wraps a DOM Element, and has methods for manipulation and traversal. The latter is just a list of QWebElements, which can be iterated and extended. The frosting lies in the way elements are selected: using&lt;a href=&quot;http://www.w3.org/TR/css3-selectors/&quot;&gt; CSS3 selector syntax&lt;/a&gt; (similar to jQuery). The implementation of the selectors is &lt;a href=&quot;http://webkit.org/blog/156/queryselector-and-queryselectorall/&quot;&gt;already part of WebKit&lt;/a&gt;, so we&amp;#8217;re basically building on a tried and tested code base.&lt;/p&gt;
&lt;p&gt;Using the two snippets above as examples, they would become:&lt;/p&gt;
&lt;pre&gt;
QWebElement document = mainFrame.documentElement();
foreach (QWebElement humanData, document.findAll(&quot;database entry data[format='human']&quot;) {

	cout   &quot;Data:&quot;  humanData.attribute(&quot;format&quot;)  endl;
}
&lt;/pre&gt;
&lt;p&gt;and
&lt;/p&gt;
&lt;pre&gt;
document.findFirst(&quot;#foo&quot;).insertAfter(&quot;&amp;lt;img src='myimage.png'/&amp;gt;&quot;);
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s a lot easier on my eyes at least.&lt;/p&gt;
&lt;p&gt;The initial implementation of the new API is already landed in trunk, so feel free to try it out. You can find the API documentation &lt;a href=&quot;http://chaos.troll.no/~tavestbo/webkit/domapi/qwebelement.html&quot;&gt;here&lt;/a&gt;, but please note that this is a work in progress, so the API may change.&lt;/p&gt;
&lt;p&gt;Oh, and here&amp;#8217;s a screenshot of the QtLauncher highlighting all links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/qtwebkit-dom-api.png&quot; title=&quot;qtwebkit-dom-api.png&quot;&gt;&lt;img id=&quot;dom-api&quot; src=&quot;http://labs.trolltech.com/blogs/wp-content/uploads/2009/04/qtwebkit-dom-api.png&quot; alt=&quot;qtwebkit-dom-api.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is the DOM API targeted for Qt 4.6?&lt;br /&gt;
&lt;strong&gt;A:&lt;/strong&gt; Yes
&lt;/p&gt;
&lt;p&gt;Happy hacking!&lt;/p&gt;</content>
		<author>
			<name>Tor Arne Vestbø</name>
			<uri>http://labs.trolltech.com/blogs</uri>
		</author>
		<source>
			<title type="html">Qt Labs Blogs</title>
			<subtitle type="html">the ramblings of engineers</subtitle>
			<link rel="self" href="http://labs.trolltech.com/blogs/feed/atom/?cat=9"/>
			<id>http://labs.trolltech.com/blogs/feed/atom/?cat=9</id>
			<updated>2009-07-01T16:53:04+00:00</updated>
			<rights type="html">Copyright 2009</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Monster Evolution in Qt: Episode 2 (Attack of the SquirrelFish)</title>
		<link href="http://labs.trolltech.com/blogs/2009/04/07/monster-evolution-in-qt-episode-2-attack-of-the-squirrelfish/"/>
		<id>http://labs.trolltech.com/blogs/2009/04/07/monster-evolution-in-qt-episode-2-attack-of-the-squirrelfish/</id>
		<updated>2009-04-07T11:16:31+00:00</updated>
		<content type="html">&lt;p&gt;To make our wonderful JavaScript world a bit more attractive, I have decided to continue this monster series in a much more pleasant adventure. So herewith semiofficially I changed the first episode&amp;#8217;s title to &lt;em&gt;The QtScript Menace&lt;/em&gt;. Make sure &lt;a href=&quot;http://labs.trolltech.com/blogs/2009/04/03/monster-evolution-in-qt-part-1-using-qt-script/&quot;&gt;you read it&lt;/a&gt;, and readers, here is the second episode: &lt;em&gt;Attack of the SquirrelFish&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Basically it is still the same little Qt program which can run &lt;a href=&quot;http://google-code-updates.blogspot.com/2009/03/monster-mesh-google-chrome-experiment.html&quot;&gt;Dean&amp;#8217;s Monster Evolution demo&lt;/a&gt;. However, while last time we utilized QtScript to execute the monster script, here we use QtWebKit. This is still &lt;em&gt;different&lt;/em&gt; that running the demo directly in a QtWebKit-based web browser. Specifically, we just use the JavaScript engine in QtWebKit, but not the web page, frame, view, including its canvas implementation. So here lies the answer to those who often wonder &amp;#8220;Can I run JavaScript code without running any visual widget at all?&amp;#8221;. The answer: yes.&lt;/p&gt;
&lt;p&gt;The trick involves two parts: passing something from your C++ code to the script word and getting something back from the script world to C++. Both of them are not of concern if we use &lt;a href=&quot;http://doc.trolltech.com/4.5/qtscript.html&quot;&gt;QtScript&lt;/a&gt;, mainly because QtScript offers &lt;a href=&quot;http://doc.trolltech.com/4.5/qtscript.html#making-a-qobject-available-to-the-script-engine&quot;&gt;bridging functionalities&lt;/a&gt; via QScriptValue, QScriptEngine::newQObject, QScriptEngine::newFunction and so on. With QtWebKit, available at our disposal are two key functions: &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebframe.html#addToJavaScriptWindowObject&quot;&gt;QWebFrame::addToJavaScriptWindowObject&lt;/a&gt; and &lt;a href=&quot;http://doc.trolltech.com/4.5/qwebframe.html#evaluateJavaScript&quot;&gt;QWebFrame::evaluateJavaScript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/mcg6n-ANR6U23NL3qeHkfQ?feat=embedwebsite&quot;&gt;&lt;br /&gt;
&lt;img src=&quot;http://lh6.ggpht.com/_Oijhf1ZPv-4/SdoluVgWAOI/AAAAAAAAA6w/ZklvSYGbq2Y/webmonster.png&quot; id=&quot;webmonster&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As usual, the example is in &lt;a href=&quot;http://labs.trolltech.com/gitweb?p=GraphicsDojo&quot;&gt;the git repository&lt;/a&gt;, check &lt;tt&gt;webmonster&lt;/tt&gt; subdirectory. Rather than using git, you are of course free to download the archive (find the snapshot link). Qt 4.5 is recommended to have the &lt;a href=&quot;http://labs