<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <generator uri="https://gohugo.io/" version="0.78.2">Hugo</generator><title type="html"><![CDATA[site on Roy's Blog]]></title>
    
        <subtitle type="html"><![CDATA[Mainly about tech stuff I have a hand in]]></subtitle>
    
    
    
            <link href="https://roy.marples.name/blog/tags/site/" rel="alternate" type="text/html" title="HTML" />
            <link href="https://roy.marples.name/blog/tags/site/atom.xml" rel="self" type="application/atom+xml" title="Atom" />
            <link href="https://roy.marples.name/blog/tags/site/feed.json" rel="alternate" type="application/json" title="Json" />
    <updated>2021-03-12T11:08:32+00:00</updated>
    
    <id>https://roy.marples.name/blog/tags/site/</id>
        
        <entry>
            <title type="html"><![CDATA[Ubiquiti Security GateWay]]></title>
            <link href="https://roy.marples.name/blog/posts/ubiquiti_usg/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/ubiquiti_usg/</id>
            
            <published>2021-01-17T05:54:00+00:00</published>
            <updated>2021-01-17T05:54:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>So my trusty <a href="https://www.ui.com/edgemax/edgerouter-lite/">EdgeRouter LITE</a>
died a sad death recently. No data on the console and the ethernet ports
flash green and then stick amber.
This of course meant this site was down for a few days.</p>
<p><img src="ERLite.jpg" alt="My ERLite"></p>
<p>This is a 3 port router. Each port handles 1 Gigabits of traffic.
It&rsquo;s perfect for connecting your ISP with your LAN with a spare port left over.
This is a router for technical people, it&rsquo;s not for others as the setup
is tricky. The Web UI is very dated but functional. It&rsquo;s good enough to
get things going. For more exotic things like say a VPN you need
to use the command line and use the custom configuration tool.</p>
<p>Internally the CPU is a dual MIPS64 Cavium Octeon with 512Mb RAM and more
importantly a removable USB drive which houses the OS. Which means we can
put any OS on we want :) I had a lot of fun working on
NetBSD with this, making things tick for MIPS64 and the exotic
64-bit kernel with 32-bit userland compat gunk.</p>
<p>But as a performance router, anything other than the stock OS is a bad
choice as you then forgo
<a href="https://help.ui.com/hc/en-us/articles/115006567467-EdgeRouter-Hardware-Offloading">Hardware Offloading</a>
which is a massive hit. I get 200mbs down with my ISP, but with NetBSD I was
only getting about 80mbs. You have been warned.</p>
<p>So anyway, it died. I was sad. No shop sold a new ERLite either!
I replaced it with a <a href="https://www.ui.com/unifi-routing/usg/">Unify Security Gateway</a> which ironically enough is the same hardware as the ERLite, just in a
different casing.</p>
<p><img src="USG.jpg" alt="My USG"></p>
<p>The USG is the one with the bright blue square at the top.
And yes, my cable management is lacking!</p>
<p>The big difference between the ERLite and the USG is the software.
The ERLite runs EdgeOS you need to configure it on the router directly.
The USG needs to be setup by a Unify Controller which is a Java application
that can be hosted anywhere. I of course host mine on my NetBSD server!
You can also use a smartphone application as a controller or even better -
talk to your existing one so you don&rsquo;t leave the sofa.
Now, you only need the controller for setup, you don&rsquo;t need to leave it
running all the time unless you&rsquo;re interested in collecting metrics
of your network over time.</p>
<p>I already used the controller to manage my <a href="https://www.ui.com/unifi/unifi-ap-ac-pro/">UAP-AC-Pro</a>
for quite a while so I&rsquo;m quite used to it.
The Web UI is always being improved and it&rsquo;s the most reliable Wireless Access
Point I&rsquo;ve ever had. Once you use this, nothing else will simply do!
For reliable home use anyway. I can play football with the kids on the common
land next to my house and still enjoy good wireless!</p>
<p>Anyway, the USG integrates with this.
First off the bat, don&rsquo;t use the beta interface. Unlike the UAP, the USG setup
is poor here as the firewall setup is in two places which is odd.
Also, there is an issue setting up IPv6 with a tunnel related to the firewall.
Using the classic setup with the v6 controller you can do pretty much all this
aside from the tunnel.</p>
<p>As on the ERLite, my IPv6 tunnel needs to be setup on the commandline.
This time around, I used a provisioning script to setup the tunnel AND
the needed parts in the firewall for it just incase I use the beta screens again.</p>
<p>Coupling the USG with the <a href="https://www.ui.com/unifi-switching/unifi-switch-8/">Unify 8-Port Managed Gigabit Switch</a> and my UAP-AC-Pro wireless point I get
nice metrics on the Unify Controller about the state of my network.
And I do like a good network :)</p>
<p>But what about the performance? Well, here&rsquo;s the interesting part.
Even though it&rsquo;s the same hardware I consistently hit my ISP limits
a lot more than with the ERLite. I would like to think it&rsquo;s due the the software
it runs as it&rsquo;s different, but it&rsquo;s also likely to be some configuration
issue on my part. Or it could have been a sign that the ERLite was already
failing somehow. Either way, I&rsquo;m very very happy with this!</p>
<p>Now, this is <strong>not</strong> a cheap setup.
However, because I self host, I cannot use my ISP&rsquo;s router. So this is my
solution, mainly due to being burned with useless access poinst over the years
and I just went with Ubiquiti from there. The company itself basically sells
near enterprise level devices at SOHO prices making itself very attractive
to people like me.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Happy New Year, Happy New Site]]></title>
            <link href="https://roy.marples.name/blog/posts/happy_new_year_2021/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/happy_new_year_2021/</id>
            
            <published>2021-01-02T08:00:00+00:00</published>
            <updated>2021-01-02T08:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Welcome to the new blog for 2021!
It&rsquo;s powered by <a href="https://gohugo.io">Hugo</a>
and I&rsquo;ve selected the <a href="https://github.com/thegeeklab/hugo-geekblog">Geekblog</a>
theme to power it.
This handily matches the <a href="https://github.com/thegeeklab/hugo-geekdoc">Geekdoc</a>
theme to power my separated out project documentation.
I did this because my blog was rapidy becoming a series of release
annoucements and started to take away from my ramblings.
It also opens up the possibility of allowing contributors to the project
documentation while keeping my blog to me.</p>
<h2 id="why-change">Why change?</h2>
<p>Well, don&rsquo;t get me wrong, <a href="https://vuepress.vuejs.org/">vuepress</a> is a great
product for what it is. I generally like the <a href="https://vuejs.org/">Vue.js</a>
framework over the others. If you recall,
<a href="../the_perils_of_self_updating_webapps/">I changed from Grav to vuepress back at the start of last year</a></p>
<p>However, the <a href="https://vuepress-plugin-blog.ulivz.com/guide/">vuepress blog plugin</a>
is not really that easy to setup, configure and get going.
It&rsquo;s also not easy to maintain when the tree of plugins breaks.
That&rsquo;s the thing with complex stuff -
one small part breaks and it all falls down.</p>
<p>And this is the reason - a plugin the plugin used broke. It didn&rsquo;t upgrade.
My fault for using <a href="https:/www.NetBSD.org">NetBSD</a> I know.
I did sort of manage to get it working, but the site on my mobile phone showed
the desktop view which made me mad. Tried to upgrade it, no dice.
A this point, I figured I should look around and see if there&rsquo;s anything easier
and voila. Here we are.</p>
<h2 id="what-makes-this-better">What makes this better?</h2>
<p>Well, unlike vuepress, Hugo is in <a href="https://pkgsrc.se/www/hugo">pkgsrc</a> which
makes it a snap to install on NetBSD. Yes, there is sometimes a large lag
between updates in pkgsrc to Hugo which is why I ruled it out when
I changed to vuepress a few years ago as the pkgsrc version was too old
for the themes I wanted. Technically this was because the
<a href="https://pkgsrc.se/lang/go">pkgsrc golang</a> infrastructure was quite new and
not up to it I think.</p>
<p>It&rsquo;s also a lot faster to build the site on my server,
by several orders of magnitude. Speed is always important.</p>
<h2 id="are-you-done-yet">Are you done yet?</h2>
<p>I&rsquo;m an engineer! It&rsquo;s never done, it can always be improved!
There are some things I don&rsquo;t like about Geekblog and Geekdoc.
Both seem to get frequent changes, so hopefully they can be resolved soon.
The Projects and About Me links are temporary as they don&rsquo;t belong in the
tag cloud.</p>
<p>I also need to edit my old blog posts and fix the links where I can.
If you see a broken link, please let me know!</p>
<p>Sadly, I seem to have lost a lot of pictures from Grav.
I thought I had them all backed up, but I&rsquo;ve since re-used the disk.
Also, a lot date to before I used a smart phone to take pictures which are
now auto magically backed up to the cloud.
A real shame, good memories lost.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Downgrade is the new Upgrade]]></title>
            <link href="https://roy.marples.name/blog/posts/server_upgrade_2020/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/server_upgrade_2020/</id>
            
            <published>2020-03-23T15:48:00+00:00</published>
            <updated>2020-03-23T15:48:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>My home server for a few years has been a
<a href="https://www.gigabyte.com/uk/Mini-PcBarebone/GB-BXBT-1900-rev-10#ov">Gigabyte BRIX 1900</a>.
Aside from powering this site, my email, project mailing lists and source
code repositories, I use use it to host some
<a href="https://wiki.xenproject.org/wiki/Xen_Project_Software_Overview#Guest_Types">VM&rsquo;s as XEN DOMU HVM guests</a>
so I can ensure my code works on many operating systems.
However, the VM hosting brought my server to it&rsquo;s knees.</p>
<p>I&rsquo;ve recently purchased an <a href="https://www.amd.com/en/products/cpu/amd-ryzen-5-2600x">AMD 2600x</a>
which I&rsquo;ve fitted out with 32GB RAM.
This will be my new developer machine <em>(not to self, NOT to use for gaming)</em>,
but I need the 512GB SSD from the old server for this one.
As I have a few spare 120GB SSDs, I decided to downgrade!</p>
<p>In the process I decided to try out <a href="https://en.wikipedia.org/wiki/ZFS">ZFS</a> as
it was recently improved quite a bit in NetBSD.
Turned out there were still a few bugs to iron out, but I worked out a way to
<a href="https://wiki.netbsd.org/wiki/RootOnZFS/">have Root On ZFS</a>.
With lz4 compression enabled, the space savings for my usage are huge!
I&rsquo;m really pleased with ZFS, it seems a lot better than using LVM + FFS + WAPBL.</p>
<p>Taking advantage of a new disk, all the software is very uptodate as well,
and required some curses changes so I could try a few other things out&hellip;.
but more on that later!</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[The Perils of Self Updating Web Apps]]></title>
            <link href="https://roy.marples.name/blog/posts/the_perils_of_self_updating_webapps/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/the_perils_of_self_updating_webapps/</id>
            
            <published>2020-02-18T00:00:00+00:00</published>
            <updated>2020-02-18T00:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>So I&rsquo;ve used <a href="https://getgrav.org/">Grav</a> since 2017 to power my project and
blog pages.
It&rsquo;s a
<a href="https://en.wikipedia.org/wiki/Flat-file_database">flat-file</a>
<a href="https://en.wikipedia.org/wiki/Content_management_system">Content Management System</a>.
It&rsquo;s really easy to use and takes away a lot of the pain of setup.
By easy to use I mean you don&rsquo;t ever have to use the command line after
the initial setup and the admin pages and general look and feel are really
nice and clean.</p>
<p>Internally, Grav uses
<a href="https://daringfireball.net/projects/markdown/syntax">markdown</a>
files to store the user pages using
<a href="https://learn.getgrav.org/16/content/headers">frontmatter</a>
to store meta-data such as tags, publication date, etc.
It seems that a log of blog and cms systems use this of late as it entirely
removes the need for a database and isn&rsquo;t that hard to pickup.</p>
<h2 id="what-went-wrong">What went wrong?</h2>
<p>Well, every time you login to the Grav admin page it checks for updates
and casually lets you know there&rsquo;s an upgrade via a popup.
It also checks all installed modules as well.
It makes upgrading painless &hellip;.. except when it goes wrong.
Basically Grav complained about the gateway timing out via a popup.</p>
<p>Oh dear!</p>
<p>Refresh the page and boom, presented with a <code>Please run bin/grav install</code>
banner on a white screen.</p>
<p>Okay&hellip;. this might have been a harmless timeout.
So I login via ssh, goto the needed directory and run the installer and I
see many errors like so:
<code>tls_process_server_certificate:certificate verify failed</code>.</p>
<p>This is because, like all systems today, Grav uses many 3rd party things
and downloads them from other sites.
Why this suddenly started happening recently I don&rsquo;t know- I&rsquo;ve not
updated my server at all.</p>
<p>To be clear, this isn&rsquo;t Grav&rsquo;s fault or error- the failure is somewhere in
<a href="https://www.php.net/">PHP</a>, <a href="https://www.openssl.org/">OpenSSL</a> or
the website in questions <a href="https://en.wikipedia.org/wiki/HTTPS">HTTPS</a>
configuration.</p>
<h2 id="what-can-be-done-about-it">What can be done about it?</h2>
<p>It&rsquo;s possible to fix it for sure, but maybe this is the wrong approach.
The vast majority of my site does not accept <em>any</em> data and
<a href="https://bejamas.io/blog/static-site-generators/">Static Site Generators</a>
have come a long way since I last looked at them.
The idea being that a static site has zero runtime dependencies so it&rsquo;s
always working. The downside being it can still go wrong as can any other
application but you, the end user, does not see this.
The other downside is that they build a lot of files and this takes time.</p>
<p>All of them seem to use Markdown and Frontmatter like Grav as their
data storage so in theory it should be fairly simple to install some
and try them out.</p>
<p>I settled on <a href="https://vuepress.vuejs.org/">VuePress</a> mainly because I
use <a href="https://vuejs.org/">Vue.js</a> on a side project I&rsquo;m working on.
VuePress is mainly for documentation though
<em>(ie, perfect for my open source projects)</em> but as it turns out isn&rsquo;t that
great for blogs!
Luckily
<a href="https://github.com/vuepressjs/vuepress-theme-blog">there is a blog plugin</a>,
but the the downside is that you need to set it up as a different site.
Thanks to too much cleverness in VuePress, my blog link looks like
an external site which I&rsquo;m not overly keen on.
Also, the blog insits on using the date in URLs which I&rsquo;m not too sure about
either.</p>
<p>But it&rsquo;s a start, it&rsquo;s up and working and renders really well on mobile devices.
Let&rsquo;s see how long this lasts :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Hello Phabricator]]></title>
            <link href="https://roy.marples.name/blog/posts/hello_phabricator/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/hello_phabricator/</id>
            
            <published>2018-10-14T21:44:06+00:00</published>
            <updated>2018-10-14T21:44:06+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>After waving a <a href="/blog/goodbye-fossil">fond farewell to Fossil</a> I give a hearty hello to <a href="https://secure.phabricator.com/">Phabricator</a>!</p>
<h3 id="the-good">The Good</h3>
<p>Phabricator is written in <a href="http://php.net/manual/en/intro-whatis.php">PHP</a> which means I don&rsquo;t have to install <a href="https://xkcd.com/927/">Yet Another</a> <a href="https://en.wikipedia.org/wiki/Software_framework">Framework</a>. I use quite a few things that depend on PHP on this site already, such as <a href="https://getgrav.org/">Grav</a> and <a href="https://roundcube.net/">RoundCube</a>. So of course, it allows me to self host. Or you can rent a <a href="https://www.phacility.com/">Phabricator VPS @ Phacility</a>.</p>
<p>The sign up process <em>(to my Phabricator instance, not somewhere else)</em> is very straight-forward, allowing email/password with <a href="https://www.google.com/recaptcha/intro/invisible.html">ReCaptha</a> or use a <a href="https://oauth.net/2/">OAuth2</a> provider such as <a href="https://developers.google.com/identity/protocols/OAuth2">Google</a>. So this is very socially acceptable and should be secure from <a href="https://en.wikipedia.org/wiki/Spambot">spambots</a>.</p>
<p>The core work is based around the ease of code auditing and review of patches. There is even a <a href="https://en.wikipedia.org/wiki/Pastebin">pastebin</a> so users can upload config files and logs for analysis. Doing all this in a mailing list over the years results in things being here, there and everywhere &hellip;. and then expiring. Having it all centralised means nothing is lost. But more importantly, it&rsquo;s much easier to look at and work with, so this is a massive quality of life improvement.</p>
<p>Tickets <em>(or tasks in Phabricator)</em> very user friendly, showing a collapsable history with full links to related objects such as commits, reviews, logs, etc. Infact the linking is extremely easy, one can reference some more of the popular objects by using a single letter follows by the id. Such as <code>T1</code>. Tickets can be related to one or more Projects and in turn Projects can display Tasks on a <a href="https://en.wikipedia.org/wiki/Kanban">KanBan Board</a>.</p>
<p>Phabricator can host your code in your SCM of choice for you and defaults to not allowing destructive changesets by default which saves me from messing around with custom hooks.
This allows the same feature as Fossil&rsquo;s immutable history <strong>on the server</strong>- you can do what you like to your own clone still.</p>
<p>It&rsquo;s fast! No, it&rsquo;s not as fast as Fossil, but it&rsquo;s still more than fast enough especially when you consider the extra toys you get- syntax highlighting, desktop notifications <em>(on supported browsers, which is most recent ones)</em>, user icons, in-depth tooltips. It&rsquo;s certainly faster than other solutions I&rsquo;ve looked at recently and bar Fossil, probably the fastest.</p>
<p>You get a chat room <em>(does require a NodeJS server on the host for automatic updates though it seems)</em> and a wiki. I still use <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> on <a href="https://freenode.net/">FreeNode</a>, but the advantage here is that this is web based and persistent so you don&rsquo;t loose anything if you get disconnected. Still, unsure how useful either be as I don&rsquo;t recall users editing any publically editable wiki pages I&rsquo;ve had over the years- are my man pages really that good? Heh.</p>
<h3 id="the-bad">The Bad</h3>
<p>Phabricator is written in <a href="http://php.net/manual/en/intro-whatis.php">PHP</a>. Now I did say that was a good thing earlier, but it&rsquo;s a double edged sword.
PHP does have a bad reputation for both security and language structure. I would argue that this is no different from how <a href="https://en.wikipedia.org/wiki/C_(programming_language)">C</a> is today. This is also bad, because my site ran on PHP-7.0 and that was <strong>soooo much faster</strong> than earlier versions it was silly. But Phabricator didn&rsquo;t support PHP-7 until PHP-7.1 in early Feb this year. Something to think about for long term support, but this equally applies to other languages, especially the <a href="https://news.ycombinator.com/item?id=10822861">Python-2 vs Python-3</a> issue as my box has two Python versions due mainly to <a href="https://certbot.eff.org/docs/install.html">certbot needing Python-2.7</a></p>
<p>Phabricator requires MySQL <em>(I installed <a href="https://mariadb.org/">MariaDB</a>, the fork from MySql)</em>. I was very happy with <a href="https://www.postgresql.org/">PostgreSQL</a> but my box does not have the resources to run both. Pretty much all other software I use allows the choice of DB, so this actually took me by surprise. And just like the PHP reaction others have, I was concerned <a href="https://www.quora.com/What-are-pros-and-cons-of-PostgreSQL-and-MySQL">by using MySQL</a>, but as I&rsquo;m not really into being a <a href="https://en.wikipedia.org/wiki/Database_administrator">DBA</a> I&rsquo;m quite happy with MySQL so far.</p>
<p>The linking is really bad for DHCP, because we always talk about <code>T1</code> and <code>T2</code> as timers. This is important, because my main product is of course <a href="/projects/dhcpcd">dhcpcd</a>.
In Phabricator <code>T1</code> and <code>T2</code> are shorthand to link to Task 1 and Task 2.
You can fix this by stopping Phabricator from linking via a matchig regex, but I quite like the ease of use and solved the problem via changing the <code>AUTO_INCREMENT</code> value in some tables from 1 to 101. This reduces the potential collision with other things, such as <code>Z1</code> and allows the same workflow. Upstream rejected my change and even went as far as to remove me posting my fix if anyone else has the same issue claiming this would make support hard. As it turns out, something with my change isn&rsquo;t quite right- either Phabricator or MySQL resets the <code>AUTO_INCREMENT</code> value. I don&rsquo;t know which one, or what action I did or if it&rsquo;s a general <a href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)">Garbage Collection</a> going on. This could be why they didn&rsquo;t like the change, but heh ho most of the important tables now have values in at 101 and higher so it shouldn&rsquo;t be a problem anymore.</p>
<p>The <a href="https://en.wikipedia.org/wiki/Continuous_integration">Continuous Integration</a> support is limiting, but it is there. Apparently you can at least call out to <a href="https://jenkins.io/">Jenkins</a> or <a href="http://buildbot.net/">BuildBot</a>.</p>
<p>Because Phabricator is based on and developed in a <a href="https://en.wikipedia.org/wiki/DevOps">DevOps</a> fashion, there is practically no support for <a href="https://secure.phabricator.com/T9530">managed releases or milestones</a>.
This isn&rsquo;t a problem for me as such, but I would like a feature to track important things that went into a release better.</p>
<h3 id="the-ugly">The Ugly</h3>
<p>Phabricator is <strong>NOT ugly</strong>. It&rsquo;s quite visually appealing.
However, it is quite possibly the most complex installation I&rsquo;ve ever done as it uses many databases and as many configuration options as sysctl on a good BSD.
This wasn&rsquo;t helped by running on NetBSD-current and a gcc built PHP with Phabricator just didn&rsquo;t work and I spent a long time working out why.
My fix was to build everthing with clang which required a lot of personal effort from me at the time due to the recent UEFI booting support breaking the build and a the new clang-4 compiler not working with the NetBSD build knobs I was using.
On the plus side, the Phabricator docmentation is good and about 95% of the issues I had were easily searchable on <a href="https://stackoverflow.com">StackOverflow</a> or the <em>(mostly)</em> friendly Phabricator community helped me out in their chat channel- which oddly enough is also a Phabricator application.</p>
<p>Phabricator workflow with more than one dev, or the best way of submitting patches, is to use the <a href="https://secure.phabricator.com/book/phabricator/article/arcanist/">Arcanist</a> tool. They admit it&rsquo;s not great and things should be manageable directly through the SCM. We&rsquo;ll see how that progresses. In the meantime, posting patches to the Differential application is quite easy and allows easy patch review.</p>
<p>I had to stop using Fossil because Fossil is more than just a SCM, it strives to be a complete one stop solution. Obviously that won&rsquo;t work for the desire to use Phabricator for all the good reasons, so I needed to pick a SCM to use. Luckily Phabricator quite a few- GIT, Mercurial and SVN.</p>
<h3 id="but-what-about-the-source-code-control">But what about the source code control?</h3>
<p>It&rsquo;s importance cannot be understated- the code is everything, the history of the code is everything. This has been known since the dawn of time. At this point though, the <a href="https://en.wikipedia.org/wiki/Version_control">SCM</a> just becomes a tool in the box, just like <a href="https://en.wikipedia.org/wiki/Sed">sed</a>.</p>
<p>Eh what?</p>
<p>Every SCM solution out there has pretty much the same set of basic features you need- atomic checkins (ok, CVS lacks this), changesets, branching, tagging.
That&rsquo;s all you pretty much need at a basic level- the rest of the features are predominently driven by workflow.</p>
<p>Tools exist to export data from one to the other, and tools are being created to allow a more <a href="/blog/fossil-git-bridge">transparent bridge</a> again making the choice of SCM even less important than it was before.
The only real issue is the importance of meta data that has no place-holder in the other SCM you want to use. A good example of this would git the Author vs Commiter git attribute on the commit.</p>
<p>Then, you need to understand that the SCM is only for developers. End users don&rsquo;t care a hoot about it. What they do care about is an easy to use system which handles the lifetime of their issue where dicussion, patches, logs, reviews and audits can happen. Hopefully they can even get a fixed build at the end. This is basically part of <a href="https://en.wikipedia.org/wiki/Application_lifecycle_management">Application Lifecycle Management</a>.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Virgin Media starting to turn on IPv6?]]></title>
            <link href="https://roy.marples.name/blog/posts/virgin_media_starting_to_turn_on_ipv6/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/virgin_media_starting_to_turn_on_ipv6/</id>
            
            <published>2018-10-14T21:44:06+00:00</published>
            <updated>2018-10-14T21:44:06+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve been trying to run an IPv6 tunnel without much success- it&rsquo;s far to laggy to use for real work.
So I&rsquo;ve turned that off, and I just noticed I&rsquo;m now getting an IPv6 Router Advertisement across my Super Hub3 in modem mode.
I&rsquo;ve gotten a default route AND a online prefix option to <code>2a02:8800:f000:2120::/64</code> (but sadly, no auto config flag).
This prefix is <a href="http://ftp.ripe.net/ripe/stats/membership/alloclist.txt">owned by Virgin Media</a>.</p>
<p>So, I can ping the router but nothing else as I don&rsquo;t have a public IPv6 IP address.
No address via RA, no reply from my DHCPv6 solicitations- which is odd as the router says I can get a managed address and other information.
Maybe they have yet to turn that part on? Please, turn it on soon Virgin!</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Goodbye SpamAssassin, hello Rspamd!]]></title>
            <link href="https://roy.marples.name/blog/posts/goodbye_spamassassin_hello_rspamd/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/goodbye_spamassassin_hello_rspamd/</id>
            
            <published>2018-10-12T14:27:00+00:00</published>
            <updated>2018-10-12T14:27:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>In my continuing efforts to entirely self host, fighting spam is hard.
I originally configured <a href="https://spamassassin.apache.org/">SpamAssassin</a> on my mail server quite a few years ago, and to be fair it has done it&rsquo;s job.
But recently, more spam has been creeping through and my ever growing stack of addons <em>(such as <a href="https://launchpad.net/pypolicyd-spf/">policyd-spf</a>, <a href="http://opendkim.org/">OpenDKIM</a>, <a href="http://www.trusteddomain.org/opendmarc/">OpenDMARC</a> and others)</em> to SA was eating quite a lot of memory on my poor server.</p>
<p>So I shopped around and found <a href="https://rspamd.com/">Rspamd</a>.
For my needs it sounded wonderful- no more need for <a href="https://www.mysql.com/">MySQL</a> (it&rsquo;s a hard dependency of OpenDMARC) as I much prefer <a href="https://www.postgresql.org/">PostgreSQL</a>.
SPF, DKIM and DMARC all integrated.
Written in C and LUA which is a massive improvement over Perl and Python.
Also sports a shiny Web UI to monitor the server and do basic config. Speaking of config, it&rsquo;s still not entirely easy, but it&rsquo;s much easier than configuring the stack I used to have!
I did have to patch the build so that it <a href="https://github.com/rspamd/rspamd/pull/2587">works with OpenSSL-1.1</a> which is now in pkgsrc.
All in all, I anticpated a nice memory reduction once I had it all configured. So far it&rsquo;s using about 200Mb less memory, but it&rsquo;s early days.
How much better or worse than SA it is at actual spam filtering remains to be seem, but I have high hopes.</p>
<p>While here, I also replaced <a href="https://en.wikipedia.org/wiki/Procmail">procmail</a> with <a href="https://pigeonhole.dovecot.org/">PigeonHole</a>.
I didn&rsquo;t really need to do this, but I thought &ldquo;As I&rsquo;m here&hellip;..&rdquo;. Actually the end result is much nicer as I now only have one Spam folder instead of another two Spam folders for training ham and spam.
I just need to hook this final part into how I manage spam on my <a href="http://mlmmj.org/">mlmmj</a> email lists.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[MySQL databases corrupt!]]></title>
            <link href="https://roy.marples.name/blog/posts/mysql_databases_corrupt/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/mysql_databases_corrupt/</id>
            
            <published>2017-09-12T16:34:00+00:00</published>
            <updated>2017-09-12T16:34:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p><code>[ERROR] Can't open and lock privilege tables: Got error 9 from storage engine</code></p>
<p>Nice error. Googling for it doesn&rsquo;t reveal much on how to fix it.
The good news is that I only use MySQL for Phabricator and PostreSQL for everything else.
The bad news is that my Phabricator instance is no longer working.
The worse news is that I get the same error when trying to use backups, so there must be something else in play here.</p>
<p>Ideas on how to resolve this are welcome!</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Goodbye Fossil]]></title>
            <link href="https://roy.marples.name/blog/posts/goodbye_fossil/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/goodbye_fossil/</id>
            
            <published>2017-03-11T21:17:00+00:00</published>
            <updated>2017-03-11T21:17:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve been using <a href="http://fossil-scm.org/">Fossil</a> as my <a href="https://en.wikipedia.org/wiki/Version_control">SCM</a> for quite a few years now and it has served me well.
It replaced my aging <a href="https://trac.edgewall.org/">Trac</a> <em>(which I&rsquo;ve now really retired in the recent server move &hellip; it didn&rsquo;t move)</em> + <a href="https://git-scm.com/">GIT</a> setup.
There is nothing inherently wrong with it and upstream are quite quick to resolve any issues. So lets start with a list of Fossil plus points, in no particular order:</p>
<ul>
<li>BSD license.</li>
<li>One binary, easy installation, very low maintainence cost.</li>
<li>Integrated CGI web front end.</li>
<li>Integrated Wiki, Tickets- which are also distributed.</li>
<li>Sane command line UI.</li>
<li>Stores everything in a <a href="https://www.sqlite.org/">SQLite database</a>.</li>
<li>Repository is not joined to the checkout, supports different checkout from the same cloned repository.</li>
<li>I <del>have</del> had a <a href="http://fossil-scm.org/index.html/info/27de3fc8beb09475">Fossil commit bit</a> - my change allows a near perfect Fossil &lt;&gt; GIT bridge.</li>
</ul>
<p>And naturally, after many years of use, there are some negative points:</p>
<ul>
<li>The ticketing system is very basic and has no email support- you&rsquo;re expected to use each tickets RSS feed, but this is not clear.</li>
<li>It&rsquo;s not extendable.</li>
<li>It&rsquo;s possible for an admin in the upstream repo to wipe out parts or the whole of your cloned repo.</li>
<li>It&rsquo;s not social.</li>
</ul>
<p>That&rsquo;s actually a <strong>very small list of negative points</strong>. It shows that Fossil is a great product, with a great team behind it.
Let&rsquo;s address these these negatives in more detail though.</p>
<h3 id="the-ticketing-system-is-is-poor">The ticketing system is is poor</h3>
<p>Yes, the tickets are distributed, but that&rsquo;s the only good point.
The UI to progress the ticket needs a lot of work and is not intuitive to use.
Tickets don&rsquo;t support markdown.
It&rsquo;s not clear to the end user that the only feedback they get is a RSS feed.
My initial attempt to fix this was about 3 years ago but was met with silence. I could try and improve this by creating a fossil branch just to add RSS icons to the ticket UI.</p>
<h3 id="fossil-is-not-extendable">Fossil is not extendable</h3>
<p>This isn&rsquo;t actually that bad, what it does have works well enough (aside from the ticketing).
And to be fair, there is a <a href="http://fossil.wanderinghorse.net/repos/libfossil">3rd party library to extend fossil</a> but it doesn&rsquo;t seem to be used by anything I can find.
However, based on recent experiences at my day job (where I don&rsquo;t use Fossil), code reviews are turning out to be quite critical and the tools we were using suck.
Well, Fossil doesn&rsquo;t have any code review feature nor any easy way of hooking it into an automated build system for <a href="https://en.wikipedia.org/wiki/Continuous_integration">continuous integration</a>
So we&rsquo;re left reviewing changes via pastebin where links expire or diffs via email. Now diffs via email have been standard on many open source projects, and still are in many.
Most of the time I can read them fine, but sometimes they are hard to review in an email. Sometimes I end up using a code review tool, loading the dhcpcd source code, copy and paste the diff into it, reviewing and then copying my review comments back into the email. This is hardly ideal and quite time consuming.</p>
<h3 id="fossil-history-can-be-wiped-out">Fossil history can be wiped out</h3>
<p>Fossil <a href="https://www.fossil-scm.org/xfer/doc/trunk/www/shunning.wiki">has an ability to delete anything from your cloned repo - it&rsquo;s called shunning</a>.
While this is an awesome feature for corporations (I work for one, I understand the problems and wish my day job had this feature), but equally I believe it&rsquo;s entirely un-suitable for open source use.
This is my PC, it contains my contributions to a project which could wipe out my copy of said project and published contributions. History, gone.
Now, it&rsquo;s entirely likely that this will never happen, I like to believe in the good in people, but the possibilty remains someone could push the button.
OK, there&rsquo;s a bit more to it than that- the default fossil setting is to auto-sync the shun list. However, the code is disabled for auto-sync (ie sync on commit) but <strong>is enabled</strong> for the manual pull/push commands.
While that removes the item from your checkout (if it&rsquo;s there), it won&rsquo;t actually remove it from the repository itself until the repository is rebuilt, which is sometimes forced on you when upgrading fossil.
Yes, this is probably a knee-jerk reaction to a none-issue, but it still grates.
This is also a reason why I love to self host and would never consider having <a href="https://github.com/rsmarples">GitHub</a> or similar being the one sole place where I publish my work. I have always, and always will do, self host.</p>
<h3 id="fossil-is-not-social">Fossil is not social</h3>
<p>By it&rsquo;s very nature, you can&rsquo;t contribue to the club unless you&rsquo;re in the club- at least not using just Fossil.
It&rsquo;s designed (from my perspective anyway) to be a distributed CVS/SVN + wiki + tickets. By this, I mean there is one master repository everyone clones from and pushes to.
This makes it impossible to have my own branch outside of the main repo and publish it to others (equivalent of <a href="https://help.github.com/articles/creating-a-pull-request-from-a-fork/">GIT Fork and Pull</a>).
It can also be argued that this is a good thing because it encourages people to work together and just like the prior point, this is a good feature for corporate setups.
But equally sometimes someone needs to maintain a patchset unsuitable for upstream for valid reasons.
This <em>is rare</em>, but it has happened. And I hate losing users for any reason.
Could they have a branch they maintain in my repo? Quite possibly, but Fossil&rsquo;s security isn&rsquo;t that granular <a href="http://www.urbandictionary.com/define.php?term=afaik">AFAIK</a> and I would dislike someone messing around in the other branches.
Maybe that&rsquo;s anti-social of me, but equally no-one has ever asked for commit access to my repos either.</p>
<p><strong>EDIT:</strong> Dr Richard Hipp pointed out privately that this is <a href="https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar">The Cathedral and the Bazaar</a>.
Fossil is the pre-eminent solution for The Cathedral, while others are more suited to the Bazaar.</p>
<h3 id="in-summary">In summary</h3>
<p>Taking the above into account, I can no longer justify the use of Fossil in my Open Source projects.
For other projects, Fossil is still an awesome tool if that&rsquo;s all you need.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Fossil <-> Git bridge]]></title>
            <link href="https://roy.marples.name/blog/posts/fossil_git_bridge/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/fossil_git_bridge/</id>
            
            <published>2017-02-22T03:10:00+00:00</published>
            <updated>2017-02-22T03:10:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve been using <a href="http://fossil-scm.org/index.html/doc/trunk/www/index.wiki">Fossil</a> for quite a while now as my <a href="https://en.wikipedia.org/wiki/Version_control">SCM</a>.
I like Fossil.
But Fossil is not <a href="https://git-scm.com/">Git</a>, and most people seem to like Git.
It could be better to say that most people like <a href="https://github.com/">GitHub</a> because it&rsquo;s the first hosted SCM that&rsquo;s free for open source with good social interaction I&rsquo;m aware of.
And GitHub is <strong>huge</strong>.
Some might say that if you&rsquo;re not on GitHub, you don&rsquo;t exist as a project. Well this obviously isn&rsquo;t true, but you get the idea.
You <em>can</em> get free Fossil hosting at <a href="http://chiselapp.com/">Chisel</a>, which is nice, but it&rsquo;s also not GitHub.
Plus I like to be 100% self hosted.</p>
<p>So, to get myself on GitHub <em>(as a mirror only)</em>, there needs to be a bridge between Fossil and Git.
<a href="http://fossil-scm.org/xfer/doc/trunk/www/inout.wiki">Fossil documentation</a> implies this is quite easy. Sadly, this isn&rsquo;t the case as the &lt;=Fossil-1.37 releases <em>(note there is no guaranntee that future versions of follow will not have these flaws- my branch may not be comitted to trunk)</em> have the following flaws:</p>
<ul>
<li>Branch and Tag name mangling (dhcpcd-6 becomes dhcpcd_6)</li>
<li>Silent master branch renaming into trunk on inport, but not on export</li>
<li>No tag comments (Fossil lacks the feature) which means syncing tags back and forth results in tag conflict due to signature change</li>
</ul>
<p>I submitted some initial patches the the <a href="http://www.mail-archive.com/fossil-users@lists.fossil-scm.org/msg24586.html">Fossil mailing list</a> and I now have a Fossil commit bit!
You can <a href="https://www.fossil-scm.org/xfer/timeline?r=roy-export&amp;nd">find my branch here to fix the Fossil Git bridge</a>.</p>
<p>But that&rsquo;s not the end of the story.
A bridge has two ends.
With my initial setup, the Git end was bare bones repository which I pushed to GitHub.
This is no longer the case- I now need a staging repository to pull both ends.
And this requires a script because Git needs a little more hand-holding to completely track a remote.
The below script is tailored for my needs, yours may differ. It also reflects the above initial design and the subsequent change- as such it it may need editing if you need to create a git clone from fossil.
This comes with no support, just as an idea of how you might implement such a bridge.</p>
<div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh"><span style="color:#099">#!/bin/sh
</span><span style="color:#099"></span>
<span style="color:#033">fossildir</span><span style="color:#555">=</span>/var/fossil
<span style="color:#09f;font-style:italic"># Cannot be a bare directory for git as we cannot write to the host directly.</span>
<span style="color:#09f;font-style:italic"># So we have a staging directory instead.</span>
<span style="color:#09f;font-style:italic"># This requires a bit of hand-holding to track all the branches.</span>
<span style="color:#033">gitdir</span><span style="color:#555">=</span>/var/git-staging

<span style="color:#033">marksdir</span><span style="color:#555">=</span>/var/scm-marks

<span style="color:#09f;font-style:italic"># Respect default naming at either end</span>
<span style="color:#033">fossil_export_opts</span><span style="color:#555">=</span><span style="color:#c30">&#34;--rename-trunk master&#34;</span>
<span style="color:#033">fossil_import_opts</span><span style="color:#555">=</span><span style="color:#c30">&#34;--rename-master trunk&#34;</span>

<span style="color:#09f;font-style:italic"># Only used when creating a git bare bones repo from Fossil.</span>
export_fossil_to_git_new<span style="color:#555">()</span>
<span style="color:#555">{</span>

        rm-f <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span> <span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span>
        git init
        fossil export--git <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--export-marks <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span> <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                <span style="color:#033">$fossil_export_opts</span> <span style="color:#c30">&#34;</span><span style="color:#033">$fossildir</span><span style="color:#c30">/</span><span style="color:#033">$fossilrepo</span><span style="color:#c30">&#34;</span> | <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                git fast-import <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--export-marks<span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span>
<span style="color:#555">}</span>

export_fossil_to_git<span style="color:#555">()</span>
<span style="color:#555">{</span>

        fossil export--git <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--import-marks <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span>--export-marks <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span> <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                <span style="color:#033">$fossil_export_opts</span> <span style="color:#c30">&#34;</span><span style="color:#033">$fossildir</span><span style="color:#c30">/</span><span style="color:#033">$fossilrepo</span><span style="color:#c30">&#34;</span> | <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                git fast-import <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--import-marks<span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span>--export-marks<span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span>
<span style="color:#555">}</span>

export_git_to_fossil<span style="color:#555">()</span>
<span style="color:#555">{</span>

        git fast-export--all <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--import-marks<span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span>--export-marks<span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$gitmarks</span><span style="color:#c30">&#34;</span> | <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                fossil import--git--incremental <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>--import-marks <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span>--export-marks <span style="color:#c30">&#34;</span><span style="color:#033">$fossilmarks</span><span style="color:#c30">&#34;</span> <span style="color:#c30;font-weight:bold">\
</span><span style="color:#c30;font-weight:bold"></span>                <span style="color:#033">$fossil_import_opts</span> <span style="color:#c30">&#34;</span><span style="color:#033">$fossildir</span><span style="color:#c30">/</span><span style="color:#033">$fossilrepo</span><span style="color:#c30">&#34;</span>
<span style="color:#555">}</span>

pull_git<span style="color:#555">()</span>
<span style="color:#555">{</span>
        <span style="color:#366">local</span> remote

        git fetch--all
        <span style="color:#09f;font-style:italic"># Track all remote branches</span>
        git branch-r | grep-v <span style="color:#c30">&#39;\-&gt;&#39;</span> | <span style="color:#069;font-weight:bold">while</span> <span style="color:#366">read</span> remote; <span style="color:#069;font-weight:bold">do</span>
                <span style="color:#069;font-weight:bold">if</span> <span style="color:#555">[</span>-z <span style="color:#c30">&#34;</span><span style="color:#069;font-weight:bold">$(</span>git branch--list <span style="color:#c30">&#34;</span><span style="color:#a00">${</span><span style="color:#033">remote</span>#origin/<span style="color:#a00">}</span><span style="color:#c30">&#34;</span><span style="color:#069;font-weight:bold">)</span><span style="color:#c30">&#34;</span> <span style="color:#555">]</span>; <span style="color:#069;font-weight:bold">then</span>
                        git branch--track <span style="color:#c30">&#34;</span><span style="color:#a00">${</span><span style="color:#033">remote</span>#origin/<span style="color:#a00">}</span><span style="color:#c30">&#34;</span> <span style="color:#c30">&#34;</span><span style="color:#033">$remote</span><span style="color:#c30">&#34;</span>
                <span style="color:#069;font-weight:bold">fi</span>
        <span style="color:#069;font-weight:bold">done</span>
        git branch--list | sed-e <span style="color:#c30">&#39;s/^\* //&#39;</span> | <span style="color:#069;font-weight:bold">while</span> <span style="color:#366">read</span> branch; <span style="color:#069;font-weight:bold">do</span>
                git checkout <span style="color:#c30">&#34;</span><span style="color:#033">$branch</span><span style="color:#c30">&#34;</span>
                git merge--ff-only
        <span style="color:#069;font-weight:bold">done</span>
<span style="color:#555">}</span>

push_git<span style="color:#555">()</span>
<span style="color:#555">{</span>

        git push--all
        git push--tags
        <span style="color:#09f;font-style:italic"># Reset the current branch checkout.</span>
        <span style="color:#09f;font-style:italic"># If we don&#39;t, the next run will complain about unstashed changes.</span>
        <span style="color:#09f;font-style:italic"># This maybe a bug in git, but maybe not because the live checkout</span>
        <span style="color:#09f;font-style:italic"># *is* behind at this point as we just fast-imported.</span>
        git reset--hard
<span style="color:#555">}</span>

<span style="color:#366">echo</span> <span style="color:#c30">&#34;Syncing git and fossil.&#34;</span>
<span style="color:#069;font-weight:bold">for</span> repo in <span style="color:#c30">&#34;</span><span style="color:#033">$fossildir</span><span style="color:#c30">&#34;</span>/*.fossil; <span style="color:#069;font-weight:bold">do</span>
        <span style="color:#033">fossilrepo</span><span style="color:#555">=</span><span style="color:#a00">${</span><span style="color:#033">repo</span>#<span style="color:#a00">${</span><span style="color:#033">fossildir</span><span style="color:#a00">}</span>/*<span style="color:#a00">}</span>
        <span style="color:#033">repo</span><span style="color:#555">=</span><span style="color:#a00">${</span><span style="color:#033">fossilrepo</span>%.fossil<span style="color:#a00">}</span>
        <span style="color:#033">gitrepo</span><span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$repo</span><span style="color:#c30">&#34;</span>
        <span style="color:#033">fossilmarks</span><span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$marksdir</span><span style="color:#c30">/</span><span style="color:#033">$repo</span><span style="color:#c30">.fossil.marks&#34;</span>
        <span style="color:#033">gitmarks</span><span style="color:#555">=</span><span style="color:#c30">&#34;</span><span style="color:#033">$marksdir</span><span style="color:#c30">/</span><span style="color:#033">$repo</span><span style="color:#c30">.git.marks&#34;</span>

        <span style="color:#09f;font-style:italic"># We just sync old fossil repos to new phab clones</span>
        <span style="color:#069;font-weight:bold">if</span> <span style="color:#555">[</span>-d <span style="color:#c30">&#34;</span><span style="color:#033">$gitdir</span><span style="color:#c30">/</span><span style="color:#033">$gitrepo</span><span style="color:#c30">&#34;</span> <span style="color:#555">]</span>; <span style="color:#069;font-weight:bold">then</span>
                <span style="color:#366">cd</span> <span style="color:#c30">&#34;</span><span style="color:#033">$gitdir</span><span style="color:#c30">/</span><span style="color:#033">$gitrepo</span><span style="color:#c30">&#34;</span>
                pull_git <span style="color:#09f;font-style:italic"># staging only</span>
                export_git_to_fossil
                export_fossil_to_git
                push_git <span style="color:#09f;font-style:italic"># staging only</span>
<span style="color:#09f;font-style:italic"># Enable the below if pusing to a bare git repo from fossil</span>
<span style="color:#09f;font-style:italic">#       else</span>
<span style="color:#09f;font-style:italic">#               export_fossil_to_git_new</span>
        <span style="color:#069;font-weight:bold">fi</span>
<span style="color:#069;font-weight:bold">done</span>
</code></pre></div><p><a href="http://roy.marples.name/downloads/reposync">Direct download to script</a></p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/code" term="code" label="code" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[HTTP/2 enabled]]></title>
            <link href="https://roy.marples.name/blog/posts/http-2_enabled/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/http-2_enabled/</id>
            
            <published>2017-02-07T09:51:00+00:00</published>
            <updated>2017-02-07T09:51:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>So finally I&rsquo;ve moved all services from my old server to my <a href="../the_christmas_xen_box">Christmas Xen box</a>!
This was not without problems due to the fact it had to run NetBSD-current</p>
<ul>
<li><a href="http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=51105">gcc toolchain is broken for some packages</a> which affected running any PHP build</li>
<li>clang toolchain was broken for my config <em>(USE_SSP= yes and CPUFLAGS+=-march=core2)</em></li>
<li>clang compiles as a whole were broken due to a recent efiboot import</li>
</ul>
<p>In hind-sight, I could have had the box up and running a lot sooner if I used NetBSD-7 guests (or maybe just a NetBSD-7 build box), but no, I just <strong>had</strong> to get-current running.
It offers more than-7 and prior exerience told me that tracking-7 was very problematic &hellip; but that could have been due to my settings and wanting to compile everything with clang.
I&rsquo;ve currently got 3-current images there now &hellip; the Xen DOM0, the actual server itself as Xen DomU (without any compiler or tools) and another Xen DomU which just builds stuff for other guests to use.</p>
<p>Anyway, the box itself is now up and running and all relevant services have been moved to it.
During this move, I decided to modernise things a little and setup <a href="https://en.wikipedia.org/wiki/HTTP/2">HTTP/2</a>. If you&rsquo;re reading this then it&rsquo;s working :)
As such, I&rsquo;ve re-directed all basic HTTP traffic to HTTPS and it does seem to load a lot faster.
One side effect of this is that I&rsquo;ve stoped using my own self signed certificates and I&rsquo;m now using the nice <a href="https://letsencrypt.org/">Let&rsquo;s Encrypt</a> service.
<a href="https://www.pkgsrc.org/">pkgsrc</a> users should use the <a href="http://pkgsrc.se/security/py-certbot">py-certbot</a> package and don&rsquo;t bother searching for any letsencrypt package as it&rsquo;s been renamed. I found this quite confusing as there was no reference to the rename in pkgsrc I could find and wasted a little time on it.</p>
<p>But now it&rsquo;s live I can finally look into bringing online some other development utilities to play around with as the server has a lot more room to grow :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/netbsd" term="netbsd" label="NetBSD" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Welcome to 2014]]></title>
            <link href="https://roy.marples.name/blog/posts/welcome_to_2014/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/welcome_to_2014/</id>
            
            <published>2014-01-01T13:44:00+00:00</published>
            <updated>2014-01-01T13:44:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<h2 id="a-new-year-a-new-website">A new year, a new website!</h2>
<p>In truth, although I had a nice new server upgrade it seems that <a href="http://trac.edgewall.org/">Trac</a> just keeps on using resource after resource.
Now, having the site entirely python powered isn&rsquo;t entirely possible- thus far I have yet to find a reasonable email web interface other than <a href="http://roundcube.net/">RoundCube</a>
Also, my <a href="http://www.postgresql.org/">PostgreSQL</a> interface of choice uses <a href="http://php.net/">PHP</a>. Speaking of PostgreSQL, that kind of limits my blogging software choices as most of them only want to use MySQL, which I have no wish to use.
Here&rsquo;s a list of blogging software which can use PostgreSQL:</p>
<ul>
<li><a href="http://trac-hacks.org/wiki/FullBlogPlugin">Trac</a></li>
<li><a href="http://drupal.org/">Drupal</a></li>
<li><a href="http://www.s9y.org/">Serendipity</a></li>
</ul>
<p>So seeing as I&rsquo;m moving a way from Trac and I had a bad experience managing my
prior <a href="../blog_changed_from_drupal_to_trac_fullblog">Drupal install many years ago</a>,
it&rsquo;s no surprise that I&rsquo;ve migrated my blog over to Serendipity :)
As with the prior migration I&rsquo;ve preserved comment history and my image gallery.
However, I still need to edit all prior posts and correct their links.
At this point you maybe wondering what now powers my projects? Well, they recently <a href="http://roy.marples.name/archives/dhcpcd-discuss/2013/0946.html">converted from GIT to Fossil</a></p>
<p>All of this effort and not much blogging? Well, lets see if I can blog more here as it&rsquo;s my content which I own entirely on my self hosted site. I think I&rsquo;ve been giving to much content hosting to Facebook and Twitter. I&rsquo;ll not stop using them, but I expect to post more here :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Site upgrade]]></title>
            <link href="https://roy.marples.name/blog/posts/site_upgrade/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/site_upgrade/</id>
            
            <published>2010-07-04T21:35:00+00:00</published>
            <updated>2010-07-04T21:35:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve upgraded to trac-0.12 and all the plugins to the latest available. Everything still seems to work :)</p>
<p>I&rsquo;ve also ditched <a href="http://openid.net/">OpenID</a> for the time being as some spammers were still getting through. I still have trouble getting the <a href="http://trac-hacks.org/wiki/AccountManagerPlugin">AccountManager trac plugin</a> to work well, so I&rsquo;ve gone back to the trac spam filter plugin, with captcha support enabled. We&rsquo;ll see how this works.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Removing the ISC bloat]]></title>
            <link href="https://roy.marples.name/blog/posts/removing_the_isc_bloat/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/removing_the_isc_bloat/</id>
            
            <published>2009-11-23T11:32:00+00:00</published>
            <updated>2009-11-23T11:32:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>First off, <a href="https://www.isc.org/">ISC</a> must be given credit for supplying the <a href="https://www.isc.org/software/bind">BIND DNS</a> and <a href="https://www.isc.org/software/dhcp">DHCP</a> servers. They&rsquo;ve been powering a lot of the internet and private networking for many years, including this server. But the time has come to change!</p>
<p>I&rsquo;m now using <a href="http://www.nlnetlabs.nl/projects/nsd/">nsd</a> as my public authoritative name server and <a href="http://www.unbound.net/">unbound</a> as my private recursive name server. This results in config files much easier to setup and hopefully more security as <a href="http://www.nlnetlabs.nl/projects/nsd/">nsd</a> is very small leaving less room for public exploits. Also, the total memory used after a few days production is 40meg lighter than <a href="https://www.isc.org/software/bind">BIND</a> which is good as my server is really starved for memory right now.</p>
<p>So what&rsquo;s the catch? Well, there is no way of integrating <a href="http://en.wikipedia.org/wiki/Dynamic_DNS">Dynamic DNS</a> with <a href="http://www.unbound.net/">unbound</a> that I can see. I could use <a href="http://www.thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a> as a DHCP server as that can run a script per lease, which means I can use unbound-control to update DNS. But I dislike this as dnsmasq isn&rsquo;t entirely the right tool for the job. So I will probably write dhcpsd, a small portable and entirely new DHCP server that can be used to integrate with DNS via scripts. Watch this space!</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[OpenID now required]]></title>
            <link href="https://roy.marples.name/blog/posts/openid_now_required/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/openid_now_required/</id>
            
            <published>2009-07-21T12:11:00+00:00</published>
            <updated>2009-07-21T12:11:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>So to make life a little easier, you now have to have an <a href="http://en.wikipedia.org/wiki/OpenID">OpenID</a> account to login to this site.
Only users who have logged in can create/change tickets, wiki and post comments to my blog.</p>
<p>There are quite a few <a href="http://en.wikipedia.org/wiki/List_of_OpenID_providers">OpenID Providers</a>, so it should be quite easy. You may already have an OpenID!
However, due to how the <a href="http://trac.sandbox.lt/auth/wiki/AuthOpenIdPlugin">OpenID plugin</a> works with <a href="http://trac.edgewall.org/">Trac</a> your username will look a little odd. This is because your OpenID is basically a FQDN, just like a web address. So it&rsquo;s best to use a provider like !http://<username>.provider.com or !http://provider.com/username- in other words, avoid Google for OpenID unless you want a really long username here. This not that bad though, as the plugin strips the !http:// part and the trailing slash.</p>
<p>You can see from this post that my OpenID is roy.marples.name, which shows that having your own domain and OpenID server is important if you want to look good ;)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[User registration now required]]></title>
            <link href="https://roy.marples.name/blog/posts/user_registration_now_required/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/user_registration_now_required/</id>
            
            <published>2009-07-20T13:09:00+00:00</published>
            <updated>2009-07-20T13:09:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>My Trac spam filters seem to have stopped working.
So in an effort to tide the spam, this site now requires user registration to post tickets or edit the wiki&rsquo;s. One user account covers all trac projects, but you have preferences for each.</p>
<p>We&rsquo;ll see how it goes :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[On the importance of MTU]]></title>
            <link href="https://roy.marples.name/blog/posts/on_the_importance_of_mtu/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/on_the_importance_of_mtu/</id>
            
            <published>2009-07-04T17:58:00+00:00</published>
            <updated>2009-07-04T17:58:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>So, I&rsquo;m now finally natviely IPv6 enabled :)</p>
<p>This led to an <a href="http://mail-index.netbsd.org/tech-net/2009/07/01/msg001460.html">interesting debtate about my internet connection</a>. In a nutshell my <a href="http://www.draytek.co.uk/products/vigor120.html">Drayetk Vigor 100 is broken</a>, but apparently by design. The problem is this- for IPv4 goes through my NAT whose public IP has an MTU of 1492 so Path MTU Discovery works fine. However IPv6 does not need NAT and the PPPoE interface does not have a public IPv6 and nor do the internal clients use it even it there was one. So the path MTU is 1500, which is too big for the PPPoE to handle.</p>
<p>The correct solution is to obviously terminate the IPv6 on a PPPoA connection, but only the <a href="http://www.cisco.com/en/US/products/ps6202/">Cisco 877 router</a> does this and that&rsquo;s outside of my price range, even on eBay.
One solution is to clamp the MSS on the router to 1430 so that all clients work. But this is a hack.
The best solution with my hardware is to force the MTU to 1492 for all nodes inside my network, so they share the same MTU as the PPPoE so that Path MTU Discovery works.</p>
<p>You can see this working for yourself on IPv6 now, as this site is IPv6 enabled and sits behind the PPPoE link. You&rsquo;ll need to query IPv4 servers for the address though as I don&rsquo;t yet have a glue record for IPv6, but as I&rsquo;m changing registrar that should change in a few weeks :)</p>
<p>Because of this, I&rsquo;ve made the dhcpcd default to request and use the MTU value if offered by the DHCP server. You&rsquo;ll be seeing this in dhcpcd-5.0.5 (now out). dhcpcd-5.0.6 will feature restoring the MTU correctly between leases.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/dhcpcd" term="dhcpcd" label="dhcpcd" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[ISP Changed]]></title>
            <link href="https://roy.marples.name/blog/posts/isp_changed/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/isp_changed/</id>
            
            <published>2009-06-30T09:47:00+00:00</published>
            <updated>2009-06-30T09:47:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I as <a href="blog:2009/06/15">blogged about earlier</a> I&rsquo;ve now changed ISP to <a href="http://www.goscomb.net">Goscomb Technologies</a>. Quite a straight forward migration and although the downspeed isn&rsquo;t much better, it&rsquo;s a lot snappier which implies I was congested on the Demon line. However, my upload speed has doubled, which is good news for this server :D</p>
<p>There maybe some more downtime in the near future as I may change registrar as I&rsquo;ll be getting native IPv6 later today (yay, no more <a href="http://en.wikipedia.org/wiki/Tunnel_broker">tunnel</a>!) and my current one (<a href="http://www.1and1.co.uk">1&amp;1</a>)don&rsquo;t appear to support IPv6 in their domain / dns setup.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Changing ISP]]></title>
            <link href="https://roy.marples.name/blog/posts/changing_isp/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/changing_isp/</id>
            
            <published>2009-06-15T09:36:00+00:00</published>
            <updated>2009-06-15T09:36:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve been a loyal <a href="http://www.demon.net">Demon Internet</a> customer for a long time now (since 1989 I think). But the time has come to change as they&rsquo;re simply just not the same ISP I first joined, started going downhill when they were bought by <a href="http://www.thus.net/">Thus</a>. Service speed degradation is now common and sometimes the PPP is just dead even though it gets an IP address. Also, they have no plans for native IPv6.</p>
<p>So I&rsquo;m changing to <a href="http://www.goscomb.net/">Goscomb Technologies</a> because they are slightly cheaper than Demon, have a 24Mb service NOW and offer native IPv6. I did have cause to phone Goscomb up, and it was nice to hear a native English speaker at the other end on a good quality line instead of a non native speaker on a poor quality line due to the customer services section being out sourced. Another plus.</p>
<p>What does this mean for you? Well, on the 29th of this month, the switch should be made, so there will be some downtime and delay whilst the DNS updates. So this is also a heads up :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[mod_wsgi]]></title>
            <link href="https://roy.marples.name/blog/posts/mod_wsgi/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/mod_wsgi/</id>
            
            <published>2009-05-06T15:31:00+00:00</published>
            <updated>2009-05-06T15:31:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>In my efforts to improve performance in terms of speed and memory consumption of <a href="http://trac.edgewall.org/">trac</a> which powers web the interface you&rsquo;re seeing here, I&rsquo;ve just installed <a href="http://code.google.com/p/modwsgi/">mod_wsgi</a>.</p>
<p>Initial reaction is that it is lighter on memory and also faster, but time will tell. What I did like is that installation is very simple and well documented, unlike <a href="http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html">fastcgi</a> or <a href="http://fastcgi.coremail.cn/">fcgid</a>. Sadly I still need to use fcgid for the non python parts of my site.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Scallywhack]]></title>
            <link href="https://roy.marples.name/blog/posts/scallywhack/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/scallywhack/</id>
            
            <published>2009-03-14T19:30:00+00:00</published>
            <updated>2009-03-14T19:30:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>I&rsquo;ve just installed <a href="http://projects.otaku42.de/wiki/ScallyWhack">ScallyWhack</a> on this server in response to some spam hitting my trac wiki pages which got past <a href="http://trac.edgewall.org/wiki/SpamFilter">SpamFilter</a>.</p>
<p>If you have any issues with this and it&rsquo;s really not spam, then email me or get it in touch via IRC. You will probably need to at least enable cookies and store your email address in the preferences.</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Blog changed from Drupal to Trac FullBlog]]></title>
            <link href="https://roy.marples.name/blog/posts/blog_changed_from_drupal_to_trac_fullblog/?utm_source=atom_feed" rel="alternate" type="text/html"  hreflang="en" />
            <id>https://roy.marples.name/blog/posts/blog_changed_from_drupal_to_trac_fullblog/</id>
            
            <published>2009-02-27T15:42:00+00:00</published>
            <updated>2009-02-27T15:42:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p><a href="../losing_that_drupal_lovin">I&rsquo;ve lost that Drupal feeling</a> for good now. Maintaining it was a bit too much hard work. Whilst trac is still a bit of work, the database structure is a lot easier to use and as such access my data.</p>
<p>All blog posts and comments have been retained, as has my <a href="http://roy.marples.name/blog/pages/gallery.html">image gallery</a>.
There are a few errors in the migration, but they are acceptable.</p>
<p>So welcome to new the site and enjoy :)</p>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://roy.marples.name/blog/tags/site" term="site" label="site" />
                             
                                <category scheme="https://roy.marples.name/blog/tags/tech" term="tech" label="tech" />
                            
                        
                    
                
            
        </entry>
    
</feed>
