Categories
B4RM Computing

Better broadband for north Powys – part 2

Following my previous post about better broadband for north Powys, I tried to do some initial investigation on Facebook to see if this was something that would have enough interest to investigate further. I posted on local pages, mainly for villages in the Tanat valley, asking if people would be interested. Overall I was happy with the responses, and felt it warranted further investigation.

I have been in contact with B4RN to investigating the feasibility of working with them to connect to their existing Cheshire network, to bring high speed broadband to our local area, initially the Tanat valley and maybe the Cain valley areas, but there’s potential for the coverage area to grow.

For context B4RN now cover thousands of properties, over an area from Preston to Tebay and from Carnforth to Settle. That’s like the whole of Montgomeryshire (from several miles north west of Oswestry down past Llanidloes, and from Welshpool to Machynlleth). So that shows that not only is such a scheme possible, but that it can grow to benefit adjacent areas.


QUESTIONS

What would it cost to build and run such a network?
Initial rough estimates, based on B4RN’s experience are that the build cost of the network to each property is usually in the range of £1500 per property, though this may rise to £2500 for more complex properties
The cost of backhaul connectivity (i.e. connecting out network to the existing network in Cheshire would be around £22,000 per annum.

What would it cost to use?
B4RN’s existing prices are a £150 installation fee (waived if you invest £1500 in shares), then £30 per month.

How many people would be needed to make the scheme viable?
The initial estimate is that 250 properties would be needed for the scheme to be viable. The Tanat valley has around 1400 properties, and a 30% take up would yield 420 properties.

What financial help is available?
There are existing government voucher schemes, both from the Department of Culture, Media and Sport, and from Welsh government to assist with the costs of installing gigabit broadband. According to the Welsh government Gigabit Broadband voucher scheme web page, “for group projects in Wales up to £5,500 is available per business and up to £800 is available per residential property”. This could cover a large part of the build cost.

What areas would be covered?
Initially the Tanat valley is the area where most opinion has been canvassed. This includes: Llangynog; Hirnant; Penybontfawr; Llanrhaeadr-Ym-Mochnant; Rhos-y-Brithdir; Llangedwyn; Pen-y-Bont Llanerch Emrys.
There was also some interest expressed from the Cain valley. This includes: Llanfyllin; Llanfechain; Llansantffraid-Ym-Mechain.

What is needed next?
The next step is to try and get more people interested in the idea, see if we can get advocates, and people to sign up.

Categories
Rails

Ruby and Ruby on Rails version compatibility

I have recently been planning upgrades for an application which runs on both an old version of Ruby on Rails and an old version of Ruby.

The recommended upgrade path for rails is to upgrade through each version, rather than try and jump several versions in one go.  I.e 3.2 to 4.0 to 4.1 to 4.2 to 5.0 to 5.1 to 5.2. At each stage, a compatible version of Ruby will need to be used.

Finding which versions of Ruby are compatible with each rails version is quite hard, and while some rails release notes have recommended or minimum Ruby versions listed, there doesn’t seem to be a list of supported versions.

Googling reveals only old answers.

So I decided to see which versions of Ruby the rails project was testing against for each branch, on the basis that you wouldn’t test something if you weren’t going to try to support it. (UDPATE: Verified by David Heinemeier-Hansson)

From 9th April 2019, Buildkite was used for testing, so this information can be found in the rails.gemspec file in the rails source.

Versions of ruby specified by rails.gemspec, by -stable branch, excluding ruby-head:

Rails 6.0

  • >= 2.5.0

Rails 5.2

  • >= 2.2.2

Rails 5.1

  • >= 2.2.2

Rails 5.0

  • >= 2.2.2

Rails 4.2

  • >= 1.9.3

Rails 4.1

  • >= 1.9.3

Rails 4.0

  • >= 1.9.3

Rails 3.2

  • >= 1.8.7

Rails 3.1

  • >= 1.8.7

Rails 3.0

  • >= 1.8.7

Prior to 9th April 2019, travis-ci was used for testing, so this information can be found in the .travis.yml file in the rails source. Note that the .travis.yml file was removed from the rails source, so you’ll need to view the source prior to this commit.

Versions of ruby that were specified by .travis.yml, by -stable branch, excluding ruby-head:

Rails 3.0

  • 1.8.7
  • 1.9.2
  • 1.9.3

Rails 3.1

  • 1.8.7
  • 1.9.2
  • 1.9.3

Rails 3.2

  • 1.8.7
  • 1.9.2
  • 1.9.3
  • 2.0.0
  • 2.1.8
  • 2.2.6
  • 2.3.3

Rails 4.0

  • 1.9.3
  • 2.0.0
  • 2.1
  • 2.2

Rails 4.1

  • 1.9.3
  • 2.0.0
  • 2.1
  • 2.2.4
  • 2.3.0

Rails 4.2

  • 1.9.3
  • 2.0.0-p648
  • 2.1.10
  • 2.2.10
  • 2.3.8
  • 2.4.5

Rails 5.0

  • 2.2.10
  • 2.3.8
  • 2.4.5

Rails 5.1

  • 2.2.10
  • 2.3.7
  • 2.4.4
  • 2.5.1

Rails 5.2

  • 2.2.10
  • 2.3.7
  • 2.4.4
  • 2.5.1

Rails 6.0

  • 2.5.3
  • 2.6.0
Correct as of 3rd January 2020.
Categories
B4RM Computing

Better broadband for North Powys

I’ve lived in Powys for 10 years, and I’ve always had good broadband, as I live only 200 metres from the telephone exchange. This means that I’ve got used to being able to watch Netflix, stream music, backup devices to the cloud, FaceTime people and work from home, connecting back to work.

Many people in Powys aren’t so lucky though. Powys is the most sparsely populated county in England and Wales, and broadband provision is either difficult or impossible.

Soon, I hope to join them, as I’m moving house. The house I’m planning to move to has an estimated broadband speed of 1 Mbps. That’s poor by today’s standards.

There are options to get faster internet connectivity, such as satellite broadband, and subsidies are available (in Wales) to help with installation costs. It seems overly complicated though, it’s often not as fast as good broadband, and it can be quite pricy too.

There is an option though, for better broadband, which is quite radical, but not a pipe dream, and has been done before.

Build it yourself.

Rural Lancashire faces the same connectivity problems as Powys, and for the last 6 years B4RN have been successfully laying fibre optics to households and businesses in the area, providing fast internet connections at a very reasonable price. The best thing is that they distribute their profits to the local community.

How do they do this? In a nutshell they:

  • Set up as a community benefit society — a special type of legal entity.
  • Raise funding by issuing shares, in a manner which attracts investment from locals and makes investment advantageous for taxation purposes.
  • Choose a central point in their coverage area to connect to the internet at a very high speed.
  • Get landowners to grant wayleaves for buried cables to cross their land
  • Get local volunteers involved to lay fibre optic cables crossing country from the central point to local communities, offering shares in exchange for effort.
  • Offer fast internet connectivity to everyone in the community, at very reasonable prices.

B4RN have been doing this since 2001, and have been making a success of it.

To provide a comparison, I currently pay £39 per month for line rental and 80(ish) Mbps internet connectivity. When I move, I expect to pay £25 per month for line rental and 1(ish) Mbps internet connectivity. B4RN currently offer their customers 1000 Mbps internet connectivity for £150 installation charge, plus £30 per month.

I don’t see any reason why something similar to what B4RN are doing in Lancashire couldn’t be done in North Powys.

What’s needed is for people to express their serious interest, whether that’s interest in investing in a community benefit scheme, interest in being a potential customer, interest in helping build it, or interest in general.

So, who’s interested?

If you’re interested in translating this article in to Welsh I’d love to hear from you.

Want to see someone else’s experience of B4RN? Have a look at this article.

Finally, what areas this might benefit from this (not an exhaustive list):

  • Llanwddyn
  • Llanfyllin
  • Llangynog
  • Penybontfawr
  • Llanrhaedr-ym-mochnant
  • Llangedwyn
  • Llanfechain
  • Bwlch-y-cibau
  • Meifod
Categories
Business Computing Information Security

Starting out alone in Information Security and IT consultancy

After 10 years with my previous employer I was made redundant at the end of January.

Rather than rush straight to the job boards in a state of panic, I’m looking at this as an opportunity.

For several years I have considered Information Security and IT consultancy as a career path, but never been in a position to take the first big step. Now I have that opportunity.

So, Option 13 is now available to service the Information Security and IT needs of small and medium businesses looking for an experienced consultant.

Categories
FreeBSD

BitTorrent Magnet links for FreeBSD

Since the FreeBSD torrent tracker has been taken offline, and it appears that it won’t be coming back, you may be able to use a magnet link, so here they are. Each magnet link announces to three public trackers, to try and increase the size of the swarm.

Current FreeBSD versions

FreeBSD-7.4-RELEASE-amd64-all
FreeBSD-7.4-RELEASE-amd64-bootonly
FreeBSD-7.4-RELEASE-amd64-disc1
FreeBSD-7.4-RELEASE-amd64-disc2
FreeBSD-7.4-RELEASE-amd64-disc3
FreeBSD-7.4-RELEASE-amd64-docs
FreeBSD-7.4-RELEASE-amd64-dvd1
FreeBSD-7.4-RELEASE-amd64-livefs
FreeBSD-7.4-RELEASE-i386-all
FreeBSD-7.4-RELEASE-i386-bootonly
FreeBSD-7.4-RELEASE-i386-disc1
FreeBSD-7.4-RELEASE-i386-disc2
FreeBSD-7.4-RELEASE-i386-disc3
FreeBSD-7.4-RELEASE-i386-docs
FreeBSD-7.4-RELEASE-i386-dvd1
FreeBSD-7.4-RELEASE-i386-livefs
FreeBSD-8.3-RELEASE-amd64-all
FreeBSD-8.3-RELEASE-amd64-bootonly
FreeBSD-8.3-RELEASE-amd64-disc1
FreeBSD-8.3-RELEASE-amd64-dvd1
FreeBSD-8.3-RELEASE-amd64-livefs
FreeBSD-8.3-RELEASE-amd64-memstick
FreeBSD-8.3-RELEASE-i386-all
FreeBSD-8.3-RELEASE-i386-bootonly
FreeBSD-8.3-RELEASE-i386-disc1
FreeBSD-8.3-RELEASE-i386-dvd1
FreeBSD-8.3-RELEASE-i386-livefs
FreeBSD-8.3-RELEASE-i386-memstick
FreeBSD-9.1-RELEASE-amd64-all
FreeBSD-9.1-RELEASE-amd64-bootonly
FreeBSD-9.1-RELEASE-amd64-disc1
FreeBSD-9.1-RELEASE-amd64-dvd1
FreeBSD-9.1-RELEASE-amd64-memstick
FreeBSD-9.1-RELEASE-i386-all
FreeBSD-9.1-RELEASE-i386-bootonly
FreeBSD-9.1-RELEASE-i386-disc1
FreeBSD-9.1-RELEASE-i386-dvd1
FreeBSD-9.1-RELEASE-i386-memstick
FreeBSD-7.4-RELEASE-pc98-all
FreeBSD-7.4-RELEASE-pc98-bootonly
FreeBSD-7.4-RELEASE-pc98-disc1
FreeBSD-7.4-RELEASE-pc98-livefs
FreeBSD-7.4-RELEASE-sparc64-all
FreeBSD-7.4-RELEASE-sparc64-bootonly
FreeBSD-7.4-RELEASE-sparc64-disc1
FreeBSD-7.4-RELEASE-sparc64-disc2
FreeBSD-7.4-RELEASE-sparc64-disc3
FreeBSD-7.4-RELEASE-sparc64-docs
FreeBSD-8.3-RELEASE-pc98-all
FreeBSD-8.3-RELEASE-pc98-bootonly
FreeBSD-8.3-RELEASE-pc98-disc1
FreeBSD-8.3-RELEASE-pc98-livefs
FreeBSD-8.3-RELEASE-sparc64-all
FreeBSD-8.3-RELEASE-sparc64-bootonly
FreeBSD-8.3-RELEASE-sparc64-disc1
FreeBSD-8.3-RELEASE-sparc64-dvd1
FreeBSD-8.3-RELEASE-sparc64-livefs
FreeBSD-9.1-RELEASE-powerpc64-all
FreeBSD-9.1-RELEASE-powerpc64-bootonly
FreeBSD-9.1-RELEASE-powerpc64-memstick
FreeBSD-9.1-RELEASE-powerpc64-release
FreeBSD-9.1-RELEASE-sparc64-all
FreeBSD-9.1-RELEASE-sparc64-bootonly
FreeBSD-9.1-RELEASE-sparc64-disc1

Previous FreeBSD versions

5.5-RELEASE-alpha-all
5.5-RELEASE-alpha-bootonly
5.5-RELEASE-alpha-disc1
5.5-RELEASE-alpha-disc2
5.5-RELEASE-pc98-all
5.5-RELEASE-pc98-disc1
5.5-RELEASE-sparc64-all
5.5-RELEASE-sparc64-bootonly
5.5-RELEASE-sparc64-disc1
5.5-RELEASE-sparc64-disc2
6.1-RELEASE-alpha-all
6.1-RELEASE-alpha-bootonly
6.1-RELEASE-alpha-disc1
6.1-RELEASE-alpha-disc2
6.1-RELEASE-ia64-all
6.1-RELEASE-ia64-bootonly
6.1-RELEASE-ia64-disc1
6.1-RELEASE-ia64-disc2
6.1-RELEASE-ia64-livefs
6.1-RELEASE-pc98-all
6.1-RELEASE-pc98-disc1
6.1-RELEASE-sparc64-all
6.1-RELEASE-sparc64-bootonly
6.1-RELEASE-sparc64-disc1
6.1-RELEASE-sparc64-disc2
6.2-RELEASE-alpha-all
6.2-RELEASE-alpha-bootonly
6.2-RELEASE-alpha-disc1
6.2-RELEASE-alpha-docs
6.2-RELEASE-ia64-all
6.2-RELEASE-ia64-bootonly
6.2-RELEASE-ia64-disc1
6.2-RELEASE-ia64-disc2
6.2-RELEASE-ia64-docs
6.2-RELEASE-ia64-livefs
6.2-RELEASE-pc98-all
6.2-RELEASE-pc98-bootonly
6.2-RELEASE-pc98-disc1
6.2-RELEASE-sparc64-all
6.2-RELEASE-sparc64-bootonly
6.2-RELEASE-sparc64-disc1
6.2-RELEASE-sparc64-disc2
6.2-RELEASE-sparc64-docs
6.3-RELEASE-alpha-all
6.3-RELEASE-alpha-bootonly
6.3-RELEASE-alpha-disc1
6.3-RELEASE-alpha-disc2
6.3-RELEASE-alpha-disc3
6.3-RELEASE-alpha-docs
6.3-RELEASE-pc98-all
6.3-RELEASE-pc98-bootonly
6.3-RELEASE-pc98-disc1
6.3-RELEASE-sparc64-all
6.3-RELEASE-sparc64-bootonly
6.3-RELEASE-sparc64-disc1
6.3-RELEASE-sparc64-disc2
6.3-RELEASE-sparc64-disc3
6.3-RELEASE-sparc64-docs
6.4-RELEASE-pc98-all
6.4-RELEASE-pc98-bootonly
6.4-RELEASE-pc98-disc1
6.4-RELEASE-sparc64-all
6.4-RELEASE-sparc64-bootonly
6.4-RELEASE-sparc64-disc1
6.4-RELEASE-sparc64-docs
7.0-RELEASE-ia64-all
7.0-RELEASE-ia64-bootonly
7.0-RELEASE-ia64-disc1
7.0-RELEASE-ia64-disc2
7.0-RELEASE-ia64-disc3
7.0-RELEASE-ia64-docs
7.0-RELEASE-ia64-livefs
7.0-RELEASE-pc98-all
7.0-RELEASE-pc98-bootonly
7.0-RELEASE-pc98-disc1
7.0-RELEASE-pc98-livefs
7.0-RELEASE-powerpc-all
7.0-RELEASE-powerpc-bootonly
7.0-RELEASE-powerpc-disc1
7.0-RELEASE-powerpc-disc2
7.0-RELEASE-powerpc-disc3
7.0-RELEASE-powerpc-docs
7.1-RELEASE-ia64-all
7.1-RELEASE-ia64-bootonly
7.1-RELEASE-ia64-disc1
7.1-RELEASE-ia64-disc2
7.1-RELEASE-ia64-disc3
7.1-RELEASE-ia64-docs
7.1-RELEASE-ia64-livefs
7.1-RELEASE-pc98-all
7.1-RELEASE-pc98-bootonly
7.1-RELEASE-pc98-disc1
7.1-RELEASE-pc98-livefs
7.1-RELEASE-powerpc-all
7.1-RELEASE-powerpc-bootonly
7.1-RELEASE-powerpc-disc1
7.1-RELEASE-powerpc-disc2
7.1-RELEASE-powerpc-disc3
7.1-RELEASE-powerpc-docs
7.1-RELEASE-sparc64-all
7.1-RELEASE-sparc64-bootonly
7.1-RELEASE-sparc64-disc1
7.1-RELEASE-sparc64-disc2
7.1-RELEASE-sparc64-disc3
7.1-RELEASE-sparc64-docs
7.2-RELEASE-ia64-all
7.2-RELEASE-ia64-bootonly
7.2-RELEASE-ia64-disc1
7.2-RELEASE-ia64-docs
7.2-RELEASE-ia64-livefs
7.2-RELEASE-pc98-all
7.2-RELEASE-pc98-bootonly
7.2-RELEASE-pc98-disc1
7.2-RELEASE-pc98-livefs
7.2-RELEASE-powerpc-all
7.2-RELEASE-powerpc-bootonly
7.2-RELEASE-powerpc-disc1
7.2-RELEASE-powerpc-docs
7.2-RELEASE-sparc64-all
7.2-RELEASE-sparc64-bootonly
7.2-RELEASE-sparc64-disc1
7.2-RELEASE-sparc64-docs
8.0-RELEASE-ia64-all
8.0-RELEASE-ia64-bootonly
8.0-RELEASE-ia64-disc1
8.0-RELEASE-ia64-disc2
8.0-RELEASE-ia64-disc3
8.0-RELEASE-ia64-dvd1
8.0-RELEASE-ia64-livefs
8.0-RELEASE-pc98-all
8.0-RELEASE-pc98-bootonly
8.0-RELEASE-pc98-disc1
8.0-RELEASE-pc98-livefs
8.0-RELEASE-powerpc-all
8.0-RELEASE-powerpc-bootonly
8.0-RELEASE-powerpc-disc1
8.0-RELEASE-powerpc-disc2
8.0-RELEASE-powerpc-disc3
8.0-RELEASE-sparc64-all
8.0-RELEASE-sparc64-bootonly
8.0-RELEASE-sparc64-disc1
8.0-RELEASE-sparc64-dvd1
8.0-RELEASE-sparc64-livefs
8.1-RELEASE-ia64-all
8.1-RELEASE-pc98-all
8.1-RELEASE-powerpc-all
8.1-RELEASE-sparc64-all
FreeBSD-7.3-RELEASE-pc98-all
FreeBSD-7.3-RELEASE-pc98-bootonly
FreeBSD-7.3-RELEASE-pc98-disc1
FreeBSD-7.3-RELEASE-pc98-livefs
FreeBSD-7.3-RELEASE-sparc64-all
FreeBSD-7.3-RELEASE-sparc64-bootonly
FreeBSD-7.3-RELEASE-sparc64-disc1
FreeBSD-7.3-RELEASE-sparc64-disc2
FreeBSD-7.3-RELEASE-sparc64-disc3
FreeBSD-7.3-RELEASE-sparc64-docs
FreeBSD-8.1-RELEASE-ia64-bootonly
FreeBSD-8.1-RELEASE-ia64-disc1
FreeBSD-8.1-RELEASE-ia64-dvd1
FreeBSD-8.1-RELEASE-ia64-livefs
FreeBSD-8.1-RELEASE-pc98-bootonly
FreeBSD-8.1-RELEASE-pc98-disc1
FreeBSD-8.1-RELEASE-pc98-livefs
FreeBSD-8.1-RELEASE-powerpc-bootonly
FreeBSD-8.1-RELEASE-powerpc-disc1
FreeBSD-8.1-RELEASE-sparc64-bootonly
FreeBSD-8.1-RELEASE-sparc64-disc1
FreeBSD-8.1-RELEASE-sparc64-dvd1
FreeBSD-8.1-RELEASE-sparc64-livefs
FreeBSD-8.2-RELEASE-ia64-all
FreeBSD-8.2-RELEASE-ia64-bootonly
FreeBSD-8.2-RELEASE-ia64-disc1
FreeBSD-8.2-RELEASE-ia64-dvd1
FreeBSD-8.2-RELEASE-ia64-livefs
FreeBSD-8.2-RELEASE-pc98-all
FreeBSD-8.2-RELEASE-pc98-bootonly
FreeBSD-8.2-RELEASE-pc98-disc1
FreeBSD-8.2-RELEASE-pc98-livefs
FreeBSD-8.2-RELEASE-powerpc-all
FreeBSD-8.2-RELEASE-powerpc-bootonly
FreeBSD-8.2-RELEASE-powerpc-disc1
FreeBSD-8.2-RELEASE-powerpc-livefs
FreeBSD-8.2-RELEASE-sparc64-all
FreeBSD-8.2-RELEASE-sparc64-bootonly
FreeBSD-8.2-RELEASE-sparc64-disc1
FreeBSD-8.2-RELEASE-sparc64-dvd1
FreeBSD-8.2-RELEASE-sparc64-livefs
FreeBSD-9.0-RELEASE-ia64-all
FreeBSD-9.0-RELEASE-ia64-bootonly
FreeBSD-9.0-RELEASE-ia64-memstick
FreeBSD-9.0-RELEASE-ia64-release
FreeBSD-9.0-RELEASE-powerpc-all
FreeBSD-9.0-RELEASE-powerpc-bootonly
FreeBSD-9.0-RELEASE-powerpc-memstick
FreeBSD-9.0-RELEASE-powerpc-release
FreeBSD-9.0-RELEASE-powerpc64-all
FreeBSD-9.0-RELEASE-powerpc64-bootonly
FreeBSD-9.0-RELEASE-powerpc64-memstick
FreeBSD-9.0-RELEASE-powerpc64-release
FreeBSD-9.0-RELEASE-sparc64-all
FreeBSD-9.0-RELEASE-sparc64-bootonly
FreeBSD-9.0-RELEASE-sparc64-disc1
5.5-RELEASE-amd64-all
5.5-RELEASE-amd64-bootonly
5.5-RELEASE-amd64-disc1
5.5-RELEASE-amd64-disc2
5.5-RELEASE-i386-all
5.5-RELEASE-i386-bootonly
5.5-RELEASE-i386-disc1
5.5-RELEASE-i386-disc2
6.1-RELEASE-amd64-all
6.1-RELEASE-amd64-bootonly
6.1-RELEASE-amd64-disc1
6.1-RELEASE-amd64-disc2
6.1-RELEASE-i386-all
6.1-RELEASE-i386-bootonly
6.1-RELEASE-i386-disc1
6.1-RELEASE-i386-disc2
6.2-RELEASE-amd64-all
6.2-RELEASE-amd64-bootonly
6.2-RELEASE-amd64-disc1
6.2-RELEASE-amd64-disc2
6.2-RELEASE-amd64-docs
6.2-RELEASE-i386-all
6.2-RELEASE-i386-bootonly
6.2-RELEASE-i386-disc1
6.2-RELEASE-i386-disc2
6.2-RELEASE-i386-docs
6.3-RELEASE-amd64-all
6.3-RELEASE-amd64-bootonly
6.3-RELEASE-amd64-disc1
6.3-RELEASE-amd64-disc2
6.3-RELEASE-amd64-disc3
6.3-RELEASE-amd64-docs
6.3-RELEASE-i386-all
6.3-RELEASE-i386-bootonly
6.3-RELEASE-i386-disc1
6.3-RELEASE-i386-disc2
6.3-RELEASE-i386-disc3
6.3-RELEASE-i386-docs
6.4-RELEASE-amd64-all
6.4-RELEASE-amd64-bootonly
6.4-RELEASE-amd64-disc1
6.4-RELEASE-amd64-disc2
6.4-RELEASE-amd64-disc3
6.4-RELEASE-amd64-docs
6.4-RELEASE-i386-all
6.4-RELEASE-i386-bootonly
6.4-RELEASE-i386-disc1
6.4-RELEASE-i386-disc2
6.4-RELEASE-i386-disc3
6.4-RELEASE-i386-docs
7.0-RELEASE-amd64-all
7.0-RELEASE-amd64-bootonly
7.0-RELEASE-amd64-disc1
7.0-RELEASE-amd64-disc2
7.0-RELEASE-amd64-disc3
7.0-RELEASE-amd64-docs
7.0-RELEASE-amd64-livefs
7.0-RELEASE-i386-all
7.0-RELEASE-i386-bootonly
7.0-RELEASE-i386-disc1
7.0-RELEASE-i386-disc2
7.0-RELEASE-i386-disc3
7.0-RELEASE-i386-docs
7.0-RELEASE-i386-livefs
7.1-RELEASE-amd64-all
7.1-RELEASE-amd64-bootonly
7.1-RELEASE-amd64-disc1
7.1-RELEASE-amd64-disc2
7.1-RELEASE-amd64-disc3
7.1-RELEASE-amd64-docs
7.1-RELEASE-amd64-dvd1
7.1-RELEASE-amd64-livefs
7.1-RELEASE-i386-allv
7.1-RELEASE-i386-bootonly
7.1-RELEASE-i386-disc1
7.1-RELEASE-i386-disc2
7.1-RELEASE-i386-disc3
7.1-RELEASE-i386-docs
7.1-RELEASE-i386-dvd1
7.1-RELEASE-i386-livefs
7.2-RELEASE-amd64-all
7.2-RELEASE-amd64-bootonly
7.2-RELEASE-amd64-disc1
7.2-RELEASE-amd64-disc2
7.2-RELEASE-amd64-disc3
7.2-RELEASE-amd64-docs
7.2-RELEASE-amd64-dvd1
7.2-RELEASE-amd64-livefs
7.2-RELEASE-i386-all
7.2-RELEASE-i386-bootonly
7.2-RELEASE-i386-disc1
7.2-RELEASE-i386-disc2
7.2-RELEASE-i386-disc3
7.2-RELEASE-i386-docs
7.2-RELEASE-i386-dvd1
7.2-RELEASE-i386-livefs
8.0-RELEASE-amd64-all
8.0-RELEASE-amd64-bootonly
8.0-RELEASE-amd64-disc1
8.0-RELEASE-amd64-dvd1
8.0-RELEASE-amd64-livefs
8.0-RELEASE-amd64-memstick
8.0-RELEASE-i386-all
8.0-RELEASE-i386-bootonly
8.0-RELEASE-i386-disc1
8.0-RELEASE-i386-dvd1
8.0-RELEASE-i386-livefs
8.0-RELEASE-i386-memstick
8.1-RELEASE-amd64-all
8.1-RELEASE-i386-all
FreeBSD-7.3-RELEASE-amd64-all
FreeBSD-7.3-RELEASE-amd64-bootonly
FreeBSD-7.3-RELEASE-amd64-disc1
FreeBSD-7.3-RELEASE-amd64-disc2
FreeBSD-7.3-RELEASE-amd64-disc3
FreeBSD-7.3-RELEASE-amd64-docs
FreeBSD-7.3-RELEASE-amd64-dvd1
FreeBSD-7.3-RELEASE-amd64-livefs
FreeBSD-7.3-RELEASE-i386-all
FreeBSD-7.3-RELEASE-i386-bootonly
FreeBSD-7.3-RELEASE-i386-disc1
FreeBSD-7.3-RELEASE-i386-disc2
FreeBSD-7.3-RELEASE-i386-disc3
FreeBSD-7.3-RELEASE-i386-docs
FreeBSD-7.3-RELEASE-i386-dvd1
FreeBSD-7.3-RELEASE-i386-livefs
FreeBSD-8.1-RELEASE-amd64-bootonly
FreeBSD-8.1-RELEASE-amd64-disc1
FreeBSD-8.1-RELEASE-amd64-dvd1
FreeBSD-8.1-RELEASE-amd64-livefs
FreeBSD-8.1-RELEASE-amd64-memstick
FreeBSD-8.1-RELEASE-i386-bootonly
FreeBSD-8.1-RELEASE-i386-disc1
FreeBSD-8.1-RELEASE-i386-dvd1
FreeBSD-8.1-RELEASE-i386-livefs
FreeBSD-8.1-RELEASE-i386-memstick
FreeBSD-8.2-RELEASE-amd64-all
FreeBSD-8.2-RELEASE-amd64-bootonly
FreeBSD-8.2-RELEASE-amd64-disc1
FreeBSD-8.2-RELEASE-amd64-dvd1
FreeBSD-8.2-RELEASE-amd64-livefs
FreeBSD-8.2-RELEASE-amd64-memstick
FreeBSD-8.2-RELEASE-i386-all
FreeBSD-8.2-RELEASE-i386-bootonly
FreeBSD-8.2-RELEASE-i386-disc1
FreeBSD-8.2-RELEASE-i386-dvd1
FreeBSD-8.2-RELEASE-i386-livefs
FreeBSD-8.2-RELEASE-i386-memstick
FreeBSD-9.0-RELEASE-amd64-all
FreeBSD-9.0-RELEASE-amd64-bootonly
FreeBSD-9.0-RELEASE-amd64-disc1
FreeBSD-9.0-RELEASE-amd64-dvd1
FreeBSD-9.0-RELEASE-amd64-memstick
FreeBSD-9.0-RELEASE-i386-all
FreeBSD-9.0-RELEASE-i386-bootonly
FreeBSD-9.0-RELEASE-i386-disc1
FreeBSD-9.0-RELEASE-i386-dvd1
FreeBSD-9.0-RELEASE-i386-memstick

Categories
FreeBSD

Installing sqlite3 ruby gem on FreeBSD

If you try to install (or update) the sqlite3 ruby gem on FreeBSD, you might get the following error:

sudo gem update sqlite3
Updating installed gems
Updating sqlite3
Fetching: sqlite3-1.3.5.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing sqlite3:
ERROR: Failed to build gem native extension.

/usr/local/bin/ruby18 extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal'
or 'yum install sqlite-devel' and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/bin/ruby18
--with-sqlite3-dir
--without-sqlite3-dir
--with-sqlite3-include
--without-sqlite3-include=${sqlite3-dir}/include
--with-sqlite3-lib
--without-sqlite3-lib=${sqlite3-dir}/lib
--enable-local
--disable-local

Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.5 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
Nothing to update

The gem doesn’t include the correct locations to check for the sqlite3 headers, so we’ll have to tell it where to look ourself:

sudo CONFIGURE_ARGS="with-sqlite3-include=/usr/local/include" gem install sqlite3

Job done.

Categories
Computing

Netgear DGN1000 review

After an intermittent failure of my previous ADSL router, I thought long and hard about whether I could justify spending many hundreds of pounds on a nice Cisco 1800, I decided to go cheap and buy a bottom-of-the-range Netgear. After all, I’d had Netgear routers in the past, with few problems. So I bought the Netgear DGN1000.
The best thing about this router is that it has a power button. This is useful because you’ll be using it a lot.
The biggest problem with this router is that it randomly stops routing data between the WAN and the wireless network. Or sometimes it does route data, but at around 1Kb/s. Sometimes this failure to route data happens after several hours, sometimes it can happen within minutes. The only resolution is to reboot the router.
So apart from the constant failures, it’s fine. Except the automatic firmware update doesn’t work (it fails to recognise that there’s a newer firmware available), and WPS doesn’t appear to work at all.
This is the first piece of IT hardware I’ve ever felt like driving over in my car.
On this occasion I’ll return it as faulty instead.

Categories
Computing FreeBSD Windows

My Ideal Operating System

What would my ideal Operating System look like?

  • Really small minimal installation. You know, like OpenBSD.
  • Thorough and comprehensive help pages. You know, like OpenBSD.
  • The ability to simply administer the OS remotely. You now, like SSH on OpenBSD.
  • Excellent, easy to configure firewall. You know, like pf on OpenBSD.
  • Easy to configure network redundancy. You know, like CARP on OpenBSD.
  • All communications between servers to be on well-determined ports.
  • Easy to manage centralised authentication. You know, like Active Directory on Windows.
  • Redundancy of authentication servers. You know, like Active Directory on Windows.
  • Automatic replication between authentication servers. You know, like Active Directory on Windows.
  • Automatic discovery of authentication servers using a simple system like DNS. You know, like Active Directory on Windows.
  • The ability to configure settings on clients centrally. You know, like Group Policy on Windows.
  • The ability to manage disks in almost any way imaginable. You know, like Veritas Storage Foundation.
  • The ability to replicate disks between systems. You know, like Veritas Volume Replicator.
  • Easy to use clustering. You know, like Veritas Cluster Server.
  • The ability to simply install OS updates. You know, like freebsd-update on FreeBSD.
  • The ability to centrally manage OS updates across the organisation, downloading only once. You know, like WSUS on Windows.
  • Centralised logging.
  • Built-in monitoring of hardware sensors. You know, like sysctl hw.sensors on OpenBSD.
  • Everything monitorable by SNMP.
  • A clear support lifetime policy. You know, like OpenBSD.
  • And finally, I want it Open Source. You know, like BSD-type open.

Is that too much to ask?

Categories
Rails

The problem with renaming a model in Rails

So you’ve decided to rename a model in Rails. What could be simpler than renaming and editing a bunch of files? You make your edits in development, run migrations and so on.
There’s a potential issue you might hit though. Suppose you have model Foo, which you want to modify (e.g. add a column). So you create a migration with:
add_column :foo, :quantity, :integer
…and you run your migration.
Then you decide you want to rename the model to Bar. So you use rename_table in your migration, and rename and edit the appropriate files. All works beautifully.
Now you come to deploy, and it all goes wrong when you migrate the database, saying it can’t find the model. The reason? Well your first migration now refers to a model that doesn’t exist, because the new model file is in place.
The messy solution is to perform the migration yourself, by renaming the database table directly in the database.
The clean solution is to avoid making changes like this in the first place. I guess it’s an example of where “deploy often” can reap benefits.

Categories
Rails

Renaming a model in Rails

When renaming a model in Rails (2.3), there are a range of files you may need to change:

Create a migration to rename the database table:

(rename_table :oldname, :newname)

Rename the model.
Edit any associations in other models.
Rename the controller (if required)
Modify routes.rb
Modify any links in views.
Rename views.
Rename the model in controllers and views.
Rename and modify any tests.

Moral of the story – name your models correctly from the start. Keep them as generic as possible. This post came about because I initially had a model for appointments for training sessions, so the model TrainingSession was created. Then I needed to store appointments which were for a different type of session, but I kept the model name the same, as it was only seen internally, and used a named scope. Now I need to store appointments of any type, so having code referring to TrainingSession will still work, but it makes it counterintuitive to refer to generic appointments as TrainingSession.generic. Instead, Appointment.generic and Appointment.training are so much more logical.