<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>WebKit on mariospr.org</title><link>https://mariospr.org/category/webkit/</link><description>Recent content in WebKit on mariospr.org</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 03 Nov 2024 17:20:01 +0000</lastBuildDate><atom:link href="https://mariospr.org/category/webkit/index.xml" rel="self" type="application/rss+xml"/><item><title>Igalia and WebKit: status update and plans (2024)</title><link>https://mariospr.org/2024/11/03/igalia-and-webkit-status-update-and-plans-2024/</link><pubDate>Sun, 03 Nov 2024 17:20:01 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=3215</guid><description>&lt;p&gt;It&amp;rsquo;s been more than 2 years since the last time I wrote something here, and in that time a lot of things happened. Among those, one of the main highlights was &lt;strong&gt;me moving back to &lt;a href="https://www.igalia.com"&gt;Igalia&lt;/a&gt;&amp;rsquo;s &lt;a href="https://planet.igalia.com/webkit"&gt;WebKit team&lt;/a&gt;&lt;/strong&gt;, but this time I moved as part of Igalia&amp;rsquo;s support infrastructure to help with other types of tasks such as general coordination, team facilitation and project management, among other things.&lt;/p&gt;
&lt;p&gt;On top of those things, I&amp;rsquo;ve been also &lt;strong&gt;presenting our work around WebKit in different venues&lt;/strong&gt;, such as &lt;a href="https://www.slideshare.net/slideshow/building-enduser-applications-on-embedded-devices-with-wpe/267644868" target="_blank" rel="noopener"&gt;in the Embedded Open Source Summit&lt;/a&gt; or &lt;a href="https://www.slideshare.net/slideshow/addthepowerofthewebtoyourembeddeddeviceswithwpewebkitpdf/262768577" target="_blank" rel="noopener"&gt;in the Embedded Recipes conference&lt;/a&gt;, for instance. Of course, that included presenting our work in the &lt;a href="https://www.webkit.org"&gt;WebKit community&lt;/a&gt; as part of the &lt;a href="https://webkit.org/meeting/" target="_blank" rel="noopener"&gt;WebKit Contributors Meeting&lt;/a&gt;, a small and technically focused event that happens every year, normally around the Bay Area (California). That&amp;rsquo;s often a pretty dense presentation where, over the course of 30-40 minutes, we go through all the main areas that we at Igalia contribute to in WebKit, trying to summarize our main contributions in the previous 12 months. This includes work not just from the &lt;strong&gt;WebKit team&lt;/strong&gt;, but also from other ones such as our &lt;strong&gt;Web Platform&lt;/strong&gt;, &lt;strong&gt;Compilers&lt;/strong&gt; or &lt;strong&gt;Multimedia teams&lt;/strong&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It&rsquo;s been more than 2 years since the last time I wrote something here, and in that time a lot of things happened. Among those, one of the main highlights was <strong>me moving back to <a href="https://www.igalia.com">Igalia</a>&rsquo;s <a href="https://planet.igalia.com/webkit">WebKit team</a></strong>, but this time I moved as part of Igalia&rsquo;s support infrastructure to help with other types of tasks such as general coordination, team facilitation and project management, among other things.</p>
<p>On top of those things, I&rsquo;ve been also <strong>presenting our work around WebKit in different venues</strong>, such as <a href="https://www.slideshare.net/slideshow/building-enduser-applications-on-embedded-devices-with-wpe/267644868" target="_blank" rel="noopener">in the Embedded Open Source Summit</a> or <a href="https://www.slideshare.net/slideshow/addthepowerofthewebtoyourembeddeddeviceswithwpewebkitpdf/262768577" target="_blank" rel="noopener">in the Embedded Recipes conference</a>, for instance. Of course, that included presenting our work in the <a href="https://www.webkit.org">WebKit community</a> as part of the <a href="https://webkit.org/meeting/" target="_blank" rel="noopener">WebKit Contributors Meeting</a>, a small and technically focused event that happens every year, normally around the Bay Area (California). That&rsquo;s often a pretty dense presentation where, over the course of 30-40 minutes, we go through all the main areas that we at Igalia contribute to in WebKit, trying to summarize our main contributions in the previous 12 months. This includes work not just from the <strong>WebKit team</strong>, but also from other ones such as our <strong>Web Platform</strong>, <strong>Compilers</strong> or <strong>Multimedia teams</strong>.</p>
<p>So far I did that a couple of times only, both <a href="https://www.slideshare.net/slideshow/igalia-and-webkit-status-update-and-plans/262768753" target="_blank" rel="noopener">last year on October 24rth</a> as well as this year, just <a href="https://www.slideshare.net/slideshow/igalia-and-webkit-status-update-and-plans-72bd/272669557" target="_blank" rel="noopener">a couple of weeks ago in the latest instance of the WebKit Contributors meeting</a>. I believe the session was interesting and informative, but unfortunately it does not get recorded so this time I thought I&rsquo;d write a blog post to make it more widely accessible to people not attending that event.</p>
<p>This is a long read, so maybe grab a cup of your favorite beverage first&hellip;</p>
<h2>Igalia and WebKit</h2>
So first of all, what is the <strong>relationship between Igalia and the WebKit project</strong>?
<p style="text-align: center;"><a href="https://www.igalia.com"><img class="alignnone wp-image-3288" src="/wp-content/uploads/2024/11/igalia-logo-800x325.jpg" alt="Igalia logo" width="345" height="140" /></a><a href="https://webkit.org"><img class="alignnone wp-image-3289" src="/wp-content/uploads/2024/11/webkit-logo-275x300.png" alt="WebKit logo" width="128" height="140" /></a></p>
In a nutshell, we are the <strong>lead developers and the maintainers of the two Linux-based WebKit ports</strong>, known as <a href="https://webkitgtk.org/"><strong>WebKitGTK</strong></a> and <a href="https://wpewebkit.org/"><strong>WPE</strong></a>. These ports share a common baseline (e.g. GLib, GStreamer, libsoup) and also some goals (e.g. performance, security), but other than that their purpose is different, with <strong>WebKitGTK being aimed at the Linux desktop</strong>, while <strong>WPE</strong> is mainly focused on <strong>embedded devices</strong>.
<p><a href="https://wpewebkit.org/"><img class="alignright wp-image-3259" style="margin-top: 0.857143rem; margin-bottom: 0.857143rem; margin-left: 1.71429rem;" src="/wp-content/uploads/2024/11/wpe-logo-300x140.png" alt="WPE logo" width="214" height="100" /></a></p>
<p>This means that, while <strong>WebKitGTK is the go-to solution to embed Web content in GTK applications</strong> (e.g. GNOME Web/Epiphany, Evolution), and therefore integrates well with that graphical toolkit, <strong>WPE</strong> does not even provide a graphical toolkit since its main <strong>goal is to be able to run well on embedded devices</strong> that often don&rsquo;t even have a lot of memory or processing power, or not even the usual mechanisms for I/O that we are used to in desktop computers. This is why WPE&rsquo;s architecture is designed with flexibility in mind with a backends-based architecture, why it aims for using as few resources as possible, and why it tries to depend on as few libraries as possible, so you can integrate it virtually in any kind of embedded Linux platform.</p>
<p>Besides that port-specific work, which is what our WebKit and Multimedia teams focus a lot of their effort on, we <strong>also contribute at a different level in the port-agnostic parts of WebKit</strong>, mostly around the area of <strong>Web standards</strong> (e.g. contributing to Web specifications and to implement them) and the <strong>Javascript engine</strong>. This work is carried out by our Web Platform and Compilers team, which tirelessly contribute to the different parts of WebCore and JavaScriptCore that affect not just the WebKitGTK and WPE ports, but also the rest of them to a bigger or smaller degree.</p>
<p>Last but not least, we also devote a considerable amount of our time to other topics such as <strong>accessibility, performance, bug fixing, QA.</strong>.. and also to make sure WebKit works well on <strong>32-bit devices</strong>, which is an important thing for a lot of WPE users out there.</p>
<h2>Who are our users?</h2>
At Igalia we distinguish <strong>4 main types of users</strong> of the <strong>WebKitGTK and WPE</strong> ports of WebKit:
<p><strong>Port users</strong>: this category would include anyone that writes a product directly against the port&rsquo;s API, that is, apps such as a desktop Web browser or embedded systems that rely on a fullscreen Web view to render its Web-based content (e.g. digital signage systems).</p>
<p><strong>Platform providers</strong>: in this category we would have developers that build frameworks with one of the Linux ports at its core, so that people relying on such frameworks can leverage the power of the Web without having to directly interface with the port&rsquo;s API. <a href="https://rdkcentral.com/"><em>RDK</em></a> could be a good example of this use case, with WPE at the core of the so-called <a href="https://rdkcentral.github.io/Thunder/"><em>Thunder</em> plugin</a> (previously known as <a href="https://wiki.rdkcentral.com/pages/viewpage.action?pageId=90117335"><em>WPEFramework</em></a>).</p>
<p><strong>Web developers</strong>: of course, Web developers willing to develop and test their applications against our ports need to be considered here too, as they come with a different set of needs that need to be fulfilled, beyond rendering their Web content (e.g. using the Web Inspector).</p>
<p><strong>End users</strong>: And finally, the end user is the last piece of the puzzle we need to pay attention to, as that&rsquo;s what makes all this effort a task worth undertaking, even if most of them most likely don&rsquo;t need what WebKit is, which is perfectly fine :-)</p>
<p dir="auto" data-sourcepos="144:1-145:74">We like to make this distinction of 4 possible types of users explicit because we think it's important to understand the complexity of the amount of use cases and the diversity of potential users and customers we need to provide service for, which is behind our decisions and the way we prioritize our work.</p>
<h2>Strategic goals</h2>
Our <strong>main goal</strong> is that our product, the WebKit web engine, is useful for more and more people in different situations. Because of this, it is i<span style="font-size: 1rem;">mportant that the </span><span style="font-size: 1rem;">platform is homogeneous</span><span style="font-size: 1rem;"> and that it can be used reliably with all the engines available nowadays, and this is why </span><span style="font-size: 1rem;"><strong>compatibility</strong> and <strong>interoperability</strong> is a must, and why we </span>work with the the standards bodies to help with the design and implementation of several Web specifications.
<p>With WPE, it is very important to be able to run the engine in small <strong>embedded</strong> devices, and that requires good <strong>performance</strong> and being efficient in <a href="https://wpewebkit.org/about/supported-hardware.html">multiple hardware architectures</a>, as well as great <strong>flexibility</strong> for specific hardware, which is why we provided WPE with a <a href="https://wpewebkit.org/about/architecture.html">backend-based architecture</a>, and reduced dependencies to a minimum.</p>
<p>Then, it is a<span style="font-size: 1rem;">lso important that the <strong>QA </strong></span><span style="font-size: 1rem;">Infrastructure is good enough</span><span style="font-size: 1rem;"> to keep the releases working and with good quality, which is why I regularly maintain, evolve and keep an eye on the <a href="https://ews-build.webkit.org/"><em>EWS</em></a> and <a href="https://build.webkit.org/">post-commit bots</a> that keep WebKitGTK and WPE building, running and passing the tens of thousands of tests that we need to check continuously, to ensure we don&rsquo;t regress (or that we catch issues soon enough, when there&rsquo;s a problem). Then of course it&rsquo;s also important to keep</span><span style="font-size: 1rem;"> doing </span><span style="font-size: 1rem;"><strong>security</strong> releases</span><span style="font-size: 1rem;">, making sure that we release stable versions with fixes to the different <em>CVEs</em> reported as soon as possible.</span></p>
<p>Finally, we also make sure that we keep evolving our <strong>tooling</strong> as much as possible (see for instance the release of the <a href="https://github.com/Igalia/webkit-container-sdk">new SDK</a> earlier this year), as well as improving the <strong>documentation</strong> for both ports.</p>
<p>Last, all this effort would not be possible if not because we also consider a goal of us to maintain an <strong>efficient collaboration</strong> with the rest of the WebKit community in different ways, from making sure we re-use and contribute to other ports as much code as possible, to making sure we communicate well in all the forums available (e.g. Slack, mailing list, annual meeting).</p>
<h2>Contributions to WebKit in numbers</h2>
Well, first of all the usual disclaimer: number of commits is for sure not the best possible metric,  and therefore should be taken with a grain of salt. However, the point here is not to focus too much on the actual numbers but on the more general conclusions that can be extracted from them, and from that point of view I believe it's interesting to take a look at this data at least once a year.
<img class="aligncenter size-large wp-image-3229" src="/wp-content/uploads/2024/10/webkit-contributors-all-2024-800x453.png" alt="Igalia contributions to WebKit (2024)" width="625" height="354" />
<p>With that out of the way, it&rsquo;s interesting to confirm that once again <a href="https://www.slideshare.net/slideshow/igalia-and-webkit-status-update-and-plans-72bd/272669557#12">we are still the <strong>2nd biggest contributor to WebKit after Apple</strong></a>, with ~13% of the commits landed in this past 12-month period. More specifically, we landed 2027 patches out of the 15617 ones that took place during the past year, only surpassed by Apple and their 12456 commits. The remaining 1134 patches were landed mostly by Sony, followed by RedHat and several other contributors.</p>
<p><img class="aligncenter size-large wp-image-3226" src="/wp-content/uploads/2024/10/webkit-contributors-2024-800x433.png" alt="Igalia contributions to WebKit (2024)" width="625" height="338" />Now, if we remove Apple from the picture, we can observe how <a href="https://www.slideshare.net/slideshow/igalia-and-webkit-status-update-and-plans-72bd/272669557#13">this year our contributions represented <strong>~64% of all the non-Apple commits</strong></a>, a figure that grew about ~11% compared to the past year. This confirms once again our commitment to WebKit, a project we started contributing about 14 years ago already, and where we have been systematically being the 2nd top contributor for a while now.</p>
<h2>Main areas of work</h2>
<div>
<p>The <strong>10 main areas</strong> we have contributed to in WebKit in the past 12 months are the following ones:</p>
<ul>
 	<li>Web platform</li>
 	<li>Graphics</li>
 	<li>Multimedia</li>
 	<li>JavaScriptCore</li>
 	<li>New WPE API</li>
 	<li>WebKit on Android</li>
 	<li>Quality assurance</li>
 	<li>Security</li>
 	<li>Tooling</li>
 	<li>Documentation</li>
</ul>
In the next sections I'll talk a bit about what we've done and what we're planning to do next for each of them.
</div>
<h3>Web Platform</h3>
<strong>content-visibility:auto</strong>
<p>This feature allows skipping painting and rendering of off-screen sections, particularly u<span style="font-size: 1rem;">seful to avoid the browser spending time rendering parts in large pages, as content outside of the view doesn&rsquo;t get rendered until it gets visible.</span></p>
<p>We c<span style="font-size: 1rem;">ompleted the implementation and it&rsquo;s now enabled by default.</span></p>
<p><strong>Navigation API</strong></p>
<p>This is a new API to manage browser navigation actions and examine history, which we started working on in the past cycle. There&rsquo;s been a lot of work happening here and, while it&rsquo;s not finished yet, the current plan is that Apple will continue working on that in the next months.</p>
<p><strong>hasUAVisualTransition</strong></p>
<p>This is an attribute of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/NavigateEvent">NavigateEvent interface</a>, which is meant to be <code>True</code> if the <em>User Agent</em> has performed a visual transition before a navigation event. It was something that we have also finished implementing and is now also enabled by default.</p>
<p><strong>Secure Curves in the Web Cryptography API</strong></p>
<p>In this case, we worked on fixing several <a href="https://wpt.fyi/interop-2024?stable">Web Interop</a> related issues, as well as on increasing test coverage within the <a href="https://web-platform-tests.org/">Web Platform Tests</a> (<em>WPT</em>) <a href="https://wpt.fyi">test suites</a>.</p>
<p>On top of that we also moved the <em>X25519</em> feature to the <em>&ldquo;prepare to ship&rdquo;</em> stage.</p>
<p><strong>Trusted Types</strong></p>
<p>This work is related to reducing DOM-based <a href="https://developer.mozilla.org/es/docs/Glossary/Cross-site_scripting"><em>XSS</em></a> attacks. Here we finished the implementation and this is now pending to be enabled by default.</p>
<p><strong>MathML</strong></p>
<p>We continued working on the <a href="https://w3c.github.io/mathml/">MathML specification</a> by working on the support<span style="font-size: 1rem;"> for padding, border and margin, as well as by increasing the </span><a href="https://wpt.fyi/results/mathml?label=master&amp;label=experimental&amp;aligned&amp;q=mathml"><em>WPT</em> score</a> by ~5%.</p>
<p>The plan for next year is to continue working on core features and improve the interaction with CSS.</p>
<p><strong>Cross-root ARIA</strong></p>
<p>Web components have accessibility-related issues with native <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM">Shadow DOM</a> as you cannot reference elements with <a href="https://www.w3.org/WAI/standards-guidelines/aria/">ARIA</a> attributes across boundaries. We haven&rsquo;t worked on this in this period, but the plan is to work in the next months on implementing the<span style="font-size: 1rem;"> Reference Target proposal to solve those issues.</span></p>
<p><strong>Canvas Formatted Text</strong></p>
<p>Canvas has not a solution to add formatted and multi-line text, so we would like to also work on e<span style="font-size: 1rem;">xploring and prototyping the <a href="https://github.com/WICG/canvas-place-element">Canvas Place Element proposal</a> in WebKit, which allows better text in canvas and more extended features.</span></p>
<h3>Graphics</h3>
<strong>Completed migration from Cairo to Skia for the Linux ports</strong>
<p>If you have followed the latest developments, you probably already know <a href="https://blogs.igalia.com/carlosgc/2024/02/19/webkit-switching-to-skia-for-2d-graphics-rendering/">that the Linux WebKit ports (i.e. WebKitGTK and WPE) have moved from Cairo to Skia for their 2D rendering library</a>, which was a pretty big and important decision taken after a long time trying different approaches and experiments (including developing our own HW-accelerated 2D rendering library!), as well as running several tests and measuring results in different benchmarks.</p>
<p><a href="https://skia.org/"><img class="alignright wp-image-3274" src="/wp-content/uploads/2024/11/skia-logo-300x166.png" alt="Skia logo" width="181" height="100" /></a>The results in the end were pretty overwhelming and we decided to give <a href="https://skia.org/">Skia</a> a go, and we are happy to say that, as of today, the <strong>migration has been completed</strong>: we covered<span style="font-size: 1rem;"> all the use cases in Cairo, achieving <strong>feature parity</strong>, and we are now working on implementing <strong>new features and improvements</strong> built on top of Skia (e.g. GPU-based 2D rendering).</span></p>
<p>On top of that, <strong>Skia is now the default backend for WebKitGTK and WPE since 2.46.0</strong>, released on September 17th, so if you&rsquo;re building a recent version of those ports you&rsquo;ll be already using Skia as their 2D rendering backend. Note that Skia is using its GPU-based backend only on desktop environments, on embedded devices the situation is trickier and for now the default is the CPU-based Skia backend, but we are actively working to narrow the gap and to enable GPU-based rendering also on embedded.</p>
<p><strong>Architecture changes with buffer sharing APIs (DMABuf)</strong></p>
<p>We did a lot of work here, such as a big refactoring of the fencing system to control the access to the buffers, or the continued work towards integrating with Apple&rsquo;s DisplayLink infrastructure.</p>
<p>On top of that, we also enabled more efficient composition using damaging information, so that we don&rsquo;t need to pass that much information to the compositor, which would slow the CPU down.</p>
<p><strong>Enablement of the GPUProcess</strong></p>
<p>On this front, we enabled by default the compilation for WebGL rendering using the GPU process, and we are currently working in performance review and enabling it for other types of rendering.</p>
<p><strong>New SVG engine (<em data-sourcepos="476:23-476:28">LBSE</em>: <em data-sourcepos="476:31-476:70">Layer-Based SVG Engine</em>)</strong></p>
<p>If you are not familiar with this, here the idea is to make sure that we reuse the graphics pipeline used for HTML and CSS rendering, and use it also for SVG, instead of having its own pipeline. This means, among other things, that SVG layers will be supported as a 1st-class citizen in the engine, enabling HW-accelerated animations, as well as support for 3D transformations for individual SVG elements.</p>
<p><a href="https://wpewebkit.org/blog/status-of-lbse-in-webkit.html"><img class="alignright wp-image-3265 size-thumbnail" src="/wp-content/uploads/2024/11/lbse-logo-wide-e1730466411905-150x150.png" alt="LBSE logo" width="150" height="150" /></a></p>
<p><span style="font-size: 1rem;">On this front, on this cycle we </span><strong style="font-size: 1rem;">a<span style="font-size: 1rem;">dded support for the missing features</span></strong><span style="font-size: 1rem;"><strong> in the LBSE</strong>, namely:</span></p>
<ul>
 	<li>Implemented support for gradients &amp; patterns (applicable to both fill and stroke)</li>
 	<li>Implemented support for clipping &amp; masking (for all shapes/text)</li>
 	<li>Implemented support for markers</li>
 	<li>Helped review implementation of SVG filters (done by Apple)</li>
</ul>
Besides all this, we also <strong>improved the performance of the new layer-based engine</strong> by reducing<span style="font-size: 1rem;"> repaints and re-layouts as much as possible (further optimizations still possible), narrowing the </span>performance gap with the current engine for MotionMark. While we are still not at the same level of performance as the current SVG engine, we are confident that there are several key places where, with the right funding, we should be able to improve the performance to at least match the current engine, and therefore be able to push the new engine through the finish line.
<p><strong>General overhaul of the graphics pipeline, touching different areas (WIP):</strong></p>
<p>On top of everything else commented above, we also worked on a general refactor and simplification of the graphics pipeline. For instance, we have been working on the removal of the Nicosia layer now that we are not planning to have multiple rendering implementations, among other things.</p>
<h3>Multimedia</h3>
<strong>DMABuf-based sink for HW-accelerated video</strong>
<p>We merged the <strong data-sourcepos="506:10-506:30">DMABuf-based sink</strong> for HW-accelerated video in the GL-based GStreamer sink.</p>
<p><strong>WebCodecs backend</strong></p>
<p>We completed the implementation of  audio/video encoding and decoding, and this is now enabled<span style="font-size: 1rem;"> by default in 2.46. As for the next steps, we plan to keep working on the integration of <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_API">WebCodecs</a> with <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API">WebGL</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API">WebAudio</a>.</span></p>
<p><strong>GStreamer-based WebRTC backends</strong></p>
<p>We continued working on <a href="https://gstreamer.freedesktop.org/documentation/webrtclib/index.html?gi-language=c">GstWebRTC</a>, bringing it to a point where it can be used in production in some specific use cases, and we will still be working on this in the next months.</p>
<p><strong>Other</strong></p>
<p>Besides the points above, we also added an <strong>optional text-to-speech backend based on <a href="https://github.com/project-spiel/libspiel">libspiel</a></strong> to the development branch, and worked on <strong>general maintenance</strong> around the support for <a href="https://www.w3.org/TR/media-source-2/"><em>Media Source Extensions</em></a> (<em>MSE</em>) and <a href="https://www.w3.org/TR/encrypted-media-2/"><em>Encrypted Media Extensions</em></a> (<em>EME</em>), which are crucial for the use case of WPE running in set-top-boxes, and is a permanent task we will continue to work on in the next months.</p>
<h3>JavaScriptCore</h3>
<strong>ARMv7/32-bit support:</strong>
<p>A lot of work happened around <strong>32-bit support in JavaScriptCore</strong>, especially around <a href="https://webassembly.org/">WebAssembly</a> (WASM): we p<span style="font-size: 1rem;">orted the WASM<em> BBQJIT</em> and p</span>orted/enabled concurrent JIT support, and we also <strong>completed 80% of the implementation for the <em>OMG</em> optimization level</strong> of <em>WASM</em>, which we plan to finish in the next months. If you are unfamiliar with what the <em>OMG</em> and <em>BBQ</em> optimization tiers in WASM are, I&rsquo;d recommend you to take a look at this article in webkit.org: <em>&quot;<a href="https://webkit.org/blog/7691/webassembly/">Assembling WebAssembly</a>&quot;</em>.</p>
<p><a href="https://webassembly.org/"><img class="alignright wp-image-3281 size-thumbnail" src="/wp-content/uploads/2024/11/wasm-logo-150x150.png" alt="WASM logo" width="150" height="150" /></a>We also contributed to the <strong>JIT-less WASM,</strong> which is very u<span style="font-size: 1rem;">seful for embedded systems that can&rsquo;t support JIT for security or memory related constraints, and also did some</span><span style="font-size: 1rem;"><strong> work on the In-Place Interpreter (<em>IPInt</em>)</strong>, which is a new version of the WASM Low-level interpreter (LLInt) that uses less memory and e</span><span style="font-size: 1rem;">xecutes WASM bytecode directly without translating it to LLInt bytecode  (and should therefore be faster to execute).</span></p>
<p>Last, we also contributed most of the implementation for the <a href="https://github.com/WebAssembly/gc"><strong>WASM GC</strong></a>, with the exception of some Kotlin tests.</p>
<p>As for the next few months, we plan to investigate and optimize heap/JIT memory usage in 32-bit, as well as to finish several other improvements on ARMv7 (e.g. IPInt).</p>
<h3>New WPE API</h3>
The new WPE API is a <strong>new API that aims at making it easier to use WPE in embedded devices</strong>, by removing the hassle of having to handle several libraries in tandem (i.e. <a href="https://github.com/webKit/WebKit/"><em>WPEWebKit</em></a>, <a href="https://github.com/WebPlatformForEmbedded/libwpe"><em>libWPE</em></a> and <a href="https://github.com/Igalia/WPEBackend-fdo"><em>WPEBackend-FDO</em></a>, for instance), available from <a href="https://wpewebkit.org/release/">WPE's releases page</a>, and providing a more modern API in general, better aimed at the most common use cases of WPE.
<p>A lot of effort happened this year along these lines, including the fact that we finally <strong>upstreamed and shipped its initial implementation with WPE 2.44</strong>, back in the first half of the year. Now, while we recommend users to give it a try and report feedback as much as possible, this new API is still not set in stone, with regular development still<span style="font-size: 1rem;"> ongoing, so if you have the chance to try it out and share your experience, comments are welcome!</span></p>
<p>Besides shipping its initial implementation, we also <strong>added support for external platforms</strong>, so that other ones can be loaded beyond the <a href="https://wayland.freedesktop.org/"><em>Wayland</em></a>, <a href="https://www.kernel.org/doc/html/v4.15/gpu/drm-mm.html"><em>DRM</em></a> and &ldquo;headless&rdquo; ones, which are the default platforms already included with WPE itself. This means for instance that a <a href="https://docs.gtk.org/gtk4/">GTK4</a> platform, or another one for <em>RDK</em> could be easily used with WPE.</p>
<p>Then of course <strong>a lot of API additions</strong> were included in the new API in the latest months:</p>
<ul>
 	<li><strong><span style="font-size: 1rem;">Screens management API</span></strong><span style="font-size: 1rem;">:  </span>API to handle different screens, ask the display for the list of screens with their device scale factor, refresh rate, geometry...</li>
 	<li><strong><span style="font-size: 1rem;">Top level management API</span></strong><span style="font-size: 1rem;">: </span>This API allows a greater degree of control, for instance by allowing more than one WebView for the same top level, as well as allowing to retrieve properties such as size, scale or state (i.e. full screen, maximized...).</li>
 	<li><strong>Maximized and minimized windows API</strong>: API to maximize/minimize a top level and monitor its state. mainly used by WebDriver.</li>
 	<li><span style="font-size: 1rem;"><strong>Preferred DMA-BUF formats API</strong>: enables asking</span> the platform (compositor or DRM) for the list of preferred formats and their intended use (scanout/rendering).</li>
 	<li><span style="font-size: 1rem;"><strong>Input methods API</strong>: </span>allows platforms to provide an implementation to handle input events (e.g. virtual keyboard, autocompletion, auto correction...).</li>
 	<li><span style="font-size: 1rem;"><strong>Gestures API</strong>: </span>API to handle gestures (e.g. tap, drag).</li>
 	<li><span style="font-size: 1rem;"><strong>Buffer damaging</strong>: </span>WebKit generates information about the areas of the buffer that actually changed and we pass that to DRM or the compositor to optimize painting.</li>
 	<li><span style="font-size: 1rem;"><strong>Pointer lock API</strong>: allows the WebView to lock the pointer so that the movement of the pointing device (e.g. mouse) can be used for a different purpose (e.g. first-person shooters).</span></li>
</ul>
Last, we also <strong>added support for testing automation</strong>, and we can support <strong>WebDriver</strong> now in the new API.
<p>With all this done so far, the plan now is to complete the new WPE API, with a focus on the Settings API and accessibility support, write API tests and documentation, and then also add an external platform to support GTK4. This is done on a best-effort basis, so there&rsquo;s no specific release date.</p>
<h3>WebKit on Android</h3>
This year was also a good year for WebKit on Android, also known as WPE Android, as this is a project that sits on top of WPE and its public API (instead of developing a fully-fledged WebKit port).
<p><a href="https://www.android.org"><img class="alignright wp-image-3283" src="/wp-content/uploads/2024/11/android-logo-300x184.png" alt="Android logo" width="200" height="122" /></a>In case you&rsquo;re not familiar with this, the idea here is to provide a <strong>WebKit-based alternative to the Chromium-based Web view on Android devices</strong>, in a way that leverages HW acceleration when possible and that it integrates natively (and nicely) with the several Android subsystems, and of course with Android&rsquo;s native mainloop. Note that this is an experimental project for now, so don&rsquo;t expect production-ready quality quite yet, but hopefully something that can be used to start experimenting with selected use cases.</p>
<p>If you&rsquo;re adventurous enough, you can already try the APKs yourself from the releases page in GitHub at <a href="https://github.com/Igalia/wpe-android/releases"><a href="https://github.com/Igalia/wpe-android/releases">https://github.com/Igalia/wpe-android/releases</a></a>.</p>
<p>Anyway, as for the <strong>changes that happened in the past 12 months</strong>, here is a summary:</p>
<ul>
 	<li><strong>Updated</strong> WPE Android to <strong>WPE 2.46 and NDK 27 LTS</strong></li>
 	<li>Added <strong>support for WebDriver</strong> and included <strong>WPT test suites</strong></li>
 	<li>Added <strong>support for instrumentation tests</strong>, and integrated with the GitHub CI</li>
 	<li>Added <strong>support for the remote Web inspector</strong>, very useful for debugging</li>
 	<li>Enabled the <strong>Skia backend,</strong> bringing HW-accelerated 2D rendering to WebKit on Android</li>
 	<li>Implemented <strong>prompt delegates</strong>, allowing implementing things such as alert dialogs</li>
 	<li>Implemented <strong>WPEView client interfaces</strong>, allowing responding to things such as HTTP errors</li>
 	<li>Packaged a <strong>WPE-based Android WebView in its own library and published in Maven Central</strong>. This is a massive improvement as now apps can use WPE Android by simply referencing the library from the gradle files, no need to build everything on their own.</li>
 	<li>Other changes: enabled HTTP/2 support (via the migration to libsoup3), added support for the device scale factor, improved the virtual on-screen keyboard, general bug fixing...</li>
</ul>
On top of that, we published <strong>3 different blog posts</strong> covering different topics, from a general intro to a more deep dive explanation of the internals, and showing some demos. You can check them out in Jani's blog at <a href="https://blogs.igalia.com/jani/bringing-webkit-back-to-android" target="_blank" rel="nofollow noreferrer noopener">https://blogs.igalia.com/jani</a>
<p>As for the future, we&rsquo;ll focus on stabilization and regular maintenance for now, and then we&rsquo;d like to work towards achieving production-ready quality for specific cases if possible.</p>
<h3>Quality Assurance</h3>
On the QA front, we had a busy year but in general we could highlight the following topics.
<ul>
 	<li><strong>Fixed a<span style="font-size: 1rem;"> lot of </span></strong><span style="font-size: 1rem;"><strong>API tests failures</strong> in the bots that were limiting our test coverage.</span></li>
 	<li><strong>Fixed lots of assertions-related crashes</strong> in the bots, which were slowing down the bots as well as causing other types of issues, such as bots exiting early due too many failures.</li>
 	<li><strong>Enabled assertions in the release bots</strong>, which will help prevent crashes in the future, as well as with making our debug bots healthier.</li>
 	<li><strong>Moved all the WebKitGTK and WPE bots to building now with Skia</strong> instead of Cairo. This means that all the bots running tests are now using Skia, and there's only one bot still using Cairo to make sure that the compilation is not broken, but that bot does not run tests.</li>
 	<li><strong>Moved all the WebKitGTK bots to use GTK4 by default</strong>. As with the move to Skia, all the WebKit bots running tests now use GTK4 and the only one remaining building with GTK3 does not run tests, it only makes sure we don't break the GTK3 compilation for now.</li>
 	<li><strong>Working on moving all the bots to use the new SDK</strong>. This is still work in progress and will likely be completed during 2025 as it's needed to implement several changes in the infrastructure that will take some time.</li>
 	<li><strong>General gardening and bot maintenance</strong></li>
</ul>
In the next months, our main focus would be a revamp of the QA infrastructure to make sure that we can get all the bots (including the debug ones) to a healthier state, finish the migration of all the bots to the new SDK and, ideally, be able to bring back the ready-to-use WPE images that we used to have available in wpewebkit.org.
<h3>Security</h3>
The current release cadence has been working well, so we continue issuing <strong>major releases every 6 months</strong> (March, September), and then <strong>minor and unstable development releases</strong> happening <strong>on-demand</strong> when needed.
<p>As usual, we kept <strong>aligning releases for WebKitGTK and WPE</strong>, with both of them happening at the same time (see <a href="https://webkitgtk.org/releases"><a href="https://webkitgtk.org/releases">https://webkitgtk.org/releases</a></a> and <a href="https://wpewebkit.org/release"><a href="https://wpewebkit.org/release">https://wpewebkit.org/release</a></a>), and then also publishing <strong style="font-size: 1rem;">WebKit Security Advisories (<em data-sourcepos="697:37-697:41">WSA</em>)</strong> when necessary, both <a href="https://webkitgtk.org/security.html">for WebKitGTK</a> and <a href="https://wpewebkit.org/security">for WPE</a>.</p>
<p>Last, we also <strong>shortened the time before including security fixes in stable releases</strong> this year, and we have removed support for <a href="https://wiki.gnome.org/Projects/libsoup"><em>libsoup2</em></a> from WPE, as that library is no longer maintained.</p>
<h3>Tooling &amp; Documentation</h3>
On <strong>tooling</strong>, the main piece of news is that this year we r<span style="font-size: 1rem;">eleased the initial version of the <a href="https://github.com/Igalia/webkit-container-sdk">new SDK</a>,  which is developed on top of <a href="https://opencontainers.org/">OCI</a>-based containers. This new SDK fixes the issues with the current existing approaches based on <a href="https://www.freedesktop.org/wiki/Software/jhbuild/">JHBuild</a> and <a href="https://flatpak.org/">flatpak</a>, where one of them was great for development but poor for testing and QA, and the other one was great for testing and QA, but not very convenient for development.</span>
<p><span style="font-size: 1rem;">This new SDK is <strong>regularly maintained</strong> and currently runs on <a href="https://ubuntu.com/blog/tag/ubuntu-24-04-lts">Ubuntu 24.04 LTS</a> with <a href="https://gcc.gnu.org/gcc-14/">GCC 14</a> &amp; <a href="https://releases.llvm.org/18.1.0/tools/clang/docs/index.html">Clang 18</a>. It has been m</span>ade public on GitHub and <a href="https://blog.tingping.se/2024/05/23/Introducing-WebKit-Container-SDK.html">announced to the public in May 2024 in Patrick&rsquo;s blog</a>, and is <strong>now the officially recommended way</strong> of building WebKitGTK and WPE.</p>
<p>As for <strong>documentation</strong>, we didn&rsquo;t do as much as we would have liked here, but we still landed a few contributions in <a href="http://docs.webkit.org">docs.webkit.org</a>, mostly related to WebKitGTK (e.g. <a href="https://docs.webkit.org/Ports/WebKitGTK%20and%20WPE%20WebKit/ReleasesAndVersioning.html" target="_blank" rel="nofollow noreferrer noopener" data-sourcepos="723:5-723:118">Releases and Versioning</a>, <a href="https://docs.webkit.org/Ports/WebKitGTK%20and%20WPE%20WebKit/SecurityUpdates.html" target="_blank" rel="nofollow noreferrer noopener" data-sourcepos="724:5-724:105">Security Updates</a>, <a href="https://docs.webkit.org/Ports/WebKitGTK%20and%20WPE%20WebKit/Multimedia.html" target="_blank" rel="nofollow noreferrer noopener" data-sourcepos="725:5-725:94">Multimedia)</a>. We plan to do more on this regard in the next months, though, mostly by writing/publishing more documentation and perhaps also some tutorials.</p>
<h2>Final thoughts</h2>
This has been a fairly long blog post but, as you can see, it's been quite a year for WebKit here at Igalia, with many exciting changes happening at several fronts, and so there was quite a lot of stuff to comment on here. This said, you can always check the <a href="https://www.slideshare.net/slideshow/igalia-and-webkit-status-update-and-plans-72bd/272669557">slides of the presentation in the WebKit Contributors Meeting here</a> if you prefer a more concise version of the same content.
<p>In any case, what&rsquo;s clear it&rsquo;s that the next months are probably going to be quite interesting as well with all the work that&rsquo;s already going on in WebKit and its Linux ports, so it&rsquo;s possible that in 12 months from now I <em>might </em>be writing an equally long essay. We&rsquo;ll see.</p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title>Cross-compiling WebKit2GTK+ for ARM</title><link>https://mariospr.org/2016/09/30/cross-compiling-webkit2gtk-for-arm/</link><pubDate>Fri, 30 Sep 2016 19:10:56 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=2194</guid><description>&lt;p&gt;I haven&amp;rsquo;t blogged in a while -mostly due to lack of time, as usual- but I thought I&amp;rsquo;d write something today to let the world know about one of the things I&amp;rsquo;ve worked on a bit during this week, while remotely attending the &lt;a href="http://webengineshackfest.org/"&gt;Web Engines Hackfest&lt;/a&gt; from home:&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Setting up an environment for cross-compiling &lt;a href="https://webkitgtk.org/"&gt;WebKit2GTK+&lt;/a&gt; for ARM&lt;/strong&gt;&lt;/p&gt;
I know this is not new, nor ground-breaking news, but the truth is that I could not find any up-to-date documentation on the topic in a any public forum (the only one I found was this &lt;a href="http://webkit.sed.hu/blog/20100419/webkitgtk-cross-compilation-arm"&gt;pretty old post from the time WebKitGTK+ used autotools&lt;/a&gt;), so I thought I would devote some time to it now, so that I could save more in the future.
&lt;p&gt;Of course, I know for a fact that many people use local recipes to cross-compile WebKit2GTK+ for ARM (or simply build in the target machine, which usually takes a looong time), but those are usually ad-hoc things and hard to reproduce environments locally (or at least hard for me) and, even worse, often bound to downstream projects, so I thought it would be nice to try to have something tested with upstream WebKit2GTK+ and publish it on &lt;a href="https://trac.webkit.org"&gt;trac.webkit.org&lt;/a&gt;,&lt;/p&gt;</description><content:encoded><![CDATA[<p>I haven&rsquo;t blogged in a while -mostly due to lack of time, as usual- but I thought I&rsquo;d write something today to let the world know about one of the things I&rsquo;ve worked on a bit during this week, while remotely attending the <a href="http://webengineshackfest.org/">Web Engines Hackfest</a> from home:</p>
<p style="text-align: left;"><strong>Setting up an environment for cross-compiling <a href="https://webkitgtk.org/">WebKit2GTK+</a> for ARM</strong></p>
I know this is not new, nor ground-breaking news, but the truth is that I could not find any up-to-date documentation on the topic in a any public forum (the only one I found was this <a href="http://webkit.sed.hu/blog/20100419/webkitgtk-cross-compilation-arm">pretty old post from the time WebKitGTK+ used autotools</a>), so I thought I would devote some time to it now, so that I could save more in the future.
<p>Of course, I know for a fact that many people use local recipes to cross-compile WebKit2GTK+ for ARM (or simply build in the target machine, which usually takes a looong time), but those are usually ad-hoc things and hard to reproduce environments locally (or at least hard for me) and, even worse, often bound to downstream projects, so I thought it would be nice to try to have something tested with upstream WebKit2GTK+ and publish it on <a href="https://trac.webkit.org">trac.webkit.org</a>,</p>
<p>So I spent some time working on this with the idea of producing some <a href="https://github.com/mariospr/webkit2gtk-ARM/blob/master/README.md">step-by-step instructions</a> including how to create a reproducible environment from scratch and, after some inefficient flirting with a VM-based approach (which <a href="https://github.com/mariospr/webkit2gtk-ARM/commit/94d035491c3edb0cb96c0300f3910915768edcf7">turned out to be insanely slow</a>), I finally settled on creating a chroot + provisioning it with a simple <a href="https://github.com/mariospr/webkit2gtk-ARM/blob/master/bootstrap.sh">bootstrap scrip</a>t + using a simple <a href="https://cmake.org/cmake/help/v3.6/manual/cmake-toolchains.7.html#cross-compiling-for-linux">CMake Toolchain file</a>, and that worked quite well for me.</p>
<p>In my fast desktop machine I can now get a full build of WebKit2GTK+ 2.14 (or trunk) in less than 1 hour, which is pretty much a productivity bump if you compare it to the approximately 18h that takes if I build it natively in the target ARM device I have :-)</p>
<p>Of course, I&rsquo;ve <a href="https://trac.webkit.org/wiki/BuildingGtk#CrossCompilingforARMdevices">referenced this documentation in trac.webkit.org</a>, but if you want to skip that and go directly to it, I&rsquo;m hosting it in a git repository here: <a href="https://github.com/mariospr/webkit2gtk-ARM">github.com/mariospr/webkit2gtk-ARM</a>.</p>
<p>Note that I&rsquo;m not a CMake expert (nor even close) so the toolchain file is far from perfect, but it definitely does the job with both the 2.12.x and 2.14.x releases as well as with the trunk, so hopefully it will be useful as well for someone else out there.</p>
<p>Last, I want to thanks the <a href="http://www.webengineshackfest.org/#sponsors">organizers of this event</a> for making it possible once again (and congrats to <a href="https://www.igalia.com">Igalia</a>, which <a href="https://www.igalia.com/nc/igalia-247/news/item/igalia-celebrates-our-15th-anniversary/">just turned 15 years old</a>!) as well as to <a href="https://endlessm.com">my employer</a> for supporting me attending the hackfest, even if I could not make it in person this time.</p>
<p><a href="https://endlessm.com/"><img class="aligncenter size-large wp-image-2195" src="/wp-content/uploads/2016/09/Endless_horizontal_2colors-600x92.png" alt="Endless Logo" width="584" height="90" /></a></p>
]]></content:encoded></item><item><title>Attending the Web Engines Hackfest</title><link>https://mariospr.org/2015/11/26/attending-the-web-engines-hackfest/</link><pubDate>Thu, 26 Nov 2015 13:29:55 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=2082</guid><description>&lt;p&gt;&lt;a href="http://webkitgtk.org/"&gt;&lt;img class=" wp-image-2084 size-large aligncenter" src="https://mariospr.org/wp-content/uploads/2015/11/webkitgtk-hackfest-banner-600x150.jpg" alt="webkitgtk-hackfest-banner" width="584" height="146" /&gt;&lt;/a&gt;It&amp;rsquo;s certainly been a while since &lt;a href="https://mariospr.org/2013/12/13/webkitgtk-hackfest-2013-the-return-of-the-thing/"&gt;I attended this event for the last time&lt;/a&gt;, 2 years ago, when it was a&lt;a href="http://webkitgtk.org/"&gt; WebKitGTK+&lt;/a&gt; only oriented hackfest, so I guess it was a matter of time it happened again&amp;hellip;&lt;/p&gt;
&lt;p&gt;It will be different for me this time, though, as now my main focus won&amp;rsquo;t be on accessibility (yet I&amp;rsquo;m happy to help with that, too), but on fixing a few issues related to the &lt;a href="http://webkitgtk.org/reference/webkit2gtk/stable/index.html"&gt;WebKit2GTK+ API&lt;/a&gt; layer that I found while working on our platform (&lt;a href="https://endlessm.com/developer/#row-1"&gt;Endless OS&lt;/a&gt;), mostly related to its implementation of accelerated compositing.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="http://webkitgtk.org/"><img class=" wp-image-2084 size-large aligncenter" src="/wp-content/uploads/2015/11/webkitgtk-hackfest-banner-600x150.jpg" alt="webkitgtk-hackfest-banner" width="584" height="146" /></a>It&rsquo;s certainly been a while since <a href="/2013/12/13/webkitgtk-hackfest-2013-the-return-of-the-thing/">I attended this event for the last time</a>, 2 years ago, when it was a<a href="http://webkitgtk.org/"> WebKitGTK+</a> only oriented hackfest, so I guess it was a matter of time it happened again&hellip;</p>
<p>It will be different for me this time, though, as now my main focus won&rsquo;t be on accessibility (yet I&rsquo;m happy to help with that, too), but on fixing a few issues related to the <a href="http://webkitgtk.org/reference/webkit2gtk/stable/index.html">WebKit2GTK+ API</a> layer that I found while working on our platform (<a href="https://endlessm.com/developer/#row-1">Endless OS</a>), mostly related to its implementation of accelerated compositing.</p>
<p>Besides that, I&rsquo;m particularly curious about seeing how <a href="http://www.webengineshackfest.org/">the hackfest</a> looks like now that it has broaden its scope to include other web engines, and I&rsquo;m also quite happy to know that I&rsquo;ll be visiting my home town and meeting my old colleagues and friends from <a href="http://www.igalia.com/">Igalia</a> for a few days, once again.</p>
<p><a href="http://endlessm.com"><img class="alignright wp-image-1761 size-full" src="/wp-content/uploads/2014/08/endless_mobile_logo_only.png" alt="Endless Mobile logo" width="78" height="39" /></a>Last, I&rsquo;d like to thank <a href="http://endlessm.com/">my employer</a> for sponsoring this trip, as well as <a href="http://www.igalia.com/">Igalia</a> for organizing <a href="http://www.webengineshackfest.org/">this event</a>, one more time.</p>
<p>See you in Coruña!</p>
]]></content:encoded></item><item><title>Importing include paths in Eclipse</title><link>https://mariospr.org/2015/11/07/importing-include-paths-in-eclipse/</link><pubDate>Sat, 07 Nov 2015 02:35:51 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=2071</guid><description>&lt;p&gt;First of all, let me be clear: no, I&amp;rsquo;m not &lt;a href="https://mariospr.org/2013/03/23/multiple-cursors-emacs-and-me/"&gt;trying to leave Emacs again&lt;/a&gt;, already got over that stage. Emacs is and will be my main editor for the foreseeable future, as it&amp;rsquo;s clear to me that there&amp;rsquo;s no other editor I feel more comfortable with, which is why I spent some time &lt;a href="https://github.com/mariospr/emacs-configuration"&gt;cleaning up my .emacs.d and making it more &amp;ldquo;manageable&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But as much as like Emacs as my main &amp;ldquo;weapon&amp;rdquo;, I sometimes appreciate the advantages of using a different kind of beast for specific purposes. And, believe me or not, in the past 2 years I learned to love &lt;a href="https://eclipse.org/cdt/"&gt;Eclipse/CDT&lt;/a&gt; as the best work-mate I know when I need some extra help to get deep inside of the two monster C++ projects that &lt;a href="http://www.webkit.org"&gt;WebKit&lt;/a&gt; and &lt;a href="http://www.chromium.org/"&gt;Chromium&lt;/a&gt; are. And yes, I know Eclipse is resource hungry, slow, bloated&amp;hellip; and whatnot; but I&amp;rsquo;m lucky enough to have fast &lt;em&gt;SSDs&lt;/em&gt; and lots of RAM in my laptop &amp;amp; desktop machines, so that&amp;rsquo;s not really a big concern anymore for me (even though I reckon that indexing chromium in the laptop takes &amp;ldquo;quite some time&amp;rdquo;), so let&amp;rsquo;s move on :-)&lt;/p&gt;</description><content:encoded><![CDATA[<p>First of all, let me be clear: no, I&rsquo;m not <a href="/2013/03/23/multiple-cursors-emacs-and-me/">trying to leave Emacs again</a>, already got over that stage. Emacs is and will be my main editor for the foreseeable future, as it&rsquo;s clear to me that there&rsquo;s no other editor I feel more comfortable with, which is why I spent some time <a href="https://github.com/mariospr/emacs-configuration">cleaning up my .emacs.d and making it more &ldquo;manageable&rdquo;</a>.</p>
<p>But as much as like Emacs as my main &ldquo;weapon&rdquo;, I sometimes appreciate the advantages of using a different kind of beast for specific purposes. And, believe me or not, in the past 2 years I learned to love <a href="https://eclipse.org/cdt/">Eclipse/CDT</a> as the best work-mate I know when I need some extra help to get deep inside of the two monster C++ projects that <a href="http://www.webkit.org">WebKit</a> and <a href="http://www.chromium.org/">Chromium</a> are. And yes, I know Eclipse is resource hungry, slow, bloated&hellip; and whatnot; but I&rsquo;m lucky enough to have fast <em>SSDs</em> and lots of RAM in my laptop &amp; desktop machines, so that&rsquo;s not really a big concern anymore for me (even though I reckon that indexing chromium in the laptop takes &ldquo;quite some time&rdquo;), so let&rsquo;s move on :-)</p>
<p>However, there&rsquo;s this one little thing that still bothers quite me a lot of Eclipse: you need to <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Ftasks%2Fcdt_t_proj_paths.htm">manually setup the include paths for the external dependencies not in a standard location that a C/C++ project uses</a>, so that you can get certain features properly working such as code auto-completion, automatic error-checking features, call hierarchies&hellip; and so forth.</p>
<p>And yes, I know there is an <a href="https://marketplace.eclipse.org/content/pkg-config-support-eclipse-cdt">Eclipse plugin adding support for pkg-config</a> which should do the job quite well. But for some reason I can&rsquo;t get it to work with <a href="https://projects.eclipse.org/releases/mars">Eclipse Mars</a>, even though others apparently can use it there for some reason (and I remember using it with <a href="https://eclipse.org/juno/">Eclipse Juno</a>, so it&rsquo;s definitely not a myth).</p>
<p>Anyway, I did not feel like fighting with that (broken?) plugin, and in the other hand I was actually quite inclined to play a bit with <a href="https://www.python.org/">Python</a> so&hellip; my quick and dirty solution to get over this problem was to write a <a href="https://github.com/mariospr/scripts/blob/master/pkg-config-to-eclipse">small script that takes a list of package names (as you would pass them to pkg-config) and generates the XML content that you can use to import in Eclipse</a>. And surprisingly, that worked quite well for me, so I&rsquo;m sharing it here in case someone else finds it useful.</p>
<p>Using <a href="https://git.gnome.org/browse/frogr/">frogr</a> as an example, I generate the XML file for Eclipse doing this:</p>
<pre>
  $ pkg-config-to-eclipse glib-2.0 libsoup-2.4 libexif libxml-2.0 \
        json-glib-1.0 gtk+-3.0 gstreamer-1.0 > frogr-eclipse.xml
</pre>
<p>&hellip;and then I simply import <em>frogr-eclipse.xml</em> from the project&rsquo;s properties, inside the <em>C/C++ General &gt; Paths and Symbols</em> section.</p>
<p>After doing that I get rid of all the brokenness caused by so many missing symbols and header files, I get code auto-completion nicely working back again and all those perks you would expect from this little big IDE. And all that without having to go through the pain of defining all of them one by one from the settings dialog, thank goodness!</p>
<p>Now you can quickly see how it works in the video below:</p>
<p style="text-align: center;"><iframe src="https://www.youtube.com/embed/16TJ1zopjeY" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
<a href="https://www.youtube.com/watch?v=16TJ1zopjeY">VIDEO: Setting up a C/C++ project in Eclipse with pkg-config-to-eclipse</a></p>
This has been very helpful for me, hope it will be helpful to someone else too!
]]></content:encoded></item><item><title>On Linux32 chrooted environments</title><link>https://mariospr.org/2015/07/03/on-linux32-chrooted-environments/</link><pubDate>Fri, 03 Jul 2015 15:31:31 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=2030</guid><description>&lt;p&gt;I have a chrooted environment in my 64bit Fedora 22 machine that I use every now and then to work on a debian-like 32bit system where I might want to do all sorts of things, such as building software for the target system or creating debian packages. More specifically, today I was trying to build WebKitGTK+ 2.8.3 in there and something weird was happening:&lt;/p&gt;
&lt;p&gt;The following CMake snippet was &lt;strong&gt;not&lt;/strong&gt; properly recognizing my 32bit chroot:&lt;/p&gt;</description><content:encoded><![CDATA[<p>I have a chrooted environment in my 64bit Fedora 22 machine that I use every now and then to work on a debian-like 32bit system where I might want to do all sorts of things, such as building software for the target system or creating debian packages. More specifically, today I was trying to build WebKitGTK+ 2.8.3 in there and something weird was happening:</p>
<p>The following CMake snippet was <strong>not</strong> properly recognizing my 32bit chroot:</p>
<pre>
string(TOLOWER ${CMAKE_HOST_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_HOST_SYSTEM_PROCESSOR)
if (CMAKE_COMPILER_IS_GNUCXX AND "${LOWERCASE_CMAKE_HOST_SYSTEM_PROCESSOR}" MATCHES "(i[3-6]86|x86)$")
    ADD_TARGET_PROPERTIES(WebCore COMPILE_FLAGS "-fno-tree-sra")
endif ()
</pre>
<p>After some investigation, I found out that <code>CMAKE_HOST_SYSTEM_PROCESSOR</code> relies on the output of <code>uname</code> to determine the type of the CPU, and this what I was getting if I ran it myself:</p>
<pre>
(debian32-chroot)mario:~ $ uname -a
Linux moucho 4.0.6-300.fc22.x86_64 #1 SMP Tue Jun 23 13:58:53 UTC 2015
x86_64 x86_64 x86_64 GNU/Linux
</pre>
<p>Let&rsquo;s avoid nasty comments about the stupid name of my machine (I&rsquo;m sure everyone else uses clever names instead), and see what was there: <strong>x86_64</strong>.</p>
<p>That looked <strong>wrong</strong> to me, so I googled a bit to see what others did about this and, besides finding all sorts of crazy hacks around, I found that in my case the solution was pretty simple just because I am using <a href="https://wiki.debian.org/Schroot">schroot</a>, a great tool that makes life easier when working with chrooted environments.</p>
<p>Because of that, all I would have to do would be to specify <code>personality=linux32</code> in the configuration file for my chrooted environment and that&rsquo;s it. Just by doing that and re-entering in the &ldquo;jail&rdquo;, the output would be much saner now:</p>
<pre>
(debian32-chroot)mario:~ $ uname -a
Linux moucho 4.0.6-300.fc22.x86_64 #1 SMP Tue Jun 23 13:58:53 UTC 2015
i686 i686 i686 GNU/Linux
</pre>
<p>And of course, WebKitGTK+ would now recognize and use the right CPU type in the snippet above and I could &ldquo;relax&rdquo; again while seeing WebKit building again.</p>
<p>Now, for extra reference, this is the content of my schroot configuration file:</p>
<pre>
$ cat /etc/schroot/chroot.d/00debian32-chroot
[debian32-chroot]
description=Debian-like chroot (32 bit) 
type=directory
directory=/schroot/debian32/
users=mario
groups=mario
root-users=mario
personality=linux32
</pre>
<p>That is all, hope somebody else will find this useful. It certainly saved my day!</p>
]]></content:encoded></item><item><title>WebKitGTK+ Hackfest 2013: The Return of the Thing</title><link>https://mariospr.org/2013/12/13/webkitgtk-hackfest-2013-the-return-of-the-thing/</link><pubDate>Fri, 13 Dec 2013 20:10:04 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=1674</guid><description>&lt;p&gt;&lt;a href="https://mariospr.org/2013/12/13/webkitgtk-hackfest-2013-the-return-of-the-thing/webkitgtk-hackfest-2013/" rel="attachment wp-att-1684"&gt;&lt;img class="alignright size-medium wp-image-1684" alt="The WebKitGTK+ Hackfest 2013" src="https://mariospr.org/wp-content/uploads/2013/12/webkitgtk-hackfest-2013-300x225.png" width="300" height="225" /&gt;&lt;/a&gt;As many other &lt;a title="The WebKitGTK+ project" href="http://webkitgtk.org"&gt;WebKitGTK+ &lt;/a&gt;hackers (30 in total), I flew last Saturday to A Coruña to attend the &lt;a title="The WebKitGTK+ Hackfest 2013" href="https://wiki.gnome.org/Hackfests/WebKitGTK2013"&gt;5th edition of the WebKitGTK+ Hackfest&lt;/a&gt;, hosted once again by &lt;a title="Igalia" href="http://www.igalia.com"&gt;Igalia&lt;/a&gt; at their premises and where people from several different affiliations gathered together to try to give our beloved port a boost.&lt;/p&gt;
&lt;p&gt;As for me, I flew there to work mainly on accessibility related issues, making the most of the fact that both &lt;a title="Joanie's blog" href="http://blog.grain-of-salt.com/"&gt;Joanie&lt;/a&gt; (&lt;a title="Orca screen reader" href="http://live.gnome.org/Orca"&gt;Orca&lt;/a&gt; maintainer) and &lt;a title="API's blog" href="https://blogs.igalia.com/apinheiro/"&gt;Piñeiro&lt;/a&gt; (&lt;a title="ATK" href="https://developer.gnome.org/atk/unstable/"&gt;ATK&lt;/a&gt; maintainer) would be there too, so it should be possible to make things happen faster, specially discussion-wise.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="/2013/12/13/webkitgtk-hackfest-2013-the-return-of-the-thing/webkitgtk-hackfest-2013/" rel="attachment wp-att-1684"><img class="alignright size-medium wp-image-1684" alt="The WebKitGTK+ Hackfest 2013" src="/wp-content/uploads/2013/12/webkitgtk-hackfest-2013-300x225.png" width="300" height="225" /></a>As many other <a title="The WebKitGTK+ project" href="http://webkitgtk.org">WebKitGTK+ </a>hackers (30 in total), I flew last Saturday to A Coruña to attend the <a title="The WebKitGTK+ Hackfest 2013" href="https://wiki.gnome.org/Hackfests/WebKitGTK2013">5th edition of the WebKitGTK+ Hackfest</a>, hosted once again by <a title="Igalia" href="http://www.igalia.com">Igalia</a> at their premises and where people from several different affiliations gathered together to try to give our beloved port a boost.</p>
<p>As for me, I flew there to work mainly on accessibility related issues, making the most of the fact that both <a title="Joanie's blog" href="http://blog.grain-of-salt.com/">Joanie</a> (<a title="Orca screen reader" href="http://live.gnome.org/Orca">Orca</a> maintainer) and <a title="API's blog" href="https://blogs.igalia.com/apinheiro/">Piñeiro</a> (<a title="ATK" href="https://developer.gnome.org/atk/unstable/">ATK</a> maintainer) would be there too, so it should be possible to make things happen faster, specially discussion-wise.</p>
<p>And turns out that, even if I feel like I could have achieved more than what I actually did (as usual), I believe we did quite well in the end: we discussed and clarified things that were blocking the mapping of new <a title="WAI-ARIA User Agent Implementation Guide" href="www.w3.org/TR/wai-aria-implementation">WAI-ARIA</a> roles in <a title="The WebKitGTK+ project" href="http://webkitgtk.org">WebKitGTK+</a>, we got rid of a bunch of WebKit1-specific unit tests (<a title="Joanie's blog" href="http://blog.grain-of-salt.com/">Joanie</a> converted them into nice layout tests that will be run by <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/">WebKit2GTK+</a> too), we got a few new roles in <a title="ATK" href="https://developer.gnome.org/atk/unstable/">ATK</a> to be able to better map things from the web world and and we fixed a couple of issues in the way too.</p>
<p>Of course, not everything has been rainbows and unicorns, as it seems that one of the patches I landed broke the inspector for <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/">WebKit2GTK+</a> (sorry <a title="Gustavo's blog" href="http://blog.kov.eti.br/">Gustavo</a>!). Fortunately, that one has been rolled out already and I hope I will be able to get back to it soon (next week?) to provide a better patch for that without causing any problem. Fingers crossed.</p>
<p>In the other hand, my mate Brian Holt joined us for three days too and, despite of being his first time in the hackfest, he got integrated pretty quickly with other hackers, teaming up to collaborate in the big boost that the <em>network process</em> &amp; <em>multiple web processes</em> items have went through during the event. And not only that, he also managed to give a boost to his last patch to provide automatic memory leak detection in <a title="The WebKitGTK+ project" href="http://webkitgtk.org">WebKitGTK+</a>, which I&rsquo;m sure it will be a great tool once it&rsquo;s finished and integrated upstream.</p>
<p>Anyway, if you want more details on those topics, or anything else, please check out the blog posts that <a href="http://www.gnome.org/news/2013/12/webkitgtk-hackfest-underway-in-a-coruna/">other</a> <a href="https://people.gnome.org/~csaavedra/news-2013-12.html">hackers</a> <a href="http://blog.kov.eti.br/2013/12/webkitgtk-hackfest-5-0-2013/">have</a> <a href="http://base-art.net/Articles/124/">been</a> <a href="https://blogs.igalia.com/itoral/2013/12/11/webkitgtk-2013-hackfest-on-the-road-to-webkit2-wayland-support-in-webkitgtk/">posting</a> <a href="https://blogs.igalia.com/carlosgc/2013/12/12/webkitgtk-hackfest-2013-the-network-process/">these</a> <a href="http://kwangyulseo.wordpress.com/2013/12/13/webkitgtk-hackfest-2003/">days</a>, specially <a title="WebKitGTK+ Hackfest 2013, by Carlos Carcia Campos" href="https://blogs.igalia.com/carlosgc/2013/12/12/webkitgtk-hackfest-2013-the-network-process/">Carlos&rsquo;s blog post</a>, which is quite extensive and detailed.</p>
<p><a href="/2013/07/12/im-going-to-guadec/logo/" rel="attachment wp-att-1567"><img class="alignright size-full wp-image-1567" alt="Samsung Logo" src="/wp-content/uploads/2013/07/logo.png" width="106" height="35" /></a>Of course, I would like to thank the main sponsors <a title="Igalia" href="http://www.igalia.com">Igalia</a> and the <a title="The GNOME project" href="http://www.gnome.org">GNOME</a> Foundation for making this thing happen again, and to my employer <a title="Samsung UK" href="http://www.samsung.com/uk">Samsung</a>  for helping as well by paying our trips and accommodation, as well as the snacks and the coffee that helped us stay alive and get fatter during the hackfest.</p>
<p>Last, I would like to mention (in case anyone reading this wondered) that it has indeed felt a bit strange to go the city where I used to live in and stay in a hotel, not to mention going to the office where I used to work in and hang around it as a visitor. However, both my former city and my former colleagues somehow ensured that I felt as &ldquo;at home&rdquo; once again, and so I can&rsquo;t do anything about it but feeling enormously grateful for that.</p>
<p>Thank you all, and see you next year!</p>
]]></content:encoded></item><item><title>Greppin' in the past with git</title><link>https://mariospr.org/2013/11/14/greppin-in-the-past-with-git/</link><pubDate>Thu, 14 Nov 2013 00:25:35 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=1641</guid><description>&lt;p&gt;It seems that one can never stop learning new things with &lt;em&gt;git&lt;/em&gt;, no matter for how long you&amp;rsquo;ve been using it (in my case, I&amp;rsquo;m a &lt;em&gt;proud git user&lt;/em&gt; since 2008), because today I added a new trick to my toolbox, that already proved to be quite useful: &amp;ldquo;grepping&amp;rdquo; files in a git repository, as you would do it with &lt;em&gt;git grep, &lt;/em&gt;but using a &lt;em&gt;commit-id&lt;/em&gt; to limit the search to a specific snapshot of your project.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It seems that one can never stop learning new things with <em>git</em>, no matter for how long you&rsquo;ve been using it (in my case, I&rsquo;m a <em>proud git user</em> since 2008), because today I added a new trick to my toolbox, that already proved to be quite useful: &ldquo;grepping&rdquo; files in a git repository, as you would do it with <em>git grep, </em>but using a <em>commit-id</em> to limit the search to a specific snapshot of your project.</p>
<p>In other words, I found that it&rsquo;s possible to do things like, say, grep files to search for something in your repository considering how it was, say, some commits ago.</p>
<p>This is the &ldquo;magical&rdquo; command:</p>
<p>    git grep <strong>&lt;search-params&gt;</strong> <strong>&lt;tree-id&gt;</strong></p>
<p>This is what I get if I try to search for <em>updateBackingStore()</em> in my local clone of <a title="WebKit" href="http://www.webkit.org">WebKit</a>, as if my current branch was &ldquo;50 commits older&rdquo; than what it actually is:</p>
<pre>$ git grep updateBackingStore HEAD~50
0ae236137d560da6ca889a826a8f3d023364a669:AccessibilityObject.cpp:void AccessibilityObject::updateBackingStore()
0ae236137d560da6ca889a826a8f3d023364a669:AccessibilityObject.h:    void updateBackingStore();
0ae236137d560da6ca889a826a8f3d023364a669:AccessibilityObject.h:inline void AccessibilityObject::updateBackingStore() { }
0ae236137d560da6ca889a826a8f3d023364a669:atk/WebKitAccessibleUtil.h:        coreObject-&gt;updateBackingStore(); \
0ae236137d560da6ca889a826a8f3d023364a669:atk/WebKitAccessibleUtil.h:        coreObject-&gt;updateBackingStore(); \
0ae236137d560da6ca889a826a8f3d023364a669:atk/WebKitAccessibleWrapperAtk.cpp:    coreObject-&gt;updateBackingStore();
0ae236137d560da6ca889a826a8f3d023364a669:ios/WebAccessibilityObjectWrapperIOS.mm:    m_object-&gt;updateBackingStore();
0ae236137d560da6ca889a826a8f3d023364a669:ios/WebAccessibilityObjectWrapperIOS.mm:    m_object-&gt;updateBackingStore();
0ae236137d560da6ca889a826a8f3d023364a669:mac/WebAccessibilityObjectWrapperBase.mm:    // Calling updateBackingStore() can invalidate this element so self must be retained.
0ae236137d560da6ca889a826a8f3d023364a669:mac/WebAccessibilityObjectWrapperBase.mm:    m_object-&gt;updateBackingStore();</pre>
<p>I don&rsquo;t know about you, but I find this quite useful for me to answer questions such as &ldquo;Where was this function being used in commit X?&rdquo;, and things like that.</p>
<p>Anyway, you might have noticed that I mentioned <strong>&lt;tree-id&gt;</strong> in the recipe instead of <strong>&lt;commit-id&gt;</strong>, yet I used <em>HEAD~50 </em>in the example, which is actually a <em>commit-id.</em> And still works.</p>
<p>And the short explanation, without trying to explain here all the different kind of data types that git keeps internally for every repository (mainly <em>commits</em>, <em>trees</em> and <em>blobs</em>), is that git is smart enough to find the right <em>tree-id</em> associated to a given <em>commit-id</em> by just considering <strong>the current path </strong>inside the repository and the <strong>tree-id associated to the top directory for a given commit</strong>.</p>
<p>But how to know that <em>tree-id</em> myself in case I want to? Easy, just <em>pretty print</em> the full information of the <em>commit</em> object you&rsquo;re interested in, instead of only seeing the abbreviated version (what you usually see with git show or git log:</p>
<pre>$ git cat-file -p HEAD~50
tree 0ae236137d560da6ca889a826a8f3d023364a669
parent bdb7a7949a29988da3fe50a65d6c694d5084d379
author [...]</pre>
<p>See that <em>tree </em>thing in the first line? That&rsquo;s the <em>tree-id</em> that git needs for grepping, which as you can see can be easily extracted from a particular commit. Actually, you could get easily the <em>tree-id</em> for any subdirectory from this point, by using the <em>git ls-tree</em> command:</p>
<pre>$ git ls-tree 0ae236137d560da6ca889a826a8f3d023364a669
100644 blob 3fe2340c9614e893f0dfeb720f23773bbf1ea076	.dir-locals.el
100644 blob 741c4d53b5a0338cf36900a283e89408d0f9d457	.gitattributes
100644 blob f45a975762be9a429aa971c18da01b433c559553	.gitignore
100644 blob d571aa28ea86c14c7880533bf3ba68e9ef4b3c81	.qmake.conf
100644 blob 10f85055ae9f3823f0d20808599f644c18af7921	CMakeLists.txt
100644 blob 5eb66e7bcbc7543eb3a4dbf183a9043545776659	ChangeLog
100644 blob 7dbe9d2e0029bab47b8b2b22065a1032ecfe4434	ChangeLog-2012-05-22
040000 tree d42a0b3121ed7993cfd250426d20472769760f87	Examples
100644 blob 78d89e5c70ad56c38b0c25e7705d42fa380c4ee0	GNUmakefile.am
040000 tree 4a9e87fc1f35efa1349a18b1df694530c981c57e	LayoutTests
100644 blob 14e33157011157797dac62c494bac0bf254d7c2f	Makefile
100644 blob ee723d830dea51d1ce9e2d1ad8c985eeca2d4f3f	Makefile.shared
040000 tree 20c763d6a4e8749ad9e041e8372e9f47dc722f45	ManualTests
040000 tree 660d88b926cf618ab9e1612b8e2a3e97b15dbcbe	PerformanceTests
040000 tree fbf9703d3e9a9e4cf2ff10817c99ba3a5de87410	Source
040000 tree 346110c441a674334f5f56ef42b9dd40def89c76	Tools
040000 tree 262cb11d9b491be35daee570f9b825bce5715579	WebKit.xcworkspace
040000 tree b9e48a7a24b4973b253ee14053808b40d67c94aa	WebKitLibraries
040000 tree adce37b690957abdd21d2dd8ff77302c5a5a9071	Websites
100755 blob befd429487fc5ac9bb3494800f4eeaef1e607663	autogen.sh</pre>
<p>And of course, &ldquo;navigating&rdquo; with more calls to <em>git ls-tree </em>you could also get the <em>tree-id</em> for a specific subdirectory, in case you wanted to constraint the search to that specific path of your repo.</p>
<p>However, considering that git is so good at translating a <em>commit-id </em>into a <em>tree-id</em>, my personal recommendation is that, instead, you first <em>cd </em>into the path you want to focus the search in, and then let <em>git </em> do its &ldquo;magic&rdquo; by just using the <em>git grep &lt;search-params&gt; &lt;tree-id&gt;<strong> </strong></em>command.</p>
<p>So that&rsquo;s it. Hope you find this useful, and please do not hesitate to share any comment or suggestion you might have with regard to this or any other &ldquo;git trick&rdquo; you might know.</p>
<p>I honestly love using git so much that sometimes I wonder if coding is not just a poor excuse to use git. Probably not, but the thing is that I can not imagine my life without it anymore. That&rsquo;s a fact.</p>
]]></content:encoded></item><item><title>Goodbye Pango! Goodbye GAIL!</title><link>https://mariospr.org/2013/09/13/goodbye-pango-goodbye-gail/</link><pubDate>Fri, 13 Sep 2013 17:44:08 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=1603</guid><description>&lt;p&gt;As I mentioned in &lt;a title="&amp;quot;I'm going to GUADEC!&amp;quot; blog post" href="https://mariospr.org/2013/07/12/im-going-to-guadec/"&gt;my previous post before GUADEC&lt;/a&gt;, I&amp;rsquo;ve been putting some effort lately on trying to improve the accessibility layer of &lt;a title="WebKitGTK+" href="http://webkitgtk.org/"&gt;WebKitGTK+&lt;/a&gt;, as part of my work here at &lt;a title="Samsung" href="http://www.samsung.com"&gt;Samsung&lt;/a&gt;, and one of the main things I&amp;rsquo;ve worked on was the removal of the dependency we had on &lt;a title="Pango" href="https://git.gnome.org/browse/pango"&gt;Pango&lt;/a&gt; and &lt;a title="GTK+ Accessibility Implementation Layer" href="https://git.gnome.org/browse/libgail-gnome/"&gt;GAIL&lt;/a&gt; to implement the &lt;a title="AtkText interface" href="https://developer.gnome.org/atk/unstable/AtkText.html"&gt;&lt;em&gt;atk_text_get_text_*_offset()&lt;/em&gt;&lt;/a&gt; family of functions for the different &lt;a title="AtkText boundaries" href="https://developer.gnome.org/atk/unstable/AtkText.html#AtkTextBoundary"&gt;text boundaries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And finally, I&amp;rsquo;m really happy to say that such a task is complete once and for all, meaning that now those functions should work as well or as bad on &lt;a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/index.html"&gt;WebKit2GTK+&lt;/a&gt; as they do in &lt;a title="WebKitGTK+" href="http://webkitgtk.org/"&gt;WebKitGTK+&lt;/a&gt;, so the weird behaviour described &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=73433"&gt;in bug 73433&lt;/a&gt; is no longer an issue. You can check I&amp;rsquo;m not lying by just taking a look to the commit that &lt;a title="Commit: Get rid of Pango/Gail dependencies in accessibility for ATK" href="http://trac.webkit.org/changeset/155520"&gt;removed both all trace of Pango and GAIL in the code&lt;/a&gt;, as well as and the one that &lt;a title="Commit: Remove Gail dependency from build system for GTK3" href="http://trac.webkit.org/changeset/155534"&gt;removed the GAIL dependency from the build system&lt;/a&gt;. And if you want more detail, just feel free to check the whole &lt;a title="Dependency tree in WebKit's bugzilla" href="https://bugs.webkit.org/showdependencytree.cgi?id=119673&amp;amp;hide_resolved=0"&gt;dependency tree in WebKit&amp;rsquo;s bugzilla&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>As I mentioned in <a title="&quot;I'm going to GUADEC!&quot; blog post" href="/2013/07/12/im-going-to-guadec/">my previous post before GUADEC</a>, I&rsquo;ve been putting some effort lately on trying to improve the accessibility layer of <a title="WebKitGTK+" href="http://webkitgtk.org/">WebKitGTK+</a>, as part of my work here at <a title="Samsung" href="http://www.samsung.com">Samsung</a>, and one of the main things I&rsquo;ve worked on was the removal of the dependency we had on <a title="Pango" href="https://git.gnome.org/browse/pango">Pango</a> and <a title="GTK+ Accessibility Implementation Layer" href="https://git.gnome.org/browse/libgail-gnome/">GAIL</a> to implement the <a title="AtkText interface" href="https://developer.gnome.org/atk/unstable/AtkText.html"><em>atk_text_get_text_*_offset()</em></a> family of functions for the different <a title="AtkText boundaries" href="https://developer.gnome.org/atk/unstable/AtkText.html#AtkTextBoundary">text boundaries</a>.</p>
<p>And finally, I&rsquo;m really happy to say that such a task is complete once and for all, meaning that now those functions should work as well or as bad on <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/index.html">WebKit2GTK+</a> as they do in <a title="WebKitGTK+" href="http://webkitgtk.org/">WebKitGTK+</a>, so the weird behaviour described <a href="https://bugs.webkit.org/show_bug.cgi?id=73433">in bug 73433</a> is no longer an issue. You can check I&rsquo;m not lying by just taking a look to the commit that <a title="Commit: Get rid of Pango/Gail dependencies in accessibility for ATK" href="http://trac.webkit.org/changeset/155520">removed both all trace of Pango and GAIL in the code</a>, as well as and the one that <a title="Commit: Remove Gail dependency from build system for GTK3" href="http://trac.webkit.org/changeset/155534">removed the GAIL dependency from the build system</a>. And if you want more detail, just feel free to check the whole <a title="Dependency tree in WebKit's bugzilla" href="https://bugs.webkit.org/showdependencytree.cgi?id=119673&amp;hide_resolved=0">dependency tree in WebKit&rsquo;s bugzilla</a>.</p>
<p>This task has been an interesting challenge for me indeed, and not only because it was one of the biggest accessibility related tasks I&rsquo;ve worked on in <a title="WebKitGTK+" href="http://webkitgtk.org/">WebKitGTK+</a> since late 2012 (so I needed to get my brain trained again on it), but also because reimplementing these functions forced me to dive into <a title="WebKit's text editing layer" href="https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/editing">text editing</a> and <a title="WebKit's accessibility layer" href="https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/accessibility/">accessibility code</a> in <a title="WebCore" href="https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/">WebCore</a> as I never did before. And it&rsquo;s so cool to see how, despite of having to deal eventually with the frustrating feeling of hitting my head against a wall, at the end of the day it all resulted on a nice set of patches that do the work and help advance the state of the <a title="WebKit ATK based accessibility layer" href="https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/accessibility/atk/">ATK based accessibility layer</a> in <a title="WebKitGTK+" href="http://webkitgtk.org/">WebKitGTK+</a> forward.</p>
<p>Anyway, even though that is probably the thing that motivated me to write this blog post, that was not the only thing that I did since <a title="GUADEC" href="http://www.guadec.org/">GUADEC</a> (which has been a blast, by the way):</p>
<p>On the personal side, I&rsquo;ve spent two lovely weeks in <a title="Spain" href="http://en.wikipedia.org/wiki/Spain">Spain</a> on holidays, which was the biggest period of time I&rsquo;ve been outside of the <a title="United Kingdom" href="http://en.wikipedia.org/wiki/United_Kingdom">UK</a> since I arrived here, and had  an amazing time there just <em>&ldquo;doing nothing&rdquo;(tm)</em> but lying around on the beach and seeing the grass grow. And there is not much grass there anywhere, so you can imagine how stressful that life was&hellip; it was great.</p>
<p>In the other hand, on the professional side, I&rsquo;d say that one of the other big things that happened to me lately was that <a title="Announcement about my &quot;upgrade&quot; into WebKit reviewer" href="https://lists.webkit.org/pipermail/webkit-dev/2013-August/025329.html">I finally became accepted as a WebKit reviewer</a>, meaning that now I can not only help <em>breaking the Web</em>, but also authorize others to do it so. And while agree that might be fun in some way, it probably would not be very cool, so forgive me if I try instead to do my best to help get exactly the opposite result: make things work better.</p>
<p>And truth to be told, this &ldquo;upgrade&rdquo; came just with perfect timing, since these days quite some work is being done in the accessibility layer for both the <a title="WebKitGTK+" href="http://webkitgtk.org/">WebKitGTK+</a> and the <a title="WebKitEFL" href="http://trac.webkit.org/wiki/EFLWebKit">WebKitEFL</a> ports thanks also to my mates <a title="Denis Nomiyama contributions to WebKit" href="http://trac.webkit.org/search?q=denis+nomiyama&amp;noquickjump=1&amp;changeset=on">Denis Nomiyama</a>, <a title="Anton Obzhirov contributions to WebKit" href="http://trac.webkit.org/search?q=anton+obzhirov&amp;noquickjump=1&amp;changeset=on">Anton Obzhirov</a>, <a title="Brian Holt contributions to WebKit" href="http://trac.webkit.org/search?q=brian+holt&amp;noquickjump=1&amp;changeset=on">Brian Holt</a> and <a title="Krzysztof Czech contributions to WebKit" href="http://trac.webkit.org/search?q=krzysztof+czech&amp;noquickjump=1&amp;changeset=on">Krzysztof Czech</a> from <a title="Samsung" href="http://www.samsung.com">Samsung</a>, and that work would ideally need to be reviewed by someone familiar with the <a href="http://developer.gnome.org/atk/stable/index.html" rel="nofollow">ATK</a>/<a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/atk/at-spi/at-spi_on_d-bus" rel="nofollow">AT-SPI</a> based accessibility stack. And while I&rsquo;m still by far not the most knowledgeable person in the world when it comes to those topics, I believe I might have a fairly well knowledge about it anyway, so I assume (and hope) that my reviews will certainly add value and help with those specific pieces of work.</p>
<p>And as a nice plus, now I can finally &ldquo;return the favour&rdquo; to the only accessibility reviewer <a title="WebKit" href="http://webkit.org/">WebKit</a> had until now (<a title="Chris Fleizach" href="http://chris.fleizach.com/">Chris Fleizach</a>) by helping reviewing his patches as well, in a similar fashion to what he has been tirelessly doing for me for the last 3 years and a half. Yay!</p>
<p>To finish , I&rsquo;d like to get back again to the original topic of this post and say a big &ldquo;thank you&rdquo; to everyone who helped me along the way with the removal of <a title="Pango" href="https://git.gnome.org/browse/pango">Pango</a> and <a title="GTK+ Accessibility Implementation Layer" href="https://git.gnome.org/browse/libgail-gnome/">GAIL</a> from <a title="WebKit ATK based accessibility layer" href="https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/accessibility/atk/">the ATK specific code</a>. Special thanks go to those who spend time performing the code reviews, as it&rsquo;s the case of <a title="Martin Robinson's blog" href="http://abandonedwig.info/">Martin</a>, <a title="Gustavo Noronha" href="http://blog.kov.eti.br/">Gustavo</a> and <a title="Chris Fleizach" href="http://chris.fleizach.com/">Chris</a>. I wouldn&rsquo;t be writing this post otherwise.</p>
<p>Thanks!</p>
]]></content:encoded></item><item><title>I'm going to GUADEC!</title><link>https://mariospr.org/2013/07/12/im-going-to-guadec/</link><pubDate>Fri, 12 Jul 2013 19:06:22 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=1559</guid><description>&lt;p&gt;&lt;a href="https://mariospr.org/2013/07/12/im-going-to-guadec/guadec2013/" rel="attachment wp-att-1560"&gt;&lt;img class="alignright size-full wp-image-1560" alt="I'm attending GUADEC" src="https://mariospr.org/wp-content/uploads/2013/07/guadec2013.png" width="125" height="125" /&gt;&lt;/a&gt;One year again &lt;a title="GUADEC" href="http://www.guadec.org"&gt;GUADEC&lt;/a&gt; is approaching and, also again, I&amp;rsquo;m very happy to say that I&amp;rsquo;ll be there as well this time, even if I have to recognize it was not on my plans for this year, at least not initially.&lt;/p&gt;
&lt;p&gt;And the reason why it was not initially in my plans was mainly because I&amp;rsquo;ve been already through quite &lt;a title="Moving on" href="https://mariospr.org/2012/11/19/moving-on/"&gt;some&lt;/a&gt; &lt;a title="My first week at SERI" href="https://mariospr.org/2013/01/12/my-first-week-at-seri/"&gt;changes&lt;/a&gt; during these past months year, and my family just came over to the &lt;a title="United Kingdom" href="http://en.wikipedia.org/wiki/United_Kingdom"&gt;UK&lt;/a&gt; two months ago. This means that, even I already arrived by the beginning of the year, we just started to settle here as a family a few weeks ago. So in that context, I didn&amp;rsquo;t feel like leaving them alone for one week already now, it definitely would look like a &amp;ldquo;wrong management of priorities&amp;rdquo; to me.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="/2013/07/12/im-going-to-guadec/guadec2013/" rel="attachment wp-att-1560"><img class="alignright size-full wp-image-1560" alt="I'm attending GUADEC" src="/wp-content/uploads/2013/07/guadec2013.png" width="125" height="125" /></a>One year again <a title="GUADEC" href="http://www.guadec.org">GUADEC</a> is approaching and, also again, I&rsquo;m very happy to say that I&rsquo;ll be there as well this time, even if I have to recognize it was not on my plans for this year, at least not initially.</p>
<p>And the reason why it was not initially in my plans was mainly because I&rsquo;ve been already through quite <a title="Moving on" href="/2012/11/19/moving-on/">some</a> <a title="My first week at SERI" href="/2013/01/12/my-first-week-at-seri/">changes</a> during these past months year, and my family just came over to the <a title="United Kingdom" href="http://en.wikipedia.org/wiki/United_Kingdom">UK</a> two months ago. This means that, even I already arrived by the beginning of the year, we just started to settle here as a family a few weeks ago. So in that context, I didn&rsquo;t feel like leaving them alone for one week already now, it definitely would look like a &ldquo;wrong management of priorities&rdquo; to me.</p>
<p>However, it turns out that my wife and kids won&rsquo;t be here anyway during the first week of August and, on top of that, <a title="Samsung" href="http://www.samsung.com">Samsung</a> has been so kind to sponsor this trip just based on the simple fact that I&rsquo;m part of the <a title="The GNOME Project" href="http://www.gnome.org">GNOME</a> community. So, I certainly can no longer find a single reason not to go and spend 7 amazing days in <a title="Brno, Czech Republic" href="http://en.wikipedia.org/wiki/Brno">Brno</a>, meeting people that I normally see only in conferences (and this time that group of people will be bigger than ever, since my former mates from <a title="Igalia" href="http://www.igalia.com">Igalia</a> are now also included there), while attending to what it seems to be <a title="GUADEC Schedule" href="https://www.guadec.org/schedule/">a very appealing event</a>.</p>
<p>Also, I will try to make the most of the trip to do some work during the different hackfests and <a title="GUADEC BoFs" href="https://wiki.gnome.org/GUADEC/2013/BOFs">BoFs that are already planned</a>, which special focus in the one about <a title="Computer accessibility" href="http://en.wikipedia.org/wiki/Computer_accessibility">accessibility</a>, of course. As a personal goal, I expect to have the chance to move forward some work I&rsquo;ve been doing lately in the <a title="WebKitGTK+" href="http://www.webkitgtk.org">WebKitGTK+</a> a11y world, such as <a title="[GTK] Metabug: Get rid of Pango/Gail dependencies in accessibility for ATK" href="https://bugs.webkit.org/show_bug.cgi?id=114867">getting rid of the nasty dependency</a> on <a title="Pango" href="https://git.gnome.org/browse/pango">Pango</a>/<a title="GTK+ Accessibility Implementation Layer" href="https://git.gnome.org/browse/libgail-gnome/">Gail</a> we still have there, something I&rsquo;ve been already working on for some time now, and which I expect it will be fixed soon, hopefully before <a title="GUADEC" href="http://www.guadec.org">GUADEC</a>, although time will tell.</p>
<p>Once that it&rsquo;s fixed, <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/index.html">WebKit2GTK+</a> based apps should recover the ability to properly expose text through the <a title="AtkText interface" href="https://developer.gnome.org/atk/unstable/AtkText.html"><em>atk_text_get_text_*_offset()</em></a> family of functions for different <a title="AtkText boundaries" href="https://developer.gnome.org/atk/unstable/AtkText.html#AtkTextBoundary">text boundaries</a>, which means that <em><a href="http://en.wikipedia.org/wiki/Assistive_technology" rel="nofollow">ATs</a></em> (e.g. the <a href="https://live.gnome.org/Orca" rel="nofollow">Orca</a> screen reader)  will be able to properly allow again line-by-line navigation when in caret browsing mode. And, as you can imagine, this is quite a big problem these days, since <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/index.html">WebKit2GTK+</a> that has become the default backend for some core apps such as the <a title="The Epiphany Browser" href="https://projects.gnome.org/epiphany/">Epiphany browser</a> with the <a title="The GNOME Project" href="http://www.gnome.org">GNOME</a> <a title="GNOME 3.8 release notes" href="https://help.gnome.org/misc/release-notes/3.8/">3.8 release</a>, so fixing this is like a high priority now, I&rsquo;d say.</p>
<p><a href="/2013/07/12/im-going-to-guadec/logo/" rel="attachment wp-att-1567"><img class="alignright size-full wp-image-1567" alt="Samsung Logo" src="/wp-content/uploads/2013/07/logo.png" width="106" height="35" /></a>Anyway, I&rsquo;m starting to write too much (as usual) for what it was going to be a short &ldquo;I&rsquo;m going to <a title="GUADEC" href="http://www.guadec.org">GUADEC</a>&rdquo; blog post, so I will stop right now, although not without first thanking <a title="Samsung" href="http://www.samsung.com">Samsung</a> for sponsoring this my first trip to the <a title="Czech Republic" href="http://en.wikipedia.org/wiki/Czech_Republic">Czech Republic</a>.</p>
<p>See you all in three weeks!</p>
]]></content:encoded></item><item><title>WebKit Contributors Meeting 2013</title><link>https://mariospr.org/2013/05/03/webkit-contributors-meeting-2013/</link><pubDate>Fri, 03 May 2013 17:34:00 +0000</pubDate><guid isPermaLink="false">https://mariospr.org/?p=1541</guid><description>&lt;p&gt;It turns out I&amp;rsquo;m writing this post at 6:00 AM in the morning from a hotel instead of doing it at a more reasonable time from my comfy home or a nice cafeteria. That&amp;rsquo;s already quite a new thing by itself, and the reason for that is not that I became crazy or something, but the fact that I&amp;rsquo;m completely jet-lagged in California right now in order to attend my second &lt;a title="WebKit Contributors Meeting" href="http://trac.webkit.org/wiki/May%202013%20Meeting"&gt;WebKit Contributors Meeting&lt;/a&gt; (&lt;a title="Attending the WebKit Contributors Meeting 2011" href="https://mariospr.org/2011/05/05/webkit-contributors-meeting-sockets-plugs/"&gt;my first time was in 2011&lt;/a&gt;), this time as part of the &lt;a title="Samsung UK" href="http://www.samsung.com/uk"&gt;Samsung&lt;/a&gt; team in the UK R&amp;amp;D center, together with my mate &lt;a title="Anton Obzhirov" href="http://uk.linkedin.com/pub/anton-obzhirov/4/256/876"&gt;Anton Obzhirov&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It turns out I&rsquo;m writing this post at 6:00 AM in the morning from a hotel instead of doing it at a more reasonable time from my comfy home or a nice cafeteria. That&rsquo;s already quite a new thing by itself, and the reason for that is not that I became crazy or something, but the fact that I&rsquo;m completely jet-lagged in California right now in order to attend my second <a title="WebKit Contributors Meeting" href="http://trac.webkit.org/wiki/May%202013%20Meeting">WebKit Contributors Meeting</a> (<a title="Attending the WebKit Contributors Meeting 2011" href="/2011/05/05/webkit-contributors-meeting-sockets-plugs/">my first time was in 2011</a>), this time as part of the <a title="Samsung UK" href="http://www.samsung.com/uk">Samsung</a> team in the UK R&amp;D center, together with my mate <a title="Anton Obzhirov" href="http://uk.linkedin.com/pub/anton-obzhirov/4/256/876">Anton Obzhirov</a>.</p>
<p>With regard to that, it has been a very interesting experience so far where I could meet new people I still haven&rsquo;t had the chance to see in real life yet (e.g. my mates from other <a title="Samsung UK" href="http://www.samsung.com/uk">Samsung</a> R&amp;D centers or some guys from <a href="http://www.apple.com">Apple</a> I didn&rsquo;t have the chance to meet in person before), as well as chat again with some friends and former mates that I haven&rsquo;t seen for a while, such as <a title="Martin's blog" href="http://abandonedwig.info/">Martin</a>, <a title="Xan's blog" href="http://blogs.gnome.org/xan/">Xan</a> and <a title="Philippe's blog" href="http://base-art.net/">Philippe</a> from <a title="Igalia" href="http://www.igalia.com">Igalia</a>, <a title="Byungseon" href="http://www.linkedin.com/profile/view?id=94380850">Byungseon</a> from <a href="http://www.lge.com">LG</a>, <a title="Nayan's blog" href="http://xc0ffee.wordpress.com/">Nayan</a> from <a href="http://www.motorola.com">Motorola</a> or <a title="Gustavo's blog" href="http://blog.kov.eti.br/">Gustavo</a> from <a title="Collabora" href="http://www.collabora.co.uk">Collabora</a> to mention some of them. It&rsquo;s strange, and at the same time wonderful, how easily you can catch up on conversations with people that you barely see once a year (or even less) and mainly in conferences, and definitely one of my favourite parts of attending these kind of events, to be honest.</p>
<p>Also, from a less social point of view, I have to say I found very interesting the sessions I&rsquo;ve attended so far, specially the one about &ldquo;managing the differences between ports&rdquo;, although the one about &ldquo;build systems&rdquo; was quite interesting too. Not sure how far we are yet in the <a href="http://www.webkitgtk.org">WebKitGTK+</a> port from realistically switching to some kind of commonly agreed build system (<a href="http://www.cmake.org">cmake</a>?), but at least it&rsquo;s a good start to agree on the fact that it would be an interesting move and now that some people pushing for it.</p>
<p>My only regret about this first day is that I missed <a title="Dave Hyatt" href="http://en.wikipedia.org/wiki/Dave_Hyatt">Hyatt</a>&rsquo;s talk about pagination due to some health issues I&rsquo;m experimenting while in California, mostly due to the extremely hot and dry weather (anything over 25 Celsius is &ldquo;unbearable hot&rdquo; for me), which is causing me a little bit of cough, sore throat and fever, all well mixed with the jet lag to make it a perfect &ldquo;welcome pack&rdquo; to the meeting. Fortunately, I got some &ldquo;interesting&rdquo; medicines that seem to have relieved a bit the pain and I could attend the rest of the sessions without much trouble, other than some occasional coughing. Not bad.</p>
<p>By the way, for those of you who were not lucky enough to attend the meeting but are anyway interested in the topics being discussed here, make sure you check the <a title="WebKit Contributors Meeting 2013" href="http://trac.webkit.org/wiki/May%202013%20Meeting">main TRAC page for the meeting</a>, where you can also find transcripts for most of the sessions.</p>
<p>As for today, some more sessions will take place as well as a couple of hackathons so I expect it to be very interesting as well. Also I hope I can find some time too to work a bit on my patches to remove the nasty dependency on pango we have in <a href="http://www.webkitgtk.org">WebKitGTK+</a> accessibility code, which is preventing us to have proper caret navigation in <a title="WebKit2GTK+" href="http://webkitgtk.org/reference/webkit2gtk/unstable/index.html">WebKit2GTK+</a> based browsers, as well as to discuss possible ways in which our lab could collaborate more actively upstream. Seems a promising day already!</p>
<p>Last (but not least), and in a completely unrelated and super-off-topic way, I would like to tell the world that I&rsquo;m <strong>extremely happy</strong> for the fact that next week will be the end of my &ldquo;lonely existence in the UK&rdquo;, finally. After 4 months of living away from my family with just some flash trips from Friday to Sunday (every 2 weeks), I&rsquo;m once and for all travelling on Thursday to my home town with a one way plane ticket to do some final arrangements, put everything (family included!) in the car and travel to <a title="Santander" href="http://en.wikipedia.org/wiki/Santander,_Spain">Santander</a>, where we&rsquo;ll be taking a ferry that will take us to the <a title="Portsmouth" href="http://en.wikipedia.org/wiki/Portsmouth">Portsmouth</a> (southern coast of England), from where we will just drive to the UK in order to start our new life, all together again.</p>
<p>It has been quite hard for us to live this way for so long, but I think in the end we managed to handle the situation quite well, and now it seems all our efforts are already paying off because things seem to be finally fitting in the right places: we have a lovely house, we have a place in a nearby public school for my oldest kid to start on September, most of the needed paperwork seems to be done and we already moved all our stuff from Spain (lots of toys!), which is now waiting to be used in our new place.</p>
<p>I really can&rsquo;t wait to live again in the noisy and chaotic atmosphere that two kids can so easily create around them. Even if that means it will probably drive me crazy every now and then and that I won&rsquo;t sleep that well sometimes.</p>
<p>Yes. Even considering that.</p>
]]></content:encoded></item></channel></rss>