Tue, 21 Aug 2012
github has become the place where a lot of code is made available.
It turns out that not everyone has the time or inclination to answer queries / questions or apply pull requests.
So, whenever I am investigating using something I've found, I always look to see what the forks are; if there are common issues, etc.
In the past, I've done this by hand, for small repositories it isn't too time consuming. Today, though, I sat down and wrote find-forks.py which will do this automatically.
Now, I find a project, clone it, run ./find-forks.py and settle down with gitk to examine the history and various other forks.
This works well for me, feel free to use or improve as you like. I hereby place this in the Public Domain.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Mon, 25 Jul 2011
As amazing as it is, there are still people who simply do not understand Free Software licences (but actually generate Free Software).
Consider this gem.
A project that is released as GPL cannot be used in any commercial product without the product itself also being offered as open source.
What? You mean like the Linux kernel? A GPL'd product used in many commercial products?
Even worse, he conflates "open source" with Free Software.
For shame, Kenneth Reitz, for shame.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Wed, 01 Jun 2011
As you all probably know by know, DNSSEC has been enabled on the root ('.') since July 2010.
And on most TLDs like .com shortly thereafter (in the specific case of .com, since March 2011).
The Debian guide to turning on DNSSEC is useful but some things you need to know (after using it for a week or so).
If you have 'listen-on-v6', set to yes and you roam to a non-IPv6 network. Your name resolutions can take 30+ seconds.
Since I roam from a some networks they do have IP6 and some that do not, I have had to turn this setting off to achieve reasonable performance
Just like Andrew Cowie, I'm trying to get new features in NetworkManager. by blogging.
My use case is simple – if a bit geeky – use the local resolver on my system irregardless of what I get dynamically (via DHCP) or automagically (via SLAAC).
I can do this manually for each network I connect to, but it quickly looses its appeal.
Apart from the happy DNSSEC campers, very little takes advantage of DNSSEC yet.
Kind of like the early days of IP6. It would be nicer if websites stored the fingerprint of the SSL website in DNS and it could be cross-checked against what was sent.
The effort to do so is underway at the IETF by the name of DANE.
In fact publishing SSH key fingerprints via DNS is already possible RFC4255 but I am unaware of deployed support.
Things are progressing, and I suspect now is a great moment to get involved if you have spare time, in making it significantly harder for 3rd-parties to censor the Internet for everyone.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Sun, 25 Oct 2009
Just a quick note.
Most routing is done on the basis of the destination address, unless you have a BGP feed.
However occassionally you need to do routing on the basis of some other policy: in my case this weekend it was the source address.
I spent quite a few hours this weekend looking at various Google results, lartc.org, www.policyrouting.org (the latter has a fairly detailed book with some useful examples) before I came up with a solution that works for me.
ip rule add from <source addr> table 203 ip route add default via <new default> table 203
You can also use the ToS field and act upon fwmarks thus linking your routing with your iptables policy.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Fri, 18 Sep 2009
(aside: I have a number of blog posts in draft – don't worry they won't spam the various planets – but this was timely so I pushed it out first)
The most recent version of Firefox 3.x will also prompt you to update your Flash plugin if it is out of date. According to Ken Kovash, the response has been phenomenal. Almost 10,000,000 click through.
That is 10,000,000 failures.
Like a lot of people, I provide technical support for my Windows using family (and some friends). So I get to see how badly Windows is in the 'update' space. It is pretty common to have: Windows, Anti-virus, Java and one / two other applications (e.g. Google apps, Skype, Yahoo IM, etc.) prompt you with little annoying notification bubbles.
Most of them have trained themselves to not look in the bottom right of the screen and to ignore requests to update.
Which means that whenever I see a big, important update, like the Firefox one — I end up having to remotely take over their machine and do it on their behalf.
The user experience was:
So far, so good.
Excellent. Click on link.
Great. It also includes, checked by default, a download of McCafe's anti-virus tool something or other.
Why is Adobe offering me more than just an upgrade of the product I am after? Apparently this is very common in the Windows world (think Safari included with iTunes, etc.)
It includes instructions on how to enable things so that this plugin is updated by Adobe all the time. I, rather pointlessly, ponder why Flash does not do this itself.
At this point a normal person would think that they are now secure. Nothing could be further from the truth. Adobe has stupidly decided that first you need to have their update plugin. Then you need to actually do the update. FAIL.
I click through to Adobe's site (again), this time, it figures out that it needs to update Flash. It autoinvokes the autoupdate plugin and does the update.
That was a total user experience failure.
Not Mozilla's fault but Adobe's.
But Mozilla can make a difference in this area. And work around the stupidity of Adobe.
That implies that there is a, separate "Your plugins are out of date page" distinct from "You've installed an upgraded version of Firefox"
[ / software] Trackbacks (0) Comments (3) permanent link permanent link
Tue, 16 Dec 2008
... cry.
In my prior entry, I noted that I resigned from Debian. I also upgraded my system to Ubuntu.
This is my story.
Something that I think would be very useful, would be a script that took a stable Debian release and updated you to the latest Ubuntu LTS. In the past I used be okay with the release cycle that Debian had but now-a-days, I think I would prefer knowing an upgrade is coming every 24 months and be able to plan for it.
[ / software / ubuntu] Trackbacks (0) Comments (0) permanent link permanent link
Sun, 19 Oct 2008
Christian worries about how to grow the desktop share in the free desktop.
Some recent events (Chromium, Geode) have led me to believe that … We've won … already.
For example let's look at the reactions to Chromium (which I believe was released way too early):
Linux and Mac versions have not been launched
Google announce ... Linux version ... delayed. Why do they do this by not considering ... Linux
I've just picked three links but the trend is clear. The digirati want to use Linux and Mac OS X to evaluate new technologies NOT Windows. Sure, some of them still have those boxes around for “client work”. But that is not what they use day-to-day.
Now let's take a look at Mozillas' Geode. Here is the Introduction to Geode. Look at the comments:
Why is it not compatible with Linux(first one)
Ele é compativel com linux?(seventh one)
In fact the outcry was enough for lack of Linux support that is merited a follow-up Common Geode Q&As:
Geode is meant as a temporary solution to allow websites to experiment with geolocation today. … Skyhook is built in. A side effect is that Linux isn't supported for the simple reason that Skyhook hasn't implemented Linux drivers. Although not ideal. …
A year ago this would not have happened. This amount of push-back from the digirati that the new technology they are supposed to look at and evaluate is not available on their platform would have been accepted as a matter of course.
Now, though, they all expect it on their platform of choice. We've won, already.
Whilst the largest user-base remains the Windows market, if you want the digirati to look at and evaluate what you have to offer it needs to work on Linux & Mac OS X. Another example, while I remember, is Adobe releasing Flash 10 for Linux on the same day as other platforms.
Unheard of.
So what does mean for Christian's question?
[ / software / gnome] Trackbacks (0) Comments (0) permanent link permanent link
Mon, 30 Jun 2008
No, I'm not talking about Melbourians (besides I believe that it is actually bogan). I mean bogon which is a quantum on bogosity and as applied to IP packets.
I run a number of nameservers, someone of them are slaves for some high-profile sites (e.g. gnome.org, linux.conf.au, openmoko.org, etc.), and some zones the nameservers are (dynamic) primaries for.
I had someone send me an email but my various systems refused to receive -- this I tracked down to BIND not returning any data when an MX request was received. This was particularly perplexing as my laptop, also running BIND, and some of my other test systems all had no trouble.
After much faffing about, including running BIND in debug mode on a production machine, I found this gem in the debug log:
... ignoring blackholed / bogus server ...
Ah ha! Lights clicked and it all fell into place. The network was on the DNS bogon list.
In case you do not want to run the full bogon list, or keep it up to do, here are the IPv4 network you should filter out (from RFC3330).
acl "rfc3330" {
// Filter out any IPv4 networks specified in RFC3330
// These networks (IP addresses) should rarely be seen
// in the wild on normal networks.
0.0.0.0/8;
10.0.0.0/8;
169.254.0.0/16;
172.16.0.0/12;
192.0.2.0/24;
192.168.0.0/16;
198.18.0.0/15;
224.0.0.0/3;
};
I've just updated from bogon list 5.9 to 6.3 across all my DNS machines. If you can remember if you have, or haven't, it might be worth checking too.
Oh, and if you require some assistance with DNS stuff, drop me a line.
Update: July 6th. Fixed URL for RFC3330.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Mon, 17 Mar 2008
Interesting report on how IPv4 was shut-off and everything continued to work.
Especially interesting was Google and the interesting logo effect.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Tue, 12 Feb 2008
Like most people I like good company. Good company and free booze is even better.
If you are in London, you missed out, as last week was when flag and bell was on. If you are going be around for their next event – 4th March 2008 – drop Megan a line.
Yes, people, it really is good company. And free beer.
Speaking of beer, those of you when a penchant for all things Python may want to come along to the London Python booze-up.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Mon, 16 Jul 2007
Like a lot of people, I've install Google Desktop for Linux.
First off, I've installed Beagle and Tracker before. So, I've played with a couple of these things. Obviously since I've installed GDL I felt that none of the existing Free Software solutions worked as well as I expected.
A while back I read Joe Shaw's note about how Beagle is tested with ~180K files. I considered this for a moment and realised that is why Beagle would turn my system into a pile of steaming dog poo.
My home directory has, normally, over 1,000,000 files (currently 893790 as I deleted some things before I fired up gtk-gnutella).
Considering Google handles web indexes significantly larger, you'd assume that their desktop search would be more than capable.
Alas.
I've had it installed for a week and it has achieved a 5% index. At least it does not chew up memory and only causes excessive CPU load. Oh, and the fact that it must have a browser (seemingly only Iceweasel will do) to use makes it even less useful. I'd let someone know but Google is also in on the whole "Let's make it as arduous as possible to report a problem" caper that seems to be common nowadays. Oh, well.
They went to all that time and effort to make a Debian package, why not put in the extra few minutes of work so that reportbug Just Works.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Tue, 06 Mar 2007
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Fri, 24 Mar 2006
Horms, why not use gworldclock?
Martin, I think you are after tra.
Andrew, you do realise that you could do that with yum – which has been in Debian for a while now. You'd have probably heard about it earlier if Mako could be bothered to get Atom 1.0 support working on Planet Debian.
Rodney, Nokia phones generally use Netfront as their default. If you want to use Opera you have to specify it. I'd be highly skepticle of KHTML being used anywhere memory footprint mattered.
It looks like it might be WebCore (dervied from KHTML) instead. But that is only on very recent phones (first half of 2006
).
Oh, and that is likely to be Yahoo merchant crawler. Yahoo probably thinks you are a corporate whore or something ;-).
Finally is it just me or does it strike anyone else as odd that the Mozilla Corporation, with all of its' money, is not able to get a crack group of hackers together so that Firefox 2.0 can render ACID2? At least two of the competitors can already do it, so, what's the go, Joe? (or in this case Mitchell).
[ / software] Trackbacks (0) Comments (1) permanent link permanent link
Thu, 16 Mar 2006
Interesting how Sun have also come to the same conclusion[1] as I have with respect to Distributed SCMs. Only bazaar, git and mercurial matter.
Also interesting is that for immediate targets they also recommend Subversion. Maybe I've been channeling Bill Joy or something? Anyway, earlier I couldn't decide which of the three to use.
Now I know that git is the way forward. The (multiple) interfaces help enourmously (cogito, git, StGit, P(atchy)g, etc.). It means if you have some funky interface, you can migrate slowly by reimplementing what you use with git plumbing.
Just as Carl Worth talks about reimplementing Hg using git. Another major factor is the culture on the mailing list(s). List culture encourages/discourages other participants. And the git list culture encourages lots of people to share very small changes.
Which has meant that git has caught up very quickly and eclipsed everything out there[2]. It really is odd reading that email and seeing just how far git has come.
Anyway it looks like what Sun are considering doing is that they might reimplement the interface of their internal tool (teamware) on top of git. If they can make that available, it'll advance things for everyone (again).
[ / software / vcs] Trackbacks (0) Comments (0) permanent link permanent link
Tue, 14 Mar 2006
I've been using VoIP for many years. Some thoughts.
Asterisk has never really appealed to me. I can't put a definite finger on why this is so but it feels like having email printed. A half-step along the way. It is a good halfway point but doesn't feel like a full solution.
What does is something which turns PSTN into SIP; then you can use a SIP router (SER, OpenSER, partysip, sipXrouter and many others) to do what you need.
That kind of device is something like a Sipura 3000. Very easy to setup to register to your own SIP router, where you can do the heavy lifting. Of course, you don't need to interface to the PSTN to take advantage of VoIP.
I have SIP accounts at bbpglobal, ekiga, fwd, iptel, openwengo, sipme, sipgate and voipuser. As well as few other, more private, networks.
NOTE: openwengo requires some work to retrieve the SIP id.
I've also been playing with gaim2 recently. It is the reason I'm only vaguely online – gaim2 breaks sound on my laptop – and that interferes with the VoIP stuff I do.
Anyway, one interesting feature of gaim2 is that it supports SIP IM extensions (presence basically). I was trying to debug why this wasn't working which meant I was doing some tcpdumping and noticed some SIP messages go past — I normally have twinkle (currently the best SIP softphone on Linux) running, so this wasn't unusual.
What was, is that the originating machine wasn't my own. It was my mothers computer. I decided to investigate.
It turns out that Yahoo Messenger (which my mother has signed up for so she could speak to her nephew) can actually speak SIP. This could also be part of the impending MSN / Yahoo IM networks interop. that is being completed.
I'm not sure how they will achieve that but from looking through the packet traces of Yahoo's "PC-to-PC" calling, some kind of negociation takes place of the YMessenger channel and a SIP channel is established between the client and a seperate set of (Akamai-sed) media servers. It also seems like they have some kind of SIP proxy which normal/old clients can speak to and which speaks back SIP.
From the network traces I've done, one side sends a cookie down the YMessenger protocol pipe, and the other side responds via the SIP pipe. From further traces no Linux client can (currently) interoperate with Yahoo's service until the client supports SIP over TCP, SIPS, RTP and RTCP, not to mention Yahoo's special cookie scheme.
Now both networks, Yahoo and MSN need to open themselves up so that they provide presence information externally (via SIP) and allow users to talk to anyone with a SIP address anywhere. You know, just like you can with email.
[ / software] Trackbacks (0) Comments (1) permanent link permanent link
Tue, 17 Jan 2006
The great thing about standards is that there are so many to
choose from
The same, of course, goes for VCS. I've used RCS, CVS, Subversion
(svn), Arch (larch, tla
and baz), Mercurial (hg),
git, Bazaar-NG (bzr), svk and no
doubt a few others I've forgotten, or wished I had.
The current state of the art in Free Software is Subversion IF you have to interoperate with developers who use Windows. That's it. Don't read further if you have Windows-based colleagues.
If, though,
you get to choose the technology, then based on my experience with all
of the above you then you should pick between: git,
hg and/or bzr.
None of
RCS, CVS nor svn are useful in
the long-term since they do not allow for distributed development and
branching. Yes, it can be done — a good example is
svk — but not without difficulty and lots of gnashing
of teeth. In svk's case, you need to be careful when
merging since svn (which is what svk uses
underneath) does not keep history or context.
I hit onto Arch
and was lucky enough to stumble upon Robert Collins who
guided my understanding of it and changesets. Unfortunately Arch was
led by Tom Lord, who has real issues with generating a community of
people around him. His first effort (larch), stagnated was
re-written (by Robert) in C++, and called barch, while he
wrote tla.
tla development also
stagnated and, eventually, Canonical forked it and called it
baz. I was very skeptical about a company like Canonical
sticking to their promise ("we'll develop it until version 1.5 where it
should be a good transition point to our next system"). I wasn't
surprised when they renegged on that committment. It is their right of
course, but it is a shame. Right now, if you have to use Arch —
and you haven't used it before — use tla. If you
have run into the limitations of tla, then use
baz but bear in mind that baz is stone-cold
dead as far as development is concerned. tla, is only cold
dead.
Which brings us to bzr, hg and
git. All three of these systems are very similiar.
Distributed development? Check.
Portable to everything (but
Windows, and that is changing too)? Check.
Implement the same
generic object-based filesystem? Check.
I've stayed away from
bzr since Canonical is supporting it; that isn't bad but it
does mean it'll forever be tied to what they want. It also means the
community around it is extremely small. bzr is interesting
in that it classifies everything as an object (directory, file, etc.)
and stores them in pre-classified directories. In particular it stores
file data in a 'weave' format (similiar to SCCS).
hg has a small, vibrant community around it but the problem
is the community is small. And, like bzr, it also stores
object in pre-classified direcoties – although in a
delta-compressed format for space reasons. Both are written in Python
(more about that latter) and have nice graphical tools to do things like
quilt and
three-way merges as well as visualising development history.
In
the end I've chosen git as my future revision system; it
has a development leader who encourages rather than discourages. The
documentation overshadows everything except CVS and
svns – and is on par with them. It is fast. it has
a large community behind it. You can use it at a number of levels
(git,cogito, stgit, etc.).
It has great support for importing to everything except
bzr and I'm yet to find any particular issue with it. Plus
it merging is very good. In fact, as Linus
points out you can have any merging startegy you like. So, any
theoretical advantages of hg and bzr are just
that, theoretical.
[ / software / vcs] Trackbacks (0) Comments (0) permanent link permanent link
Wed, 07 Dec 2005
Or, how to get thyself onto IPv6.
A lot of people when I mention IPv6 say Yeah, but who else is
using it?
. As of last year (2004) there are roughly 200
million Windows XP (or better) machines with IPv6 defaulted
on. [1] [2]
That doesn't include Linux, *BSDs, etc. If all these people have got IPv6 (oh, that is just those without NAT) then you've got to wonder just how many people in total have it enabled.
The next question I commonly hear is Yeah, but what can you do
with it?
. Of course you can run things as you were before and
that's fine.
Actually it is more than fine. Here is me pinging my default gateway.
eve:[~]% sudo ping -c 1000 -f 203.7.227.129 PING 203.7.227.129 (203.7.227.129) 56(84) bytes of data. --- 203.7.227.129 ping statistics --- 1000 packets transmitted, 1000 received, 0% packet loss, time 415ms rtt min/avg/max/mdev = 0.209/0.237/0.720/0.076 ms, ipg/ewma 0.416/0.564 ms
eve:[~]% sudo ping6 -c 1000 -f 2001:388:c0c5::1 PING 2001:388:c0c5::1(2001:388:c0c5::1) 56 data bytes --- 2001:388:c0c5::1 ping statistics --- 1000 packets transmitted, 1000 received, 0% packet loss, time 263ms rtt min/avg/max/mdev = 0.174/0.195/0.577/0.016 ms, ipg/ewma 0.263/0.196 ms
IPv6 is faster to process on the same hardware. Gentoo ricers take note! Okay, so you can run all your same protocols on top (and get a speed benefit) but what else?
Well things that require peer-to-peer connectivity, like VoIP and filesharing can particularly benefit. For example, gtk-gnutella recently acquired IPv6 support. And most 3G phones also use IPv6.
At the moment, though, most people are expending effort actually getting connected. Within Australia there are two way
You can use either mechanism but if you have a dynamic IPv4 address
the tunnel broker will be a better option as it will mean your IPv6
addresses will be fixed. If you are using Debian you will need to
install the tspc package – let me know of any
problems as I am the maintainer.
If you have a fixed IPv4 address you can use 6to4. 6to4 converts your IPv4 address (which is 32 bits) into hexadecimal and then adds '2002' to the front. Here is a quick example:
IPv4 address: 138.25.6.65 (decimal)
8a.19.06.41 (hexadecimal)
IPv6 address: 2002:8a19:0641::/48
You would then set your default router to be the 6to4 anycast address of either 192.88.99.1 (IPv4) or 2002:c058:6301:: (IPv6) — 10 points if you worked out the IPv6 address in advance.. That will get you to the closest topological point of interconnection between you (IPv4 mongrol that you are) the pristine shinyness of IPv6. In theory.
In practise, there are closer points at AARNet (ipv6.aarnet.net.au, 192.231.212.5) and at Telstra (203.14.5.7) but they are not advertised by the routing system. Which is why I currently recommend that even with a static address you use the tunnel broker — it's faster.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Thu, 24 Nov 2005
eve:[~]% firefox *** glibc detected *** free(): invalid next size (fast): 0x08bc9228 *** eve:[~]% amaya 04:22:56: Deleted stale lock file '/home/anand/amaya-anand'. *** glibc detected *** free(): invalid pointer: 0x0a47bb30 *** *** Amaya: Irrecoverable error ***zsh: abort (core dumped) amaya eve:[~]% galeon *** glibc detected *** malloc(): memory corruption: 0x081dcbf8 *** eve:[~]% epiphany *** glibc detected *** free(): invalid next size (fast): 0x08561540 ***
Fortunately I can still browse the web within Emacs but not Vi (or vim). For anyone else experiencing the same problem, MALLOC_CHECK_=1 might allow you to run some programs further (doesn't work for me though).
Update: It turns out my problems were related to SCIM and an
upgrade solved my issues. One things I did learn is that
firefox --debugger=gdb will give you a chance to get a
decent backtrace, especially if you have the relevant -dbg libraries
installed.
[ / software] Trackbacks (0) Comments (0) permanent link permanent link
Thu, 10 Nov 2005
Michael Still writes about Trackback pings.
I'm still not used to blosxom and how everything fits together but I thought I'd enumerate the plugins I've installed.
On my todo list is to convert from a table based layout to a fluid CSS one. It'll probably be a 3-columned look with fixed-width sidebars since negative margins looks are harder to get right.
[ / software / blosxom] Trackbacks (0) Comments (0) permanent link permanent link
Wed, 09 Nov 2005
Or 'mobloging' for short. Basically it is using your mobile phone to add content to your blog. All very interesting, except when you get to the details.
Stewart Smith gave it a whirl ([1], [2]) with fairly predictable results. This is because the message you might receive is dependent on the phone manufacturer and the MMC does to your message. And that is before it might be mangled along the way via email.
Basically most phones (or MMCs) will convert the content to either Base32 or, more commonly, Base64. Generally the MMS is composed of only two parts, and then sent to an email address. From there you'll have to write something that takes the email and converts it into a blog entry.
A while ago a friend of mine wanted to do the same, so I wrote some
perl to do it for him. It seemed to work for him (with some tweaks)
and it might be enough for you too. You can grab it here
However you might find it simpler to use GNU Arch and
register http://www.progsoc.org/~wildfire/arch/projects/ and then browse in wildfire@progsoc.org--projects/moblog.
[ / software / moblog] Trackbacks (0) Comments (0) permanent link permanent link
Thu, 03 Nov 2005
James Henstridge notes that zeroconf can cause large amounts of network traffic. Yes, that was true back in July. A bug was filed and then fixed within 2 days.
This was because I was at DebConf and able to see how zeroconf performed in a large environment. Basically there are two tests you do to determine whether an ARP packet is destined for you. And at the time, zeroconf, was only doing one of them.
Update: 18:20 AESTDavyd asks why would you use zeroconf over NetworkManager. I haven't been able to put my finger on exactly why, but I feel the design is wrong.
I do believe there should be an overall co-ordinating process looking after networking on the user-space side of the fence though. I've been thinking about writing something which would do it too; but I haven't fleshed out my ideas enough to commit my editor to coding.
Oh, one bug that NetworkManager does have is that it only allocates IPv4LL addresses when it fails to acquire one from the DHCP server. This is wrong and goes against RFC3927.
[ / software / zeroconf] Trackbacks (0) Comments (0) permanent link permanent link
Wed, 02 Nov 2005
First post. I too have decided to get into the whole blogging scene.
I looked around at various pieces of software and only blosxom and pyblosxom fitted my criteria.
My criteria was pretty simple:
Both blosxom and pyblosxom have those but I found it easier to get blosxom setup and running. Eventually I'll write up a colophon about what I have and how it is configured. However, please excuse the very rudimentary setup I have — it'll get better in time.
[ / software / blosxom] Trackbacks (0) Comments (0) permanent link permanent link
ॐ (aum) - what was, what is and what will be, wildfire's musings
Anand Kumria
wildfire@progsoc.org
Subscribe to a syndicated feed of my weblog, brought to you by the wonders of Atom.
Rendered in only 0.3255 seconds.