What has been going on in Odysseus development?
Farewell Odysseus!
Jun 4, 2022
Its been too long since I last worked on Odysseus, or have written to this blog! But looking at the state of elementary’s builtin browser (codenamed “Epiphany”) in Jolnir I have to say I feel Odysseus has less of a reason to exist. Epiphany is a nice enough browser that I’m happy to contribute what I consider to be some of Odysseus’s most important features to it, so that I can focus on other projects I consider more important. Namely my own browserengines exploring the potential of the web without JavaScript to be perfectly suited to viewing on absolutely any device! Show how versatile text is as a medium!
Tagged Bookmarking
Sep 27, 2020
I view getting bookmarking right, so it’s more convenient than performing that websearch again on a centralized non-private webservice, as being vital for Odysseus!
Retrospective 2019
Jan 1, 2020
I have two major drivers pushing me to work on Odysseus. The first being how much I love and appreciate software freedom, elementary OS, & the sheer range of things published to The Web! These aspects of Odysseus were easy to implement.
Repost: Deconstructing Google’s excuses on tracking protection
Aug 24, 2019
Deconstructing Google’s excuses on tracking protection
Personalized Suggestions
Jul 17, 2019
A new Odysseus update is out supporting personalized link suggestions, so why is this important? And how does it work?
My Own CSS Engine
Jun 24, 2019
I’ve stated before how I vital I see it is for new browser engines to be developed, in order to fight the collapse of browser divirsity and push the web to simplify enough to continue surviving. For my small part of this I implemented a CSS engine from scratch.
Repost: Web engines in Haskell
May 31, 2019
Web engines in Haskell
The collapse of browser engine diversity has been very concerning to me as a browser developer. I rely on it to keep the Web cross-platform, and as such I’m pleased to see developers like Chris exploring the feasability of reimplementing a subset of the web platform. My own attempt wasn’t near as successful, possibly because I knew too much about how existing browser engines work.
Repost: Into the Personal-Website-Verse
May 31, 2019
Into the Personal-Website-Verse
This blogpost recommends embracing personal websites as an alternative to the pandora’s box of social networking, and of particular interest me explores some options for decentralized discovery. This is very much the future I want to see for the Web, and I don’t know what to add.
Repost: Re-decentralizing the Web
May 30, 2019
Re-decentralizing the Web
Cross Distro Packaging
May 28, 2019
I’ve been busy recently packaging Odysseus for multiple distros and making sure it looks great across all of them. Because I’ve heard from people not on elementary OS who are keen to use Odysseus.
Odysseus supports webfeeds!
Apr 9, 2019
As I’ve blogged before I deeply believe you shouldn’t have to rely on some central service, waste your time revisiting websites, or provide your contact information in order to keep up to date with your favourite websites. Subscribing for updates must be trivial and private.
Page Status Indicators
Oct 8, 2018
It is my goal in designing Odysseus to keep it looking as simple as it’s MVP despite it’s accumulation of features, and over the last several days I’ve been working on a UI component that will facilitate that - incorporating numerous new features in a succinct and unobtrusive way. Or looked at another way it provides a communication channel through which I can communicate information about webpages in a way they can’t fake it.
Repost: The Powerhouses of the Internet Are Turning Hostile to Websites
Sep 27, 2018
The Powerhouses of the Internet Are Turning Hostile to Websites
This artical describes how many of the major “social networks” are trying to keep people on their silo rather than venturing off onto the wider web. To me this is terrible! That wider web is the web,k and where all it’s value comes from! If you’re just using specific services, why have The Web in the first place? (Certainly we’d still need The Internet though).
Repost: How to Build a Low-tech Website?
Sep 26, 2018
How to Build a Low-tech Website?
This is a very interesting read about the impact on energy demand the way we consume and even publish websites impacts the environment via electricity demand. It’s very valuable reading for an web, or web-adjacent, developer. I find it inspiring.
Hello odysseus.adrian.geek.nz!
Sep 26, 2018
You may have noticed this site now has it’s own domain name: odysseus.adrian.geek.nz
. I’m doing this to reduce how tied I am to GitHub. And thus show my commitment to the open decentralized web outside of the major silos like Google.
Happy Internation Day Against DRM!
Sep 18, 2018
Today in celebration of International Day Against DRM, I tightened up my recommended links relating to DRM-free entertainment as guided by GOG.com’s campaign site. So now via greater focus Odysseus will guide it’s new surfers towards ethically distributed media they can actually view in Odysseus or elementary’s other apps. Feel free to checkout these links in your celebration!
Topsites Performance
Sep 15, 2018
I’ve been experiencing some performance problems with Odysseus’s topsites display, and I hear so have some of you. So overtime I have been adding performance improvements to it, and I may continue to do so. In this post I will document what these have been, what these may be.
Repost: The Ecological Impact of Browser Diversity
Sep 1, 2018
The Ecological Impact of Browser Diversity
Webfeed Previewer
Aug 31, 2018
A new Odysseus update is currently being released with support for previewing webfeeds. It also includes some fixes so it still works on the latest WebKitGTK.
Microsoft <3 GitHub
Jun 5, 2018
tl;dr; Microsoft hasn’t changed but I don’t hate them, GitHub is fine, the acquisation isn’t a big deal, but the controversy is a good thing.
Encouraging a More Open Web via a Stronger App Ecosystem
Jun 2, 2018
Native vs Web, it’s a heated argument. But perhaps it’s not an argument we should be having.
Refactoring and Optimizing Prosody
May 31, 2018
I’ve spent the last few days making Prosody’s code read better, with there being two dominant changes. Both of which would also decrease Odysseus’s CPU and memory usage (Note: I haven’t measured this, but the latter of these makes a difference on human-visible timescales). And both of which serves as great illustrations of some Computer Science concepts.
Recommendations on the Homepage
May 26, 2018
In my last post I stated that I would next be incorporating those recommendations into the newtab page. And just today I managed to do so, which means that a new update is coming very soon.
New First-launch Site
May 17, 2018
On first launch if an elementary app doesn’t have any other data to show it should highlight some options for loading data into the app. The way you load data into Odysseus is by simply surfing the web, so to follow that principle I’ve designed a website with a bunch of links to start your websurfing on.
Let's Replacing JavaScript With Something Better — For Page Manipulation
Apr 21, 2018
This post is a reply to Let’s Replace JavaScript With Something Better, so I’ll expect you to have read it first. Did you read it? Good. Let’s procede!
Incorporating WebData Into Templates
Apr 20, 2018
One of the best things about the Web is that you can take data from multiple sites and combine them into your own display, even if most people celebrating that fact are really trying to get you to improve the value of their silos for free. But nevertheless it was a feature I wanted to incorporate into Prosody. And today I drafted the code to make it work, in what is essentially Prosody bindings for LibSoup.
REPOST: Let's Replace JavaScript With Something Better
Apr 14, 2018
Today I came across a fantastic artical through the fediverse.
Customizable Topsites on odysseus:home
Apr 13, 2018
This took me longer then I expected, but I finally managed to release an update that allows you to customize the topsites visible on the new tab page. It took so long because I needed to expose more capabilities to Odysseus’s internal pages, but also because it’s hard to see this working until I’ve pulled everything together. Saving your updates is entirely seperate from reading it back in, and both of those have their own “front-end”/UI and “back-end”.
Abstraction in Prosody Templating
Mar 18, 2018
Now I’m seriously beginning to work with the Prosody templating language (it’s basically just Django’s) I defined early on in Odysseus development, and now I’m seriously starting to use it. To discover it’s strengths and weaknesses, and how I can make it best suited to my work.
History FullText Search Integrated, How Does It Work?
Mar 17, 2018
Since version 1.1.0, two things have really been on my mind. First off initially I thought WebKit could handle it if I fed your browser history to it in chunks, but it turns out it reads the whole page in one go then renders it. Which I can understand leads to a better experience on the fast networks of today (but I swear browsers used to render partial pages). So I had to rush out a patch, before your browsers started freezing, to add pagination to the history viewer, which should get to you anytime now.
Odysseus 1.1.0 Released, Now With Browser History
Mar 13, 2018
Yesterday I completed the development of browser history, which is now available on the elementary AppCenter!
Language Roundown for Internal Pages
Jan 2, 2018
Happy New Years! You may think me odd, but I started my year adding the infrastructure I needed for Odysseus’s resolutions.
Odysseus Plans for 2018
Dec 31, 2017
It is New Years day for me, and while I do have other New Year’s resolutions (not that it’s a thing I tend to be very big on), I thought I’d celebrate in part by laying out my plans for Odysseus here and now.
Odysseus is on The AppCenter
Dec 29, 2017
Odysseus is now in the elementary AppCenter, and I quickly got one interested surfer who acted as a bit of a tester. However it appears AppCenter isn’t seeing my application metadata, but I’ve got an attempted fix for that in the pipeline. Perhaps it’s for the best as that gives me a chance to take WebShapedBiz’s feedback before it gets seriously promoted in AppCenter’s new app carousel.
Planning internal Trait Framework
Dec 26, 2017
While I wait for Odysseus to be accepted into the AppCenter (which is probably understandably slow during the Holiday season), I thought it might be nice to lay out a short-term roadmap for an internal framework to develop longer-term (though very important) browser features on.
Faster Startup with Delayed Loading of Pages
Dec 21, 2017
I just added a nice new feature to improve Odysseus’s startup performance, while it will still reopen the pages you had open last time you used Odysseus now it will hold off on loading those webpages. That is Odysseus now has a blazingly fast startup which remembers where you left off, it’s just what the doctor ordered.
Great New Downloads Experience
Dec 20, 2017
It took me a little bit to get this working right, although much of that was me unwinding after all the refactorings I’ve been doing recently, but Odysseus now has a great downloads experience.
Meson and Dock Progress
Dec 18, 2017
Today having gotten through all the refactoring I wanted to do, I rewrote my build files to use Meson rather than CMake and started to work on some new features to better integrate Odysseus into elementary OS.
Repost: How the Sausage Gets Made: The Hidden Work of Content
Dec 18, 2017
How the Sausage Gets Made: The Hidden Work of Content @ AListApart.comRelease Cleanup: Day 8
Dec 17, 2017
Today I reimplemented the internationalization infrastructure for internal pages. This has long been a source of SEGFAULTS whether I used OS internationalization or my own code, so I rewrote that infrastructure yet again today. On a similar note I also setup a Transifex account for Odysseus. Unfortunately the translatable text from the internal pages have not been loaded into Transifex due to it’s custom code. Maybe if I can get a WebLate instance (perhaps my own or elementary’s) I can hack it to understand my messages format.
Release Cleanup: Day 7
Dec 16, 2017
I slowed down a fair bit on Odysseus development over the previous 3 days because I was busy graduating in Computer Science. However I did manage get some work done over those days and I finished that chunk of work today.
Repost: Bitcoin+Server Farm Energy Concerns
Dec 15, 2017
If You Are Going To Worry About Bitcoin's Energy Consumption, Worry About Server Farms Too -- For More Than One Reason @ Techdirt.comRelease Cleanup: Day 6
Dec 12, 2017
Today I scheduled towards cleaning up all of Odysseus’s “traits”. To my surprise they were all simple enough that they hardly needed tidying up at all. Sure there’s some FIXMEs in the error reporting trait, but I’m not sure how to fix them at the moment, they’re not serious bugs, and the code remains clear regardless. The biggest thing I did there was to extract the singleton code for a WebKit.WebContext out into a new “service” whilst keeping most the configuration in a trait. This was done to maintain an ideolized dependency graph between my Model, Services, Traits, & UI layers.
Release Cleanup: Day 5
Dec 11, 2017
Today I focused on the Widgets/header
package, but as that’s mostly code sourced from other elementary projects there wasn’t much to clean up leaving me to focus on the AddressBar
. AddressBar
was already very nicely written, in part because of how simple it is, but I did manage to find some things to correct.
Site Upgrades, Now With Branding & Comments
Dec 11, 2017
If you’ve been reading this blog (which I don’t imagine many have been yet), you may have noticed it looks much more professional now. This came about over last night with most of the changes revolving around incorporating a splash of branding. Though I also made the header’s gradient more pronounced and adjusted the layout of whitespace so the site both looks nicer and so it no longer triggers an ugly scrollbar at the bottom. It actually quite surprised my how big of a difference a little branding makes.
Release Cleanup: Day 4
Dec 10, 2017
Today’s work is much more along the lines of bugfixing rather than cleaning up my code style. The status bar now behaves correctly in how it reports the find-in-page count and destinations of links, and now all tabs will reliably have a favicon at all times.
Release Cleanup: Day 3 Part 2
Dec 9, 2017
Another class cleaned up in the second part of the day, this time WebTab
. There I moved concerns out into Persistance
and other “Traits”, and continued splitting the constructor into seperate methods & Widgets. While I was at it I moved to using my own UserAgent string as I’ve been struggling to keep up to date with Safari’s, and I corrected the behaviour of the find toolbar.
Release Cleanup: Day 3
Dec 9, 2017
I’ve still been on BrowserWindow
refactoring today, working on some much more intense refactoring. Essentially the main thing I did was to extract out the common layout patterns into a HeaderBar
subclass so I can write the BrowserWindow
code a bit more declaratively. It’s not as concise as the psuedocode I shared yesterday as it wasn’t worth it (unlike before) to implement that syntax; it creates more effort then it saves.
Release Cleanup: Day 2
Dec 8, 2017
Today’s cleanup was fairly involved, but on the lighter side I started by integrating the recommendations site into the first start. This was then followed up by numerous refactorings of the BrowserWindow
class.
Release Cleanup: Day 1
Dec 7, 2017
Today I started to look at what partial refactorings I could finalize, what deprecated APIs I could move away from, and how I could otherwise clean up my code. I’m doing this file by file, and have just decided I wanted to blog about each set of files I do. As such this is the inaugural post on the summer cleaning progress.
MVP - Is Feature Complete
Dec 6, 2017
Today I got dragging a tab out into it’s own window working, which is part of the behaviour of a standard elementary tabbar. This required messing with the task scheduling a little for it to work1, but the Scratch text editor served very well as sample code to get any issues resolved. What I didn’t manage to get working is restoring tab history, but that’ll have to wait until a particular WebKitGTK update which I won’t let hold up Odysseus’s release any longer.
New Recommendations Site
Dec 4, 2017
I’ve just put some time consuming effort into the first-launch experience of Odysseus, and unlike most other browsers it’s not a tour of Odysseus’s features. Instead inline with the HIG it’s a well-presented bunch of links1.
Tabs Now Pin
Oct 24, 2017
I know it’s been a while since the last post, but now I’m nearing the homestretch to when I’ll feel comfortable publishing this to the elementary AppCenter. I’m really looking forward to it.
A Day's Work
Oct 12, 2017
It took me too long to get back to Odysseus development, but today I got a lot done on it. I’ve fixed some issues I’ve been having with SQLite3, fixed some newcoming bugs, figured out where I currently stand in regards to EME, and made some fixes to my icon to fit in even better with elementary’s excellent ones.
Followup: Hypothetical Web Redesign
Oct 9, 2017
NOTE This is the final pure geeky entertainment post in this series about an alternative Web. The next post should be back to documenting Odysseus development. If you haven’t already, I recommend you read the first post in this series first.
Re: What Should Follow the Web
Sep 26, 2017
NOTE This is a continuation of the previous pure geeky entertainment post, and a reply to the continuation of the post which inspired that.
Hypothetical Web Redesign
Sep 26, 2017
NOTE This long post is purely for very geeky entertainment. Feel free to skip it.
EME now a W3C Recommendation
Sep 20, 2017
The W3C has just announced that the appeals process has failed and EME is now a W3C recommendation without any covenant against anti-circumvention laws. Needless to say I am deeply dissapointed by this.
Integrating SQLite
Aug 17, 2017
I like HTML and CSS. HTML’s syntax is specifically designed to make it easy to specify the typographic meaning of text to be communicated to users, and incorporating other resources into it. CSS meanwhile is specifically designed to specify how to communicate that typographic meaning. Compared to this JavaScript is a bit of a cope-out with it’s turing complete control flow taken straight from C. However SQL is not, and that’s why I have recently integrated it into Odysseus (for it’s own use) via SQLite.
Quick Tip
Jul 30, 2017
If your software is behaving strangely, consider your conditions. You may need to negate them.
On Non-native UX
Jul 28, 2017
As you may well know, Odysseus aims to feel native to elementary OS. However sticking too rigidly to the familiar and native controls may actually hurt the user experience. This might be when the Web UX Odysseus exposes handles page navigation better then those native controls, or it might be when a native control seems to be designed for the purpose you have but really handles a different one. The latter can be especially tricky when that native control has some atypical behaviour that’s tricky to reimplement.
New Odysseus Icon!
Jul 26, 2017
Surprisingly the main challenge I faced in developing Odysseus was not in getting it to render webpages1. GNOME and Apple have largely handled that for me. No, the main challenge was in designing an icon for it.
Page Generation in Odysseus
Jul 22, 2017
O.K., that’s enough ranting about the W3C. Especially since I believe what they’re doing is extremely valuable in that it allows not just one but two vibrant markets to survive — websites and browsers. Their open standards not only allow people to easily publish their knowledge and entertainment for pennies (if that), but it also allows new operating systems to incorporate that value in a way that best works with their User eXperience (UX). Ofcourse it also allows third parties to succeed in building their own browsers and thereby keep us1 on our toes, despite the lack of value they tend to place on a native UX.
WebAssembly
Jul 21, 2017
Another recent standard that deserves consideration is WebAssembly, as it provides web developers a closer-to-the-metal language with which they can better obfuscate their code.
Encrypted Media Extensions
Jul 20, 2017
The elephant in the room around web standards at the moment is EME (Encrypted Media Extensions), sold by Apple as “Premium HTML5 Video”. However “premium” implies the best artists will always demand DRM, which is outright false. It also refers to EME as a (W3C) standard, which I am not onboard with as it has a gaping hole in the specification - a hole they call CDMs (Content Decryption Modules). As such the only thing I agree with Apple’s branding on here is that it’s about online video.
First!
Jul 19, 2017
I wanted a place to comment on the development of the Odysseus web browser, and any web standards of particular note. For that reason I started this blog.