<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GSoC on KDE Blogs</title><link>https://blogs.kde.org/categories/gsoc/</link><description>Recent content in GSoC on KDE Blogs</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 25 Aug 2026 22:42:32 +0530</lastBuildDate><atom:link href="https://blogs.kde.org/categories/gsoc/index.xml" rel="self" type="application/rss+xml"/><item><title>Redesigning Lokalize's Translation Memory Tab - GSoC Week 9</title><link>https://blogs.kde.org/2026/08/25/week9-gsoc-blog/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><author>Navya Sai Sadu</author><guid>https://blogs.kde.org/2026/08/25/week9-gsoc-blog/</guid><description>&lt;p&gt;After working on the UI of TM Tab in Lokalize during the first phase of GSoC, I got back to work on the backend. Currently, only a single TM can be searched in TM Tab. My changes enable querying across multiple selected TMs as per translators' feature request.&lt;/p&gt;
&lt;p&gt;A little about threads and mutexes before I share week-wise updates. The GUI runs on the main thread, while TM operations (querying, opening/closing databases, removing files) run as jobs on a separate worker thread pool, &lt;code&gt;TM::threadPool()&lt;/code&gt;. This pool is explicitly capped to a single worker thread at startup- &lt;code&gt;setMaxThreadCount(1)&lt;/code&gt;. This means TM jobs never actually run concurrently with each other, they queue and execute strictly one at a time (this can be changed given my new changes but will have to be careful).&lt;/p&gt;
&lt;p&gt;QSqlDatabase connections can only be used on the thread that created them, which is why each job looks up or clones a connection specific to the current thread before querying.&lt;/p&gt;
&lt;p&gt;A queued connection is what lets a signal emitted on the worker thread safely invoke a slot on the GUI thread: rather than running the slot's code immediately on the emitting thread.&lt;/p&gt;
&lt;p&gt;A mutex protects shared or concurrently-accessed data.&lt;/p&gt;
&lt;h2 id="week-7"&gt;Week 7&lt;/h2&gt;
&lt;p&gt;I spent week 7 exploring other approaches for quering multiple DBs and merging the results. &lt;a href="https://doc.qt.io/qt-6/qsqlquerymodel.html#details"&gt;QSqlQueryModel&lt;/a&gt; is only useful to get query results from a single db. It just enabled &lt;code&gt;std::move(*job-&amp;gt;query)&lt;/code&gt; and there was no way to append results from other TMs.&lt;/p&gt;
&lt;p&gt;I felt that my proposed approach, to fire N ExecQueryJobs, merge them in an in-memory SQLite db, and then pass it on to the view, was making things unnecessarily complex and somewhat redundant. I'm sharing the discarded ideas as well in case it helps someone in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://stackoverflow.com/questions/6824717/sqlite-how-do-you-join-tables-from-different-databases"&gt;ATTACH&lt;/a&gt; to add other db(s) and perform UNION on the search query. There were some concerns over the complexity of ATTACH and also Lokalize supports remote TMs (PostgreSQL) which doesn't have the provision of ATTACH.&lt;/li&gt;
&lt;li&gt;Then, I looked into &lt;code&gt;QConcatenateTablesProxyModel&lt;/code&gt; which some KDE apps already use, but there is some bug with its working with &lt;code&gt;QSortFilterProxyModel&lt;/code&gt;. I could have had &amp;quot;N TMDBModel instances&amp;quot; (which doesn't seem like a good idea) for each TM and later join them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="week-8"&gt;Week 8&lt;/h2&gt;
&lt;p&gt;I decided upon &lt;code&gt;QAbstractTableModel&lt;/code&gt;. Unlike &lt;code&gt;QSqlQueryModel&lt;/code&gt; (which is a subclass of it), it's more flexible and I had to refactor some of the code. This also meant lazy fetch couldn't be preserved and the results would be stored in &lt;code&gt;QSqlRecords&lt;/code&gt; (to preserve all the existing usage on results).&lt;/p&gt;
&lt;p&gt;Manually tested against a single TM. Rewrote the TMJob Test too. I find it strange that we always write a test for it to pass. Also from one of the &lt;a href="https://medium.com/@mlntdrv/about-them-automated-tests-d4300a59e870"&gt;articles&lt;/a&gt; I read: &amp;quot;Use test driven development. When you write the test just before the production code, you would never write a monster test, would you?&amp;quot;&lt;/p&gt;
&lt;h2 id="week-9"&gt;Week 9&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;setFilter()&lt;/code&gt; is modified such that &lt;code&gt;ExecQueryJob&lt;/code&gt; is fired for each TM. &lt;code&gt;slotQueryExecuted()&lt;/code&gt; accumulates each job's rows into the model as they arrive, and only fires &lt;code&gt;resultsFetched()&lt;/code&gt; once every selected TM's job has reported back. Row count is also reported directly at the end.&lt;/p&gt;
&lt;p&gt;Well, contrary to what I wrote in the last blog, I did end up with an approach quite similar to what TMView does. Are mentors always right?&lt;/p&gt;
&lt;p&gt;The part on which I spent a lot of time was what happens if someone retypes their query, or checks/unchecks a TM, while the previous search's jobs are still mid-flight. Stale results shouldn't be allowed to land on top of a newer search's rows. The fix is a generation counter to keep track.&lt;/p&gt;
&lt;p&gt;After a lot of coding and debugging, seeing the resuts from multiple TMs made the entire hard work finally pay off.&lt;/p&gt;
&lt;p&gt;While testing, the bug mentioned in the previous blog kept pestering me so I fixed it too. I was so fixated on empty/short string that I did not think that the place it was being used could be a problem. It's nice to see the Art of Debugging materialize out of pages of Roger S. Pressman's &lt;a href="https://books.google.co.in/books/about/Software_Engineering.html?id=5fiKo3qfiKYC"&gt;textbook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'll begin to work on TM View once these changes are reviewed and merged.&lt;/p&gt;</description></item><item><title>GSoC 2026: Building Join.Kde.Org</title><link>https://blogs.kde.org/2026/08/22/gsoc-2026-building-join.kde.org/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><author>Ansh Singhal</author><guid>https://blogs.kde.org/2026/08/22/gsoc-2026-building-join.kde.org/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Helloooooo,&lt;br&gt;
it’s me again, Ansh! , the mentee who has been working on the Join.kde.org&lt;br&gt;
This is the final update within the official timeline of GSoC 2026 for my project: &lt;strong&gt;Building Join.KDE.org&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A quick summary:&lt;br&gt;
Over the past 12 weeks, I have worked on creating, designing and implementing the join.kde site into a platform that can answer most of the basic questions a new contributor has. In this post, I’ll mainly focus on the progress from Week 6 to Week 12 along with my final thoughts.&lt;/p&gt;
&lt;p&gt;For a short summary, checkout this &lt;a href="https://community.kde.org/GSoC/2026/StatusReports/Ansh_Singhal"&gt;status report&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-6-contributesuggest"&gt;Week 6: Contribute/suggest&lt;/h3&gt;
&lt;p&gt;This week I worked on the ADD section which got renamed to contribute,
it includes several sub sections which allows people to contribute based on their interests.&lt;/p&gt;
&lt;p&gt;Routed the explore section to KDE.org for you section so people can explore and find their own use for KDE softwares.&lt;/p&gt;
&lt;p&gt;Created the suggest section which contains the information on how to report bugs/request for features.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-7-navbar"&gt;Week 7: Navbar&lt;/h3&gt;
&lt;p&gt;This week was more about improvements on the navbar, I noticed with all the text the nav-bar looked way too cluttered, and simply overwhelming
so with the advice from Anish and how he changed the navbar for the mentorship website, I worked up something similar and made dropdowns for the navbar so it can still have more content when clicked.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-8-work-on-projects"&gt;Week 8: Work on Projects&lt;/h3&gt;
&lt;p&gt;For this week I worked on the work on projects section which allows people to find groups of projects in invent based on skillset or the programming languages one knows.&lt;/p&gt;
&lt;p&gt;I added all the groups available in KDE invent in this section which little tags of skillset.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-9-incubate-projects"&gt;Week 9: Incubate projects&lt;/h3&gt;
&lt;p&gt;Worked on designing Incubate projects section: which basically explains what kind of projects fit in KDE and what are the benifits of it.
Linked it through a call-to-action button to the relevant resources to incubate project into KDE.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-10-read-page-suggest-page-improvement"&gt;Week 10: read page/ suggest page improvement&lt;/h3&gt;
&lt;p&gt;Designed the read page with 3 main blog sites&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;planet&lt;/li&gt;
&lt;li&gt;contributor blogs&lt;/li&gt;
&lt;li&gt;mentorship blogs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This week was something new, the cards for the read page were simple but the new design of dropdown in suggest page took some time figuring out.
added konqi images to the cards because duh it's konqi (but hey we can change them eventually).&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-11-divulge-page"&gt;Week 11: Divulge Page&lt;/h3&gt;
&lt;p&gt;Created the Divulge page which is more for people who want to create content for kde whether it be promo material, tutorials or whether help in promotion itself.&lt;/p&gt;
&lt;p&gt;It's kind of a copy of the read page but it can always be changed.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="week-12-events-page"&gt;Week 12: Events Page&lt;/h3&gt;
&lt;p&gt;Created the Events page, which included akademy as the main event and then a section for event's KDE hosts which had some sprints and conf.in
and then added the section for the events KDE participates in which will likely be expanded eventually.&lt;/p&gt;
&lt;p&gt;Fixed some tiny typos and dead link issues.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="related-merge-requests"&gt;Related Merge Requests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/12"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/13"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/14"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/15"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/16"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/17"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invent.kde.org/paulb/join-kde-org/-/merge_requests/18"&gt;https://invent.kde.org/paulb/join-kde-org/-/merge_requests/18&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="my-own-development"&gt;My Own Development&lt;/h2&gt;
&lt;p&gt;I learned a lot from this project, both in coding and beyond. Here are the things I remember right now, though the list could go longer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now I am very comfortable with &lt;strong&gt;Hugo&lt;/strong&gt;, semantic maps, and YAML files&lt;/li&gt;
&lt;li&gt;Finally learned how to deal with &lt;strong&gt;SVGs&lt;/strong&gt; (was my first time working with them)&lt;/li&gt;
&lt;li&gt;My &lt;strong&gt;frontend skills improved&lt;/strong&gt;, I think I can design better pages now&lt;/li&gt;
&lt;li&gt;I now want to create more stuff that helps people!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Overall, GSoC 2026 has been a great experience for me. Over these 12 weeks I got the chance to work on issues that i faced myself and fix them in a way that helps everyone joining KDE.&lt;/p&gt;
&lt;p&gt;Along the way I learned some technical skills, learned how to work across different timezones, to communicate better, and most importantly realized that long discussions are often more necessary than jumping straight into implementation, especially in open source communities.&lt;/p&gt;
&lt;p&gt;Big thanks to my mentors Anish and umm Conulting mentor Paul&lt;/p&gt;
&lt;p&gt;This wraps up my GSoC journey, but I will be sticking around KDE and plan to explore other projects, especially in the mentorship side of things. See you around in the community.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="how-to-reach-me"&gt;How to Reach Me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KDE GitLab: &lt;a href="https://invent.kde.org/anshs-lab"&gt;@anshs-lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matrix: &lt;a href="https://matrix.to/#/@anshs-lab:matrix.org"&gt;@anshs-lab:matrix.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:anshsinghal1907@gmail.com"&gt;anshsinghal1907@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GSoC Alumni Camp Delhi 2026</title><link>https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/</link><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><author>Ansh Singhal</author><guid>https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/</guid><description>&lt;h1 id="gsoc-alumni-camp-delhi-2026--my-experience"&gt;GSoC Alumni Camp Delhi 2026 – My Experience&lt;/h1&gt;
&lt;p&gt;I attended the GSoC Alumni Camp in Delhi, it was an amazing opportunity to make people who are already familiar with open source aware of KDE Community
and I was actually able to do that. The event itself was from 8:00 A.M. to 10:30 P.M. at night.
The event started off with a formal opening session.
Soon after was the scavenger hunt (we were hunting people!)
it was a 5x5 grid where you needed to get signatures of people who fit the question in the box.
A few of them were :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I was born in July (I signed a lot of them )&lt;/li&gt;
&lt;li&gt;I have held a koala&lt;/li&gt;
&lt;li&gt;I know 3+ languages&lt;/li&gt;
&lt;li&gt;I can juggle&lt;/li&gt;
&lt;li&gt;I prefer go/Rust
and so on.
In all honesty it was an amazing ice breaker and something to get to know people.
After that there were a few unconferences followed by lunch and then more unconferences till 6:00 P.M. after that lightning talk sessions started and fortunately I got to represent KDE.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="unconference-session--from-gsoc-student-to-maintainermentor"&gt;Unconference Session – From GSoC Student to Maintainer/Mentor&lt;/h2&gt;
&lt;p&gt;I also hosted one of the first unconference sessions titled:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;From GSoC Student to Maintainer/Mentor&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I wasn't expecting a large audience, but at one point the room was at its capacity &lt;strong&gt;around 40 attendees&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The audience included:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GSoC Organization Administrators&lt;/li&gt;
&lt;li&gt;Mentors&lt;/li&gt;
&lt;li&gt;Open source employees&lt;/li&gt;
&lt;li&gt;Existing contributors&lt;/li&gt;
&lt;li&gt;Google code-in students&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The discussion focused on contributor retention after GSoC and how organizations can better support contributors beyond the program.
It led to some interesting discussions where we found out what some organisations are doing.&lt;/p&gt;
&lt;h2 id="discussion-points-noted-by-an-org-admin"&gt;Discussion Points (Noted by an org admin)&lt;/h2&gt;
&lt;h3 id="leverage-contributors-as-subject-matter-experts"&gt;Leverage Contributors as Subject Matter Experts&lt;/h3&gt;
&lt;p&gt;GSoC contributors naturally become subject matter experts for the components they build. When new issues, bug reports, or pull requests relate to their work, proactively invite them to participate in the discussion or review. This helps contributors feel that their expertise is valued and keeps them engaged with the project beyond GSoC.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="improve-communication-around-pull-request-reviews"&gt;Improve Communication Around Pull Request Reviews&lt;/h3&gt;
&lt;p&gt;Complex pull requests often require focused reviews and may take longer than isolated bug fixes. While taking the necessary time for a thorough review is important, mentors should acknowledge review requests and, where possible, communicate an expected timeline. Even a brief acknowledgment improves the contributor experience.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="using-organization-stipends-for-contributor-retention"&gt;Using Organization Stipends for Contributor Retention&lt;/h3&gt;
&lt;p&gt;Explore using the GSoC organization stipend to support promising contributors after the program ends. This could fund continued maintenance or feature development through a transparent platform such as Open Collective, allowing contributors to invoice for their work and remain actively involved with the project.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="recognizing-mentor-contributions"&gt;Recognizing Mentor Contributions&lt;/h3&gt;
&lt;p&gt;Mentoring requires a significant investment of time in reviewing code, guiding contributors, and providing technical support. Consider allocating a portion of the organization stipend to compensate mentors, recognizing their efforts and encouraging long-term participation.&lt;/p&gt;
&lt;h2 id="kdes-community-support"&gt;KDE's Community Support&lt;/h2&gt;
&lt;p&gt;Another topic that generated considerable interest was KDE's support for its contributors.&lt;/p&gt;
&lt;p&gt;I talked about how KDE sponsors some students to attend Akademy, and how I was also sponsored to attend the event, which a lot of people agreed organizations should've done (some did, a lot didn't) but a lot of people agreed that when an organization consider these things contributors stay.&lt;/p&gt;
&lt;p&gt;After all the unconferences ended a lot of people came up to me saying mine was the best and I managed and engaged everyone in the best way possible ( I was on cloud 9).&lt;/p&gt;
&lt;h2 id="lightning-talk"&gt;Lightning Talk&lt;/h2&gt;
&lt;p&gt;One of the highlights was being selected to give a lightning talk. Only &lt;strong&gt;18 participants&lt;/strong&gt; were chosen, and I was one of them.&lt;/p&gt;
&lt;p&gt;My GSoC project &lt;strong&gt;Join KDE&lt;/strong&gt; is an advertisement for KDE itself, so the project itself became an easy conversation starter. It was a great opportunity to introduce KDE and make more people aware of the organization.&lt;/p&gt;
&lt;p&gt;Although I did fumble the last part of my presentation it was more of me being confused where my slide went (some slides were misplaced) aside from that it went as any other informative talk but hey I was funny on the stage (refer to the pics) so people remember me! You win some you lose some, oh well.&lt;/p&gt;
&lt;h2 id="conversations-throughout-the-event"&gt;Conversations Throughout the Event&lt;/h2&gt;
&lt;p&gt;Outside the sessions, I had some interesting discussions with contributors from different organizations. Some contributors showed interest in working wwith us while some showed interest in our eduction/science side but honestly it's hard to bring contributors over as they're in different domains, org admins/mentors or they're busy with their careers.&lt;/p&gt;
&lt;h3 id="su2-foundation"&gt;SU2 Foundation&lt;/h3&gt;
&lt;p&gt;I had a conversation with a maintainer from the &lt;strong&gt;SU2 Foundation&lt;/strong&gt;, whose work focuses on computational fluid dynamics.&lt;/p&gt;
&lt;p&gt;We discussed KDE's scientific and educational initiatives, including KDE for Scientists and several education-related projects. I also shared the &lt;strong&gt;KDE For You&lt;/strong&gt; website as an introduction to the wider KDE ecosystem.&lt;/p&gt;
&lt;h2 id="after-party"&gt;After Party&lt;/h2&gt;
&lt;p&gt;The conversations continued during the after-party on the following day.&lt;/p&gt;
&lt;p&gt;I met a group of students who had become interested in open source after interacting with contributors throughout the event. They had originally attended as friends of another contributor.&lt;/p&gt;
&lt;p&gt;One of them is now actively looking for a project to begin contributing to within KDE. YAYYY!&lt;/p&gt;
&lt;h3 id="new-contributors"&gt;New Contributors&lt;/h3&gt;
&lt;p&gt;Several first-time contributors approached me asking about projects suitable for beginners.&lt;/p&gt;
&lt;p&gt;I introduced them to a number of KDE projects and explained possible contribution paths.&lt;/p&gt;
&lt;p&gt;But the same issue they're busy with the beginning of their careers.&lt;/p&gt;
&lt;h2 id="overall-thoughts"&gt;Overall Thoughts&lt;/h2&gt;
&lt;p&gt;The Alumni Camp was one of the best ways to make people aware of KDE and I tried my best while i had fun ( we played uno there! Will bill the cards to the organization jkjk), a lot of people seemed intrigued and asked me to share some stuff about KDE to them or they'll try it on their own. Met someone from GNOME (they didn't get any lightning talk HA! I know, I know no inter project fighting that's bad) had some good conversations, teased the person from GNOME, had breakfast with them, and tried to make the most of the unconference session and the lightning talks to at least get people to know the name KDE!&lt;/p&gt;
&lt;h2 id="event-gallery"&gt;Event Gallery&lt;/h2&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Solo Photo" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/first.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="cakes" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/second.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Gifts" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/third.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Group photo" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/fourth.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="after party" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/fifth.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Lightning talks" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/sixth.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="card" src="https://blogs.kde.org/2026/07/29/gsoc-alumni-camp-delhi-2026/seventh.jpeg"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;</description></item><item><title>Redesigning Lokalize's Translation Memory Tab - Mid-GSoC</title><link>https://blogs.kde.org/2026/07/13/mid-gsoc-blog/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><author>Navya Sai Sadu</author><guid>https://blogs.kde.org/2026/07/13/mid-gsoc-blog/</guid><description>&lt;p&gt;The past three weeks were a mix of cleanup, debugging, completing the work concerning UI and understanding &lt;em&gt;TMView&lt;/em&gt;( since I did not look into it during proposal period) and &lt;em&gt;TMTab&lt;/em&gt; again to review my design choices and see if I'm going in the right direction.&lt;/p&gt;
&lt;h2 id="cleaning-up-tmmanager-and-getting-checkboxes-working"&gt;Cleaning up TMManager and getting checkboxes working&lt;/h2&gt;
&lt;p&gt;First up was cleaning &lt;code&gt;TMManagerWin&lt;/code&gt;, reformatting, removing now obsolete references and code. With that done, I resumed work on the per-project TM selection checkboxes.&lt;/p&gt;
&lt;p&gt;The checkboxes are backed directly by DBFilesModel rather than a separate proxy layer. Overriding &lt;code&gt;flags()&lt;/code&gt;, &lt;code&gt;data()&lt;/code&gt;, and &lt;code&gt;setData()&lt;/code&gt; on the existing model was the way to go. Qt's view renders the checkboxes automatically once &lt;code&gt;Qt::ItemIsUserCheckable&lt;/code&gt; is set and &lt;code&gt;Qt::CheckStateRole&lt;/code&gt; returns a value. Check state persists to &lt;code&gt;ProjectLocal::selectedTMs()&lt;/code&gt; immediately on every toggle via &lt;code&gt;saveCheckedState()&lt;/code&gt;, and reloads on project open via a &lt;code&gt;Project::loaded&lt;/code&gt; connection.&lt;/p&gt;
&lt;p&gt;One non-obvious issue I stumbled into and fixed myself was &lt;code&gt;cleanupSelectedTMs()&lt;/code&gt;, which removes stale entries for TMs that no longer exist on disk, was being called immediately when &lt;code&gt;Project::loaded&lt;/code&gt; fired. But &lt;em&gt;DBFilesModel&lt;/em&gt; populates asynchronously via &lt;em&gt;QFileSystemModel&lt;/em&gt; scanning the TM directory. The fix was deferring &lt;code&gt;cleanupSelectedTMs()&lt;/code&gt; using &lt;code&gt;QTimer::singleShot()&lt;/code&gt;, the same pattern used elsewhere in the codebase for async model population. &lt;code&gt;loadCheckedState()&lt;/code&gt; itself runs immediately since it only reads from config and doesn't need the model to be populated. This was a subtle timing issue that only surfaced when testing with an actual project and multiple TM databases. In fact, &lt;code&gt;cleanupSelectedTMs()&lt;/code&gt; itself wasn't thought of when planning.&lt;/p&gt;
&lt;p&gt;After testing this end-to-end and verifying the &lt;em&gt;.local&lt;/em&gt; config file was being written and read correctly, I merged this in.&lt;/p&gt;
&lt;h2 id="studying-tmviews-querying-and-why-it-cant-help-tmtab"&gt;Studying TMView's querying and why it can't help TMTab&lt;/h2&gt;
&lt;p&gt;Before touching TMTab's query logic, I spent time understanding how TMView (the suggestions dock widget in the editor) does its querying since my mentor suggested that it's querying might help designing something similar for TMTab's multi-TM quering.&lt;/p&gt;
&lt;p&gt;TMView uses &lt;em&gt;SelectJob&lt;/em&gt; which operates on &lt;em&gt;TMEntry&lt;/em&gt; structs, it does fuzzy word-level matching, scores results, and is designed specifically for the suggestions workflow. It fires secondary DB queries only when the primary project DB scores below a threshold.&lt;/p&gt;
&lt;p&gt;This is fundamentally different from what TMTab needs, it uses &lt;em&gt;ExecQueryJob&lt;/em&gt; which runs SQL query against a DB and hands the cursor to &lt;em&gt;QSqlQueryModel&lt;/em&gt;. The two systems aren't interchangeable, so the multi-DB approach for each has to be designed separately I guess. For TMView, the change is relatively small, loop &lt;code&gt;selectedTMs()&lt;/code&gt; and fire one SelectJob per DB. For TMTab, it might turn to be little complex.&lt;/p&gt;
&lt;h2 id="removing-the-dbname-combobox"&gt;Removing the dbName combobox&lt;/h2&gt;
&lt;p&gt;With the TM list in TMManagerWin now showing checkboxes for selection, the &lt;code&gt;dbName&lt;/code&gt; KComboBox in the search panel is redundant, users select which TMs to query via checkboxes, not a dropdown. I removed it from queryoptions.ui and cleaned up all references in tmtab.cpp, but some of them need workaround. The &lt;code&gt;openFile()&lt;/code&gt; (RemoveFileJob) gets a TODO, to be fixed properly once multi-DB results carry their source DB name.&lt;/p&gt;
&lt;h2 id="debugging-with-gdb-and-dr-konqi"&gt;Debugging with GDB and Dr Konqi&lt;/h2&gt;
&lt;p&gt;My mentor reported a crash when opening the QA dock widget in the TM tab. This was a good opportunity to learn proper debugging with GDB, Dr Konqi, and reading backtraces.&lt;/p&gt;
&lt;p&gt;After investigating, this appeared to be a preexisting bug unrelated to my changes. It's probably data-dependent and only triggers with specific content in the TM results view at the moment the QA dock repaints. It didn't reproduce on my machine. I might work on it later when I have time.&lt;/p&gt;
&lt;p&gt;The years old chats on QtForum and StackOverflow were helpful throughout. Qt itself is so well documented!&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="TM Tab Redesigned" src="https://blogs.kde.org/2026/07/13/mid-gsoc-blog/TMTabRedesign.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;I'm looking forward to see how translators would like the TMTab's glow up when the project is completed and all the changes get merged.&lt;/p&gt;</description></item><item><title>Redesigning Lokalize's Translation Memory Tab - GSoC Week 2 and 3</title><link>https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><author>Navya Sai Sadu</author><guid>https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/</guid><description>&lt;p&gt;The past two weeks went by fast. The learnings I gained while building the toy project I experimented around with Qt during Contribution Period are quite useful now. In the second week of GSoC, I ported the TM Manager from a separate dialogbox to TM Tab. It was done mainly for ease and with the reasoning that everything related to TMs can be in a single place. I kept most of the things as is. A lot of thought went into the UI Design.&lt;/p&gt;
&lt;p&gt;The TM Manager is currently a standalone window which is accesible from any tab.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="TM Manager Before" src="https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/tm_manager_before.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;The &amp;quot;Manage Translation Memories&amp;quot; option is already available in the Tools Menu and again in the ToolBar of TM Tab since it's specific to it.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Menu Options" src="https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/menu_options_before.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;After the changes, pressing F7 or &amp;quot;Translation Memory&amp;quot; option from Tools menu will directly lead to TM Manager too as it is set on the left of TM Tab with a QSplitter. I believe this takes away a little redundancy in the design. This change is also justified pertaing to the future changes regarding Multi-TM selection and quering.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="TM Manager After" src="https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/tm_tab_after.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;The buttons restrict resizing the splitter horizontally. Intially I put all the actions in a QToolButton as I thought putting them in a right-click context menu might render them undiscovered. But such menus were already being used in some other parts of the app( and obviously other KDE apps).&lt;/p&gt;
&lt;p&gt;From coding perspective, all I had to do was instantiate it in TM Tab instead. Since, it was no longer being used as a window( which would also have worked), it no longer inherits from KMainWindow. It used Grid Layout which I think is not exactly needed and just used a VBoxLayout for simplicity.&lt;/p&gt;
&lt;p&gt;The splitter state is saved and restored using existing methods.&lt;/p&gt;
&lt;p&gt;The obsolete references and methods for TM Manager are cleaned up.&lt;/p&gt;
&lt;p&gt;During Week 3, I added checkboxes to DBFilesModel for TM selection which will be used in querying later in TM View for suggestions, autofill etc. and TM Tab for search. In th beginning of the project, I proposed adding another proxy layer over DBFilesModel for the checkboxes to not to disturb other things. But for ease of work, consistent architecture( couldn't find multiple proxy layers being used in the codebase) and with the solace that it won't impact other methods using DBFilesModel for their specific purpose, I went ahead to add checkboxes directly to it.&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="Multi-TM Selection" src="https://blogs.kde.org/2026/06/20/week2-3-gsoc-blog/checkboxes.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;p&gt;This is a deviation from my GSoc Proposal wherein I proposed to replace Combo Box with a List Widget having entries with checkboxes for Multi-TM selection. Since there would be TM dbs on the left of the tab anyways, I thought of enabling selection there itself, than to have two places(TM Manager and the List Widget) listing all the TMs.&lt;/p&gt;
&lt;p&gt;Setting new flag for checking, showing checked state with &lt;code&gt;data()&lt;/code&gt; and storing selected TM names to a set is done. The checked state persistence is to be worked upon. This is where I got stuck. TM names were to be saved and loaded from global and local config based on user's selection but when my mentor reviewed that this complex setup probably is not the best, we reached back to translators who originally requested the feature.&lt;/p&gt;</description></item><item><title>Redesigning Lokalize's Translation Memory Tab - GSoC Week 1</title><link>https://blogs.kde.org/2026/05/31/week1-gsoc-blog/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><author>Navya Sai Sadu</author><guid>https://blogs.kde.org/2026/05/31/week1-gsoc-blog/</guid><description>&lt;p&gt;Hi! I'm Navya and am working on &lt;em&gt;Redesigning Lokalize's Translation Memory Tab&lt;/em&gt;. Lokalize was created during Google Summer of Code several years ago. This also implies that the conventions to be followed are quite old.&lt;/p&gt;
&lt;p&gt;The first week of GSoC was full of learnings and experiments as I had expected. There was no hassle of setting things up and all because I worked on Lokalize during Season of KDE. Things are going as per the plan and I am starting to gain momentum. The weeks ahead require more effort and time. I'm gonna share some of the knowledge gained and used as it might benefit me (to remember or come back to when needed) and other new contributors.&lt;/p&gt;
&lt;p&gt;The project essentially resolves the &lt;a href="https://bugs.kde.org/show_bug.cgi?id=497653"&gt;bug&lt;/a&gt; and integrates the separate TM Manager Window into the TM Tab for ease.&lt;/p&gt;
&lt;h2 id="kconfig"&gt;KConfig&lt;/h2&gt;
&lt;p&gt;KDE provides devs with KConfig classes to auto generate methods to use for app's configuration settings. This &lt;a href="https://develop.kde.org/docs/features/configuration/kconfig_xt/"&gt;site&lt;/a&gt; might also be of some help. Lokalize has &lt;em&gt;lokalize.kcfg&lt;/em&gt; for app-wide configuration and &lt;em&gt;projectbase.kcfg&lt;/em&gt; and &lt;em&gt;projectlocal.kcfg&lt;/em&gt; for project-specific configuration. The latter one appeared to me more apt for user's personal settings such as per-project selection of TMs. A new entry was added to &lt;em&gt;lokalize.kcfg&lt;/em&gt; for global default TMs.&lt;/p&gt;
&lt;p&gt;There are also &amp;quot;.kcfgc&amp;quot; files which apparently act as config for the config files. So, the property of the entry added can be controlled there. In my case, it was to have mutators so as to be able to change the selection of TMs.&lt;/p&gt;
&lt;p&gt;The setters and getters generated were used to write a method that returns a list of TMs to query across. These will also be used in the upcoming weeks when I finally create a UI for checking and selecting TMs.&lt;/p&gt;
&lt;h2 id="git"&gt;Git&lt;/h2&gt;
&lt;p&gt;I always get to know something new and cool in the git world while working. My mentor told that &lt;em&gt;master&lt;/em&gt; is like any other branch, it's just us that we treat it differently. I created a new branch to direct my &lt;a href="https://invent.kde.org/navyasai/lokalize/-/merge_requests/1"&gt;MRs&lt;/a&gt; there since it'll be a long time till everything is ready to be merged into upstream.&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;The example provided &lt;a href="https://doc.qt.io/qt-6/qtest-overview.html"&gt;here&lt;/a&gt; is a basic template which the rest of the tests present also follow. An article on the internet said that there's no point in writing tests for getters and setters (another discussion forum had - especially if those are auto generated) so I just took it as a chance to learn something new and get the hang of those methods.&lt;/p&gt;
&lt;p&gt;I wasted quite some time only to figure out that I need to run the test from the build dir instead.&lt;/p&gt;</description></item><item><title>GSoC: differences of expectations between students and organizations</title><link>https://blogs.kde.org/2026/01/28/gsoc-differences-of-expectations-between-students-and-organizations/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><author>Johnny Jazeix</author><guid>https://blogs.kde.org/2026/01/28/gsoc-differences-of-expectations-between-students-and-organizations/</guid><description>&lt;p&gt;I've been administering KDE's participation in the &lt;a href="https://summerofcode.withgoogle.com/"&gt;Google Summer of Code&lt;/a&gt; program for the last few years (and mentoring on some).
This post is just some personal thoughts on the differences between what the KDE organization expects and what &lt;em&gt;usually&lt;/em&gt; the applicants want (I'm not in everybody heads, it's assumptions from my experience). I don't provide any solution (because I don't have any) and there is no judgment (both point of views are valid), just a personal point of view.&lt;/p&gt;
&lt;h3 id="applicants-point-of-view"&gt;Applicants point of view&lt;/h3&gt;
&lt;p&gt;GSoC is a individual competitive program which can be a huge boost to start a career.
There are usually two major reasons for the applicants to participate in GSoC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the money.&lt;/li&gt;
&lt;li&gt;the experience and the line in the CV for real life work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is, for a lot of applicants, no genuine interest in the projects (at least at the beginning, the first interaction is often &amp;quot;I want to start contributing to KDE and prepare for GSoC&amp;quot;), and they mostly want a GSoC slot. Small digression, on one of my projects, two people already asked to contribute and if we were doing GSoC, but after telling them that contributions are welcomed and we will only propose a topic if we feel enough confidence that the contributor would stay after, they told us they preferred to choose another project.&lt;/p&gt;
&lt;p&gt;Contributors consider GSoC as an end of their studies, not a project they want to contribute after: there is also a change of life to consider between university life and work life and a balance to achieve when starting the latter (which could be in a different town/country) which may be a reason for the drop of interest.&lt;/p&gt;
&lt;h3 id="organization-point-of-view"&gt;Organization point of view&lt;/h3&gt;
&lt;p&gt;GSoC is an opportunity to welcome new contributors to our community.
The organization usually expects from GSoC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;contributors willing to contribute regularly to their projects.&lt;/li&gt;
&lt;li&gt;implementation (partial or total) of the proposed ideas.&lt;/li&gt;
&lt;li&gt;having a positive return on investment (is the time spent mentoring worth the result?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GSoC is mostly a step to have contributors learning about the projects, and contribute in the long-term. Long-term is purposely vague; what we expected for the GCompris project was the contributor would contribute at least one year and mentor for the next GSoC (so a loop was present, and applicants would also gain an experience on mentoring, while giving some relief to the other experienced mentors) but it can vary depending on the project.&lt;/p&gt;
&lt;p&gt;For the return on investment, mentors do not consider it good having spent more than three months mentoring for projects they could have done in less time they spent to mentor the contributor. Helping someone grow is always personally rewarding but we still hope this person will also show us the results of the teaching by improving our projects in the future.&lt;/p&gt;
&lt;h3 id="impacts-of-the-differences"&gt;Impacts of the differences&lt;/h3&gt;
&lt;p&gt;There is a huge difference on the expectations. What can we do to reach a common ground where everyone is happy?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizations cannot force anyone to contribute after the GSoC end.&lt;/li&gt;
&lt;li&gt;If money is the main motivation to stay, most organizations will not have money to hire applicants to work after (and do we want to hire someone only motivated by money? No, it's not OSS values, we love passion).&lt;/li&gt;
&lt;li&gt;Find ways to create a real interest for the organization. In KDE, we have the chance to have tons of projects with different topics (astronomy, education, digital painting, video editing, scientific plotting, games, desktop environment, system administration, internationalization, ...) where it is easy to participate to other projects from time to time and learn new things if we are curious enough.&lt;/li&gt;
&lt;li&gt;Be stricter on the entry point for organizations: explicitly say in the beginning that we expect a long-term relationship not just the equivalent of an internship. It should reduce the number of applicants and only keep the ones with a genuine interest (if applicants are honest of course).&lt;/li&gt;
&lt;li&gt;Organizations/Mentors could reduce their objectives of GSoC and consider that contributors are here to produce and spend less time on training/mentoring, expecting contributors already know the basics, but this would totally spoil the nature of the program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another track is to find the projects where contributors stay / don't stay and understand the difference. Most of the big KDE applications don't manage to keep their contributors, while smaller ones do. Maybe as a contributor, it's because it's more difficult to take decisions, feel included/listened on large projects because they have a high maturity level/long-term contributors and a well-defined vision?
Whereas on smaller projects, there are fewer constraints from the existing environment and it feels more rewarding and motivating to contribute there?&lt;/p&gt;
&lt;p&gt;To conclude, here are the statistics for KDE retention the last years:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Year&lt;/th&gt;
 &lt;th&gt;Started&lt;/th&gt;
 &lt;th&gt;Completed&lt;/th&gt;
 &lt;th&gt;Active after 1 year&lt;/th&gt;
 &lt;th&gt;Active after 2 years&lt;/th&gt;
 &lt;th&gt;Active after 3 years&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2018&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2019&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2020&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2021&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2022&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2023&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2024&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is, an average of 15 people sign up each year, of which&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an average of 90% finish&lt;/li&gt;
&lt;li&gt;44% continued contributing 1 year later&lt;/li&gt;
&lt;li&gt;28% continued contributing 2 years later&lt;/li&gt;
&lt;li&gt;22% continued contributing 3 years later&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would of course love having more contributors staying at least one year but it's almost half and a quarter that stay active for a few years!&lt;/p&gt;</description></item></channel></rss>