Planet Linux Australia

Syndicate content
Planet Linux Australia -
Updated: 1 hour 3 min ago

Donna Benjamin: Beta out for Bootstrap 3 for Drupal 8

Sat, 2015-12-12 18:27
Saturday, December 12, 2015 - 18:18

Open Source Software. Gotta love it.

I was fooling around with the second alpha release of the Bootstrap theme for Drupal8. I hit a snag, made a wish (by posting an issue to and Lo! and Behold! Not long after the wish was granted and a Beta was released.

If you're one of those people who uses Drupal to publish stuff online, and just want to get something up quickly without using Drupal's default Bartik theme, then you might want to take a look at Bootstrap.

Yes, there's still some rough edges in there - but if you're willing to share your thoughts, and be constructive, you too might be able to help improve it faster!

Head to to check it out.

Or perhaps just fire up Bootstrap on

Simon Lyall: Studying for Driver license test with Anki

Fri, 2015-12-11 09:28

In 2014 I decided to do a bit or work to finally get my New Zealand driver license. The first step towards this was passing the theory test which is a 35 question test given on computer. You have to get at least 32 questions right to pass.

After spending a bit of time looking at the roadcode book I decided to go with just learning the questions. I did this by:

  1. Buying some of the official practice exams
  2. Grabbing other questions for unofficial sites
  3. Entering some other questions manually from the books

I took all these questions and created a Anki Deck. Anki is some spaced repetition software that I use to learn things. I tell it to ask me a few new questions every day, if I get them wrong it asks me again tomorrow, if I get them right it asks me again next week. Gradually as I learn something it asks me less often (see the more technical explanation here)

A typical question on an Anki deck looks like these screenshots:

The left on the left shows me being asked the question. Once I pick my answer I look at the actual answer (see rightmost screenshot)

If I get it wrong I get the card again in 10 minutes and depending on how easy I judged it if I got it right I’ll only see it again in months.

I ended up entering just on 400 questions and told Anki to give me 5 new cards every day plus whatever old ones I had to review. After a few months I had gone though all the questions and had a good feel for them. I also did some of the official practice exams.

Eventually in December 2014 I sat the exam and got 100 percent correct.

I’ll make my deck available at the link below. There are just over 400 cards in it, some with pictures. There are a few duplications but no errors as far as I am aware. They are current as of late 2014 (including the give-way rules change that year).

To use them you’ll need a copy of Anki and it is probably easiest to use the desktop edition to import the file and then use an Ankiweb account to Synchronize to a copy on your phone.

Download NZ Driver license Theory Anki Deck (2MB .apkg file)


Chris Smart: Building a Mini-ITX NAS? Don’t buy a Silverstone DS380 case.

Thu, 2015-12-10 12:29

Edit: I made some changes which have dropped the temps to around 40 degrees at idle (haven’t tested at load yet). The case has potential, but I still think it’s slightly too cramped and the airflow is not good enough.

Here’s what I changed:

  • Rearranged the drives to leave a gap between each one, which basically limits the unit to 4 drives instead of 8
  • Inverted the PSU as per suggestion from Dan, so that it helps to draw air through the case. The default for the PSU is to draw air from outside and bypass the case.
  • Plugged the rear and side fans directly into the PSU molex connector, rather than through mainboard and rear of hard drive chassis

So I’m building a NAS (running Fedora Server) and thought that the Silverstone DS380 case looked great. It has 8 hot-swappable SATA bays, claims decent cooling with filters, neat form factor.

It requires an SFX PSU, but there are some that have enough juice on the 12v rail (although avoid the SilverStone SX500-LG, it’s slightly too long) so that it’s not a major problem (although I would prefer standard ATX).

So I got one to run low-power i3, C226 chipset mainboard and five HGST 3TB NAS drives. Unfortunately the cooling through the drives is pretty much non-existent. The two fans on the side draw air in but blow onto the hotswap chassis and nothing really draws air through it.

As a result, many of the drives run around 65 degrees Celsius at idle (tested overnight) which is already outside of the drives’ recommended temperature range of 0-60 degrees.

I’ve replaced the case with my second choice Fractal Design NODE 304 and the drives at idle all sit at around 35 degrees.

It has two smaller fans at the front to bring air directly over the drives and a larger one at the rear, with a manual L/M/H speed controller for all three on the rear of the case. As a bonus, it uses a standard ATX power supply and has plenty of room for it.

The only downside I’ve found so far is the lack of hot-swap, but my NAS isn’t mission-critical so that’s not a deal breaker for me.

Your mileage might vary, but I won’t buy the DS380 for a NAS again, unless it’s going to run full of SSDs or something (or I heavily mod the case). It’s OK for a small machine though without a bunch of disks (shame!) and that’s what I’ve re-purposed it for now.


Jonathan Adamczewski: C++14 and volatile implicity

Tue, 2015-12-08 18:27

In the process of upgrading Visual Studio 2012 to Visual Studio 2015, I encountered some brand new link errors that looked something like this:

error LNK2001: unresolved external symbol "public: __cdecl FooData::FooData(struct FooData& const &)"

It’s not a new error in VS2015 — VS2012 can certainly produce it. I mean “new” in the sense that there were no problems linking this code when using the older compiler.

The struct in question looks vaguely like this:

struct FooData { int m_Bar; volatile int m_Baz; };

The problem is m_Baz. In C++14, the language was changed to say that structs are not trivially constructible if they have non-static volatile members. And that, I think, is why there’s no default copy constructor being generated. I can’t quote chapter and verse to back up that assertion, though.

[Update: Actually… maybe not? I’m beginning to wonder if VS2015 is doing the wrong thing here.]

But the fix is simple: add a copy constructor. And then, when the program fails to compile, declare a default constructor (because, of course, adding a copy constructor causes the implicit default constructor to be marked as deleted).

I found that developing an understanding of exactly what was happening and why to be the more difficult problem. Initially because the the compiler gave no indication that there was a problem at all, and willingly generated calls to a copy constructor that couldn’t possibly exist. Deeper than that, I’m still trying to piece together my own understanding of exactly why (and how) this change was made to the standard.

Francois Marier: Tweaking Cookies For Privacy in Firefox

Tue, 2015-12-08 09:46

Cookies are an important part of the Web since they are the primary mechanism that websites use to maintain user sessions. Unfortunately, they are also abused by surveillance marketing companies to follow you around the Web. Here are a few things you can do in Firefox to protect your privacy.

Cookie Expiry

Cookies are sent from the website to your browser via a Set-Cookie HTTP header on the response. It looks like this:

HTTP/1.1 200 OK Date: Mon, 07 Dec 2015 16:55:43 GMT Server: Apache Set-Cookie: SESSIONID=65576c6c64206e6f2c657920756f632061726b636465742065686320646f2165 Content-Length: 2036 Content-Type: text/html;charset=UTF-8

When your browser sees this, it saves that cookie for the given hostname and keeps it until you close the browser.

Should a site want to persist their cookie for longer, they can add an Expires attribute:

Set-Cookie: SESSIONID=65576c...; expires=Tue, 06-Dec-2016 22:38:26 GMT

in which case the browser will retain the cookie until the server-provided expiry date (which could be in a few years). Of course, that's if you don't instruct your browser to do things differently.

Controlling Cookie Expiry

In order to change your cookie settings, you must open the Firefox preferences, click on "Privacy" and then choose "Use custom settings for history" under the "History" heading.

There, you will have the ability to turn off cookies entirely (network.cookie.cookieBehavior = 2), which I don't recommend you do in your browser since you won't be able to login anywhere. On the other hand, turning off cookies is what I do (and recommend) in Thunderbird since I can't think of a legitimate reason for an email to leave a cookie in my mail client.

Another control you'll find there is "Keep until" which defaults to honoring the server-provided expiry ("they expire" aka network.cookie.lifetimePolicy = 0) or making them expire at the end of the browsing session ("I close Firefox" aka network.cookie.lifetimePolicy = 2).

A third option is available if you type about:config into your URL bar and looking for the network.cookie.lifetimePolicy preference. Setting this to 3 will honor the server-provided expiry up to a maximum lifetime of 90 days. You can also make that 90 days be anything you want by changing the network.cookie.lifetime.days preference.

Regardless of the settings you choose, you can always tell Firefox to clear cookies when you close it by selecting the "Clear history when Firefox closes" checkbox, clicking the "Settings" button and making sure that "Cookies" is selected (privacy.clearOnShutdown.cookies = true). This could be useful for example if you'd like to ensure that cookies never last longer than 5 days but are also cleared whenever you shut down Firefox.

Third-Party Cookies

So far, we've only looked at first-party cookies: the ones set by the website you visit and which are typically used to synchronize your login state with the server.

There is however another kind: third-party cookies. These ones are set by the third-party resources that a page loads. For example, if a page loads JavaScript from a third-party ad network, you can be pretty confident that they will set their own cookie in order to build a profile on you and serve you "better and more relevant ads".

Controlling Third-Party Cookies

If you'd like to opt out of these, you have a couple of options. The first one is to turn off third-party cookies entirely by going back into the Privacy preferences and selecting "Never" next to the "Accept third-party cookies" setting (network.cookie.cookieBehavior = 1). Unfortunately, turning off third-party cookies entirely tends to break a number of sites which rely on this functionality (for example as part of their for login process).

A more forgiving option is to accept third-party cookies only for sites which you have actually visited directly. For example, if you visit Facebook and login, you will get a cookie from them. Then when you visit other sites which include Facebook widgets they will not recognize you unless you allow cookies to be sent in a third-party context. To do that, choose the "From visited" option (network.cookie.cookieBehavior = 3). However, note that a few payment gateways are still relying on arbitrary third-party cookies and will break unless you keep the default (network.cookie.cookieBehavior = 0).

In addition to this setting, you can also choose to make all third-party cookies automatically expire when you close Firefox by setting the network.cookie.thirdparty.sessionOnly option to true in about:config.

Other Ways to Limit Third-Party Cookies

Another way to limit undesirable third-party cookies is to tell the browser to avoid connecting to trackers in the first place. This functionality is now built into Private Browsing mode and enabled by default. To enable it outside of Private Browsing too, simply go into about:config and set privacy.trackingprotection.enabled to true.

You could also install the EFF's Privacy Badger add-on which uses heuristics to detect and block trackers, unlike Firefox tracking protection which uses a blocklist of known trackers.

My Recommended Settings

On my work computer I currently use the following:

network.cookie.cookieBehavior = 0 network.cookie.lifetimePolicy = 3 network.cookie.lifetime.days = 5 network.cookie.thirdparty.sessionOnly = true privacy.trackingprotection.enabled = true

which allows me to stay logged into most sites for the whole week (no matter now often I restart Firefox Nightly) while limiting tracking and other undesirable cookies as much as possible.

Tim Serong: Pets vs. Cattle

Mon, 2015-12-07 21:29

I was at SUSECon 2015 in Amsterdam a few weeks ago, which, aside from being a great conference, was an opportunity to actually interact with my colleagues in person for a change. So I finally got to meet Adam Spiers after working-ish with-ish him for at least three-ish years (strictly speaking we’re on different-ish teams), and one of the first things he asked was for my take on the Pets vs. Cattle cloud computing metaphor, because in addition to knowing my way around high availability, distributed storage and cloud foo, my wife and I actually do farming which means I might be qualified to have an opinion on the matter.

The Pets vs. Cattle thing is about how you manage your systems (i.e. servers/VMs). The idea is that we give our pets individual names, lovingly hand raise and care for each one, and we take them to the vet when they get sick. Cattle on the other hand are numbered in some fashion, are treated as if they’re mostly identical, and if one gets sick you shoot it and get another (surely the beef and dairy industry wouldn’t function efficiently otherwise).

If you apply that philosophy to computer systems, a pet is a server (or VM instance) that was set up “just so”, and that you can maybe scale up, and redeploy with some difficulty elsewhere if disaster strikes. With the cattle approach you’d be looking at scaling out with multiple identical disposable instances that can be replaced or redeployed semi-instantaneously if the data centre suddenly catches fire.

In my opinion this is actually a good way of conceptualising how our systems are managed, and it provides a useful framework from which to think about scalability, resilience, disaster recovery, and risk management.

But it’s not how I treat my animals. So while I understand the metaphor and its utility, I actually don’t like it.

We don’t have a huge farm. Right now we have five pigs, six sheep, a handful of cockerels, about twenty adult hens and forty-odd young chicks. Over the last few years we’ve raised some hundreds of chickens, which have had varied fates. Many found new homes with other peoples’ flocks. Many were delicious (some are still in the freezer). Others became unplanned snacks for the local wedge-tailed eagle and grey goshawk populations. You might say our chickens come close to fitting the cattle part of the metaphor, but it’s more complicated than that.

When you raise chickens, occasionally you get one that’s just not going to make it. Sometimes it dies by itself in short order, before you really know there’s any trouble. Other times you know the chick is in a bad way and you have a choice of letting it sit around suffering until it dies, or offing it yourself. There’s not a lot you can do for an ill young bird other than providing warmth, food and water, and you can’t ever know if it’s going to get better. One chick I nursed for most of a day, only to have it lie down and die in my hand. Another chick, late out of the egg, smaller and less steady on its feet that the others was fine after some extra care. A third either hadn’t completely absorbed the yolk or otherwise had an odd deformity so was straight for the knife, the compost heap, and thence another turn of the wheel.

We treat our adult birds similarly – we keep a close eye on them, and if one might be getting crook we try to see what we can do to help. Sometimes that’s a night or two in a cage in the house, sometimes it’s a trip to the vet. An eagle tore an enormous gash across the back of one of our hens, but we paid to have her stitched up and she’s still with us. Another one was torn right down to and part way through the spine, and incredibly was still walking and clucking. I had to kill her though – we can’t fix an injury like that.

So like I said, it’s complicated. In situations where the metaphorical cattle farmer would always kill their animals, we sometimes kill them and sometimes nurse them back to health. The Pets vs. Cattle metaphor doesn’t work for me because I don’t treat my “cattle” the way the metaphor expects me to. My animals are actually my friends, but I still eat them. Incidentally, Adam expressed some concern about remaining my friend after I mentioned this to him.

The other problem with the Pets vs. Cattle metaphor is that it only works in cultures that treat cattle the way they’re generally expected to be treated in Western civilisation. Florian Haas recounted a tale of a hurried “cattle” substitution (pet dogs vs. stray dogs) during a cloud computing presentation in India, for example.

So what can we learn from the Pets vs. Cattle metaphor?

  1. It can be a useful framework for thinking about allocating computing resources.
  2. The metaphor might be irritating if you’re actually a farmer.
  3. The metaphor is probably outright offensive if you’re a Hindu.
  4. Metaphors often tell you more about the culture of the people who use them than they do about the topic at hand.
  5. The modern Western mass market beef and dairy industry doesn’t treat its cattle with appropriate respect.

Simon Lyall: Donations 2015

Mon, 2015-12-07 09:28

Up until a couple of years ago my main charity was a regular payment to Oxfam. However I cancel this after I decided I disliked their fund-raising methods and otherwise read they were probably not in the top few percent of charities. Since then I’ve been tending to do things all in one go.

I just finished doing this year’s so I thought I’d document it here. It does feel a little weird to post about it but I’ve seen others do it. The theory I guess is that you the reader might be convinced that giving to charity is a good thing and do likewise.

My main donation was to the the top four charities rated by GiveWell:

  • Against Malaria Foundation                   $US 150
  • Schistosomiasis Control Initiative         $US 150
  • Deworm the World Initiative                  $US 150
  • GiveDirectly                                                 $US 150

Next were a series of Open Source projects

  • Debian                                                              $US 50
  •                                              $US 30
  • LibreOffice                                                       $US 30
  • OpenBSD                                                          $US 30
  • Python                                                              $US 30
  • Gnome                                                              $US 30

Interestingly enough I hadn’t originally intended to donate to LibreOffice and but Debian handles donations via Software in the Public Interest and those two showed up on the same donation page.

and some others

I thought about a few others including The Internet Archive, Anki and Mozilla. Perhaps next year

Share News: OpenMaterials and EverywhereTech Founder Catarina Mota to headline 2016

Mon, 2015-12-07 07:28

Open hardware luminary, TED Fellow and future materials industry leader, Catarina Mota, will be one of four outstanding keynotes for in February 2016. Mota is co-founder of - a project dedicated to furthering exploration of ‘smart materials’ - conductive ink, electronics that run off energy generated by the human body and new generations of plastics that have memory. She recently founded Everywhere Tech - an organisation facilitating open source technology transfer to foster resilient communities around the world.

Her passion is to encourage the ‘maker’ in all of us - motivating a new generation’s interest in science, technology and collaboration. This passion extends to her current pursuits - doctoral academic research into the social impact of open and collaborative practices for the development of technologies.

"I'm very much looking forward to the wonderful LCA. Long before there was open source hardware/materials, there was open source software and Linux - I can't wait for the opportunity to learn from the community who paved the way for the rest of us."

Conference 2IC Kathy Reid was delighted to announce Ms Mota as Keynote Speaker.

“I first heard Catarina speak at LinuxCon Europe in Barcelona in 2012 and was simply awestruck. Her passion, her empathy, and sincere desire to make the world a better place through technology is so incredibly inspirational. Catarina’s work at the intersection of technology, collaboration and humanity is such a natural fit for 2016’s theme of ‘Life is better with Linux’. We’re honoured to be able to welcome her to Geelong in February.”

One of the most respected technical conferences in Australia, Linux Conference Australia ( will make Geelong home between 1st-5th February 2016. The conference is expected to attract over 500 national and international professional and hobbyist developers, technicians and innovative hardware specialists, and will feature nearly 100 Speakers and presentations over five days. Deakin University’s stunning Waterfront Campus will host the conference, leveraging state of the art networking and audio visual facilities.

The conference delivers Delegates a range of presentations and tutorials on topics such as open source hardware, open source operating systems and open source software, storage, containers and related issues such as patents, copyright and technical community development.

Linux is a computer operating system, in the same way that MacOS, Windows, Android and iOS are operating systems. It can be used on desktop computers, servers, and increasingly on mobile devices such as smartphones and tablets.

Linux embodies the ‘open source’ paradigm of software development, which holds that source code – the code that is used to give computers and mobile devices functionality – should be ‘open’. That is, the source code should be viewable, modifiable and shareable by the entire community. There are a number of benefits to the open source paradigm, including facilitating innovation, sharing and re-use. The ‘open’ paradigm is increasingly extending to other areas such as open government, open culture, open health and open education.

Potential Delegates and Speakers are encouraged to remain up to date with conference news through one of the following channels;

Website: Twitter: @linuxconfau, hashtag #lca2016 Facebook: Google+: Lanyrd: IRC: on Email: Announce mailing list:

We warmly encourage you to forward this announcement to technical communities you may be involved in.

Image credit: Oui Share via Flickr / CC BY-SA

Sridhar Dhanapalan: Twitter posts: 2015-11-30 to 2015-12-06

Mon, 2015-12-07 01:27

Colin Charles: Learnings from Swift becoming opensource

Mon, 2015-12-07 00:25

Swift is now opensource, and it’s interesting to see Craig Federighi talk about it. This is Apple doing right, considering FaceTime is long overdue to being an open standard. People are nitpicking on Apple’s Open Source tagline, but really, this is akin to nitpicking on Mark Zuckerberg donating 99% of his Facebook stock to his new limited liability corporation charity (key: don’t look a gift horse in the mouth).

Apple has chosen to put Swift on Github, and they’ve ensured that it wasn’t just an initial commit, but you’re seeing a lot of history. And it’s the right choice clearly, for engagement — 1,275 watching, 18,884 stars, 2,139 forks, 51 pull requests currently, but most interestingly a lot of accepted code. Even simple things along the lines of “fixing typos” (see commits, eg. d029f7e5ae84cf8f6c12907f9ed0ac0a694881aa, e8b06575d26a684f415af95143ec576a6aa5168d, etc.). 

Swift has open source documentation — like all good open source projects are supposed to have. They use Sphinx and its in the source tree. This is something I’d wish to see from MySQL (docs copyright Oracle, online, but you can take it offline too via PDF) or MariaDB (friendly licensed Knowledge Base), but so far only Percona Server has gotten this right.

What else did Swift do right? Focus on user contributions — the Contributing page is a breath of fresh air. And don’t forget the code of conduct for participating in the project.

But besides just the documentation and contribution pages, I learned something new from one commit in particular — the existence of nproc, part of coreutils. I immediately hopped onto IRC to chat with Nirbhay (our resident MariaDB Galera Cluster expert), because in scripts/, we do this via a get_proc() function. We should be focusing on modernising/standardising our codebase, shouldn’t we?

There is a lot we at MariaDB Corporation and the MariaDB Foundation can learn from Swift being opensource and how Apple deals with the community at large. Here’s hoping we get the best practices from it and implement it in due time.

Binh Nguyen: Some Counter-Terrorism, Defense Intelligence Thoughts, and More

Sun, 2015-12-06 01:28
- many people are often critical of choices that are often made in other countries. If you think carefully about it, massive loops have been being created. People wouldn't survive and hit certain points within the social hierarchy if they didn't possess certain characteritics and these characteristic are normally a factor of existing circustances. Think about Putin (or US or China for that

Michael Still: Skimpy

Fri, 2015-12-04 18:28

ISBN: 9780733634383


I've had a bit of a thing about biographies recently, having just read the very good The Crossroad by Mark Donaldson. This book is a very different story, but I think still quite interesting. Kellie was a country girl with no real plans and an impulse control problem. While the book follows her formative years as she parties across Australia in a generally northern direction, I think the underlying story about growing up and finding your way in the world is quite interesting.

Is this great literature while will enlighten the masses? Probably not. Was it a fun read on a flight and mostly about a teenager with no direction finding her place in the world? Yes.

Tags for this post: book kellie_arrowsmith biography australia

Related posts: The Crossroad; Don't Tell Mum I Work On The Rigs; In Sydney!; American visas for all!; In A Sunburned Country; Melbourne Comment Recommend a book

David Rowe: SM2000 Part 4 – Tx Amplifier Chain

Fri, 2015-12-04 16:30

This week I’ve been working on class A and class C amplifiers for the transmit side of the SM2000 design. Yesterday I worked up a gain budget that would take me from -20dBm at the output of the 1st mixer to +30dBm (1W) at the output of the PA. I need two 20dB (ish) driver stages and one 10dB (ish) PA, 50dB of gain in total.

The prototype amplifiers all had Z-match networks that matched to 50 ohm input and output. When combining the amplifiers I combined the Z match networks, removing the intermediate 50 ohm step. So we go from 2500 ohms at the output of the first stage to 10 ohms at the 2nd stage input. Then 250 ohms at the 2nd stage output to 10 ohms 3rd stage (PA) input.

I cranked the handle on the Z-match calculations and soldered the thing together:

In the photo you can see the extra large rectangular pads I used to give Q2 and Q3 some heatsinking. I measured and tweaked all the home made inductors using the spec-an method from the last blog post. I estimate they are within +/- 15% of the values on the schematic.

It worked first time but the overall gain was a bit low at 43dB. So I entered “experimental mode”, and started testing individual stages. To test stage 1 and stage 2 alone this meant changing the Zout network to match the 50 ohms of the spec-an.

Couple of changes:

  • The 1st stage gain was a bit low. I changed L1 from 24nH (the calculated value) to 57nH, this gave me +3dB. I don’t know why, and it’s annoying me! However I appreciate that at VHF the calculations can only get you to within 20%.
  • While testing stage 1 and 2 there was some instability, which went away when I rotated L2 45 degrees away from L3.
  • In my first pass I use a 18 ohm resistor to bias Q3 at 0V. However when I changed this to a RF choke the output power jumped up to 1W with -20dBm drive, and I can get 0.5W with -30dBm drive.
  • The power supply filtering (R7 and R8) causes about 1V of drop to the power supply of Q1 and Q2, which leads to a few dB loss of drive. This could be improved by recalculating the Q1 and Q2 bias points.

The BFQ19 is not meant for 1W so I only ran it for a few seconds there. I killed one when I raised Vcc to 14V, it’s rated at a Vce(max) of 15V and with Vcc=14V the collector would be seeing at least 2Vce = 28V. However it runs OK for a few minutes at 0.5W.

Next Steps

I figure this design has plenty of drive to deliver 1W with the right output transistor. Now I need to select and obtain a suitable transistor and test it. Think it will need to have a Vce(max) of 36V, 2W dissipation, and >10dB gain at 150MHz.

I need to integrate this PA with the PIN diode TR switch and come up with some switching earlier for the BPF output just after the mixer. The tx and rx chains share the 1st mixer (which is bi-directional) and BPF. So I need a way to switch between the input of this tx amplifier chain and the LNA output.

The PA has a 2nd harmonic just -38dB down so we’ll need a little more filtering, spurious 50dB down would be nice.

Michael Still: The Chronicles of Old Guy

Fri, 2015-12-04 07:28
I found this e-book on Amazon while randomly poking around and read it on a recent set of flights. It was of interest because if looked like another bolo tank book, of which I have read many over the years. That said, its not in strictly the same universe as the other bolo books, and seems more like unofficial fan fiction than something which maps into the universe seamlessly.

The book is competently written and readable. However, it regularly strays into what I would consider fantasy fiction (medieval warfare, vampires, battling Godzilla) in a way I found jarring and annoying. Overall I don't think I'll read the other books in this series.

Tags for this post: book timothy_j_gawne bolo combat ai

Related posts: Battlefields Beyond Tomorrow ; Mona Lisa Overdrive; East of the Sun, West of the Moon; Bolo Strike; Bolos 4: Last Stand; Their Finest Hour Comment Recommend a book

David Rowe: SM2000 Part 3 – PIN TR Switch and VHF PA

Wed, 2015-12-02 11:29

Over the last few days I have prototyped a few more building blocks for the SM2000, documented here for my reference.

PIN Diode Transmit/Receive Switch

These are described in quite a few places, one of the best references is the PIN Diode Handbook. Key issue for me is the receive side loss through the switch, as it adds to my noise figure, which I have put a lot of work into keeping low!

Note the switch so I can make sure the control voltage is tied to 0V in the “off position”.

The initial rx loss was a bit high at 0.5dB which I traced to the inductor value being measured as 72nH rather than the 53nH I designed for. Need to watch that with home made inductors. Reducing it to 3 turns made it bang on, and the receive loss of the TR switch is now 0.25dB, about what I expected. The transmit insertion loss is also a little high at 1dB, perhaps more drive current is required in the PIN diodes. The isolation between the tx and rx ports on transmit is just 23dB, I was hoping for more. However with 1W (30dBm) out, thats 7dBm presented to the rx LNA input which is OK.

Thanks Matt VK5ZM for discussions on the TR switch over IRC as I messed with it.

Measuring Inductor L and Q at VHF

There comes a time in every RF noob’s life where you need to measure the L and Q (or effective series or parallel inductor resistances). I started with Measuring Inductors at VHF and Above which suggests a series resonant circuit in series with a tracking generator and spectrum analyser.

This works well when the Rl of the inductors is comparable to the spectrum analyser 50 ohm impedance. However at VHF, inductors in the couple of hundred nH range are common. An air core inductor with L = 150nH may have a Q of 200 at 150MHz, giving an equivalent Rl = 2*pi*f*L/Q = 2*pi*150E6/200 = 0.7 ohms. When Rl is a fraction of an ohm, the spec-an input Z=50 ohms dominates the Q of the series tuned circuit and you don’t get much of a peak.

So I tried a few different topologies, and ended up hanging a series resonant LC circuit across the spectrum analyser input, and running some numbers as below. This gives you a nice sharp dip at resonance, so knowing C, you can work out L=1/((2*pi*f)^2)C. Then some voltage division based on the depth of the “dip” lets you work out Rl and hence Q:

While writing this post I stumbled across this blog post on Measuring Resonator Q at VHF, which uses a cool gimmick-capacitor variation on a method described in EMRFD.

Thanks also to Neil VK5KA and Matt VK5ZM for discussions on this topic.

500mW VHF Class C PA

I need a 1W PA for the SM2000. I have no PA experience so needed a way to get started. The largest VHF-capable transistor I have laying about is the BFQ19, which is rated at 1W. EMRFD suggests choosing a device whose power dissipation exceeds the desired output power, so I chose a 0.5W target output power. This transistor has a maximum collector voltage of 15V. Class C amplifiers can kick Vc to 2 or 3 times Vcc so I chose a Vcc of 5V.

“RF Circuit Design” tells me that small signal S-params don’t count for power amplifier design, and there are no large signal design parameters for this transistor (it’s designed for small signal operation). So I used the simple approach of just designing for a collector load of Rl = Vcc*Vcc/2P = 25 ohms, ignored any reactive components, and crossed my fingers.

I tried a couple of different impedances driving the base. With the conventional selection of 10 ohms I had poor gain and couldn’t reach my target output power. I think the problem was the voltage driving the base. 13dBm into 10 ohms is sqrt(2)*sqrt(0.02*10) = 0.632Vpeak, which is less than the 0.7V needed to switch on the transistor. By changing the impedance match network to 100 ohms driving the base I kicked up the base drive (albiet at a higher impedance). Now the transistor was being switched on, and I reached my power target with 13dBm of drive and a Vcc of 7.6V.

This is probably an artifact of the low power output and hence low drive of my little power amplifier. For a 1W amplifier with 100mW drive, peak base voltage would be sqrt(2)*sqrt(0.1*10) = 1.4Vpeak.

Note the 1uH inductor value in the sch photo should be 100nH. I only ran the PA for a few seconds, as I don’t have a heatsink and it’s dissipating 0.5W. A bigger piece of PCB soldered to the collector might be OK, although that might add capacitance too. At some point I’ll need to work out how to calculate the heatsink size I need.

I spent a bit of time playing with different base and collector loads in order to increase the gain. However looking at various other VHF PA designs, it appears 10dB power gain is about right, so I decided my little amplifier is working OK. I’ve learned a lot! Next step is to come up with some sort of tx power and gain budget so I make sure I have the correct drive levels for a 1W PA.

Reading Further

EMRFD and “RF Circuit Design” books.

Harry’s Homebrew has a good section on Z matching for VHF PA design

The design calculations for this VHF PA are in . I’ve started collecting a bunch of little Octave functions for RF design into rfdesign.m.

Tim Serong: Wait, What?

Tue, 2015-12-01 22:27

Something odd just happened, so I thought I’d better screencap it for posterity.

I’ve had a Twitter account since some time in 2011. It looks a bit like this:

By blind accident, I happened to notice something resembling a clone, named @tszrong, which looks like this:

Maybe it was petty of me, but I thought it appropriate to report this account for impersonation. This resulted in the following email from Twitter Support (I’ve omitted the part at the bottom with the actual links and whatnot, but you get the idea):

Incredibly, the name on my goverment-issued photo ID does actually match the name on my Twitter account, but I will not be uploading a copy of this for Twitter to verify. Partly this is because I don’t want digital copies of my government-issued photo ID unnecessarily floating around the aether, and partly it’s because… SRSLY? Just look at the profile pages. Please.

Sridhar Dhanapalan: Twitter posts: 2015-11-23 to 2015-11-29

Mon, 2015-11-30 01:27
  • Children's growing use of mobile devices may hamper their learning of key technology skills: National Assessment Programme report http… 13:19:09, 2015-11-27

Binh Nguyen: Israeli/Palestinian Conflict, Counter-Terrorism, and More

Sun, 2015-11-29 23:44
- sometimes it feels as though the media makes light of conflicts around the world. Often, they have little idea of the background behind it. Hence, we're left with a sensationalist, biased report/summary of the circumstances based on whomever they've been able to conjur. Once upon a time (a long time ago) Christians, Jews, and Muslims lived side by side in peace in the Middle East Living under

Colin Charles: Voting for talks at the Percona Live Data Performance Conference 2016

Sun, 2015-11-29 23:25

So this year the Percona Live conference has a new name — it is the “Data Performance Conference” (presumably for a much broader appeal and the fact that Percona is now in the MongoDB world as well). And the next new thing to note? You have to go through a process of “community voting”, i.e. the speaker has to promote their talks before via their own channels to see how many votes they can get (we tried this before at the MySQL & Friends Devroom at FOSDEM; in this case, please remember you also need to create a new account and actually vote while logged in).

I hope you vote for Sergei, Monty and my proposals!

  1. Using and Managing MariaDB – a tutorial, which has been referred to as The Complete MariaDB Server tutorial, I thought I will change the name up a little, in addition to the content. The most recent version of this tutorial was given at the Percona Live Conference in Santa Clara in 2015 (slides). Since then we’ve released MariaDB Server 10.1, and there’s much more new things to talk about!
  2. MariaDB 10.1 – What’s New? – a talk that would have Michael “Monty” Widenius (creator of MySQL and MariaDB) and me give it together. I’ve described this as a dance, and the last time we did this was at Percona Live Amsterdam. The content will of course be new, and I am creating the slide deck this time around.
  3. Databases in the Hosted Cloud – this is a pet talk. It costs some money to make, and if accepted I plan to also showcase who has better performing hosted databases. I did this at Percona Live Amsterdam 2015 (slides), but since then we’ve seen Amazon offering MariaDB Server as part of RDS, HPCloud being sunset, and also Rackspace upping their offering with High Availability Databases. More research to be done from now till then!
  4. Best Practices for MySQL High Availability – this would be another tutorial, and at Percona Live Amsterdam 2015 it had the highest registered attendance (Kortney told me the day before and I removed all practicals, since 100+ people with practicals is impossible for one person to manage – slides). I think with the changes in NDBCLUSTER (recently announced at OpenWorld), the addition of tools in the MHA world (mha-helper), this should have a lot of new information (and more importantly a lot of new things to play with).
  5. Choosing a MySQL HA solution today – a talk based on the above tutorial, cut short, to ensure people whom are not at tutorial day, will have solutions to think about and take home for implementation in the future.
  6. MariaDB/MySQL security essentials – a talk which focuses on improvements in MariaDB Server 10.1, and MySQL 5.6/5.7, including encryption at rest, easier SSL setup for replication topologies, and even external authentication plugins (eg. Kerberos is almost ready – see MDEV-4691).
  7. The MySQL Server Ecosystem in 2016 – a talk about MySQL and the forks around it, including the private trees that exist (some like the Twitter tree haven’t been updated in a while, but clearly have made inroads in giving us new features). Learn what to use, and what is the best one for your use case. 
  8. MariaDB Connectors: Fast and Smart with the new protocol optimizations – a talk from Sergei Golubchik, about new protocol optimisations in MariaDB Server as well as how we optimise this from the connectors as well.
  9. MariaDB 10.1 Security: Validation, Authentication, Encryption – a talk from Sergei Golubchik focusing on MariaDB 10.1 security improvements; he’s got some amazing slides on encryption that I saw at Percona Live Amsterdam, and you can see a five-minute lightning version from the meetup.

Here’s to happy voting and I hope to give at least some of these talks (if not all!).

David Rowe: SM2000 Part 2 – RF Amp Design

Sun, 2015-11-29 18:29

For the SM2000 I need some VHF small signal RF amplifiers, for example a driver amplifier for the transmit PA. So I figured it was about time I learned to design RF transistor amplifiers. The S-parameter method seems to be the way to go, and I have some BRF92 transistors that have S params on the data sheet.

Unless you are experienced in RF design this post may not make much sense. I estimate the eye glazing to interest ratio at 20dB. However as a RF noob I am documenting my experience to help me remember what I have learned.

I spent a day reading the small signal transistor amplifier chapters of “EMRFD” and “RF Circuit Design” by Chris Bowick, and getting my head around Smith Charts. I scratched about on a bunch of paper, complex numbers flying everywhere. Lots of errors and rework. The next morning, to cross check my manual work, I wrote s_param_rf.m to handle the tedious calculations.

I also found these helpful RF and Microwave Stuff Octave scripts, e.g. Smith Chart plotting, including stability circles.

The transistor and operating point I chose was not unconditionally stable, so I had get my head around “stability circles” and find an input and output load that would be stable, and design input and output matching networks. The “RF Circuit Design” book walked me through everything.

Here is the Smith Chart for my operating point:

The red and blue arcs are “no go” circles for the input and output impedance the transistors sees. The green is a 20dB constant gain circle. Any output reflection coefficient gammaL on the gain circle will give you an amplifier with 20dB gain. The source reflection coefficient gammaS is a function of gammaL. So I tried a few different gammaL (red star) until I found a stable gammaS (purple star).

The Smith Chart is rather “busy”. The output reflection coefficient gammaL = 0.8 – 0.4j is the same point as the load or output impedance Zo = 1 – 4j (normalised to 50 ohms which is 50 -200j without normalisation). Even though they map to identical points on the chart, they are read off different axis as different values.

Here is a sample run of the Octave script:

octave:207> s_param_rf

K =   250.5885e-003

-----Frequency: 1.00 - potentially unstable - plotting stability circles

Red is the gammaIn=1, for all loads (gammaL)

Blue is the gammaOut=1, for all sources (gammaS)

Green is the 20.0 dB constant gain circle for gammaL

Input: Zi = 67.6 + 26.9j ohms

       In parallel form Rp = 78.3 Xp = 197.1j ohms

       So for a conjugate match transistor input wants to see:

         Rp = 78.3 Xp = -197.1j ohms

       Rs = 50.0 to Rl = 78.3 ohm matching network Xs = 37.6j Xp = -104.1j

       with conj match to Zi Xs = 37.6j Xp = -301.1j

       matching components Ls = 0.040 uH Cp =  3.5 pF

       Ls can be made from 3.1 turns on a 6.25 mm diameter air core

Output: Zo = 50.0 + -200.0j ohms

        So for a conjugate match transistor output wants to see:

          Rl = 50.0 Xl = 200.0j ohms

        Which is a series inductor Lo = 0.212 uH

        Lo can be made from 7.1 turns on a 6.25 mm diameter air core

I then designed the bias network and came up with this circuit, which I soldered together:

You can just see the little SOT-23 surface mount transistor in the centre of the photo.

Much to my surprise it worked! They say anyone can design a RF oscillator but it takes skill to design an RF amplifier. This actually works as an amplifier! Here is the gain swept between 0 and 300MHz:

Gain was 23dB, return loss at both ports about 8dB at 150MHz. I’m not sure if the return loss is a problem, it represents about 1dB loss (15%) in the reflected signal. I figure getting within 15% is OK given component and S-param tolerances at VHF.

The noise figure was measured at 4dB, and 1dB compression point around 0dBm. The compression point feels a bit low, perhaps as I used a collector resistor rather than a RF choke. I’ll read up on that next, see if I can get a 10dBm output, suitable for driving the SM2000 PA.

Version 2 with 10dBm Output

After another day of head scratching and 3 tries with different collector currents, collector loads, and finally an increased Vce (10V), I have arrived at a version that can handle 10dBm output:

Two tricks were required to get the 10dBm power output:

  1. Setting the load impedance for the collector Z=P/(Irms*Irms). I worked out the required impedance assuming a RMS current of 2mA, which was a reasonably “small signal” variation from the 14mA bias I selected for this version.
  2. Raising Vce from 4V to 10V by using an inductor in the collector rather than a resistor. This meant Vc could bounce around a bit more without being clipped. When I tried increasing the collector impedance without raising Vce the output power was still distorted at 0dBm, so this was an important step. The inductor ended up being part of the matching network and now my circuit looks like everyone else’s so I must be doing something right.

If the above doesn’t sound very convincing it’s because I don’t quite know what I’m doing. EMRFD and RF Circuit Design has a better explanation.

The output is a nice clean 10dBm sine wave, with 2nd order nasties 35dB down:

The Octave script was modified to do the calculations for this version:

octave:69> s_param_rf

K =   466.3534e-003

-----Frequency: 1.00 - potentially unstable - plotting stability circles

Red is the gammaIn=1, for all loads (gammaL)

Blue is the gammaOut=1, for all sources (gammaS)

Green is the 20.0 dB constant gain circle for gammaL

Transducer gain: 26.9 dB

Input: Zi = 8.4 + 3.2j ohms

       In parallel form Rp = 9.6 Xp = 25.4j ohms

       So for a conjugate match transistor input wants to see:

         Rp = 9.6 Xp = -25.4j ohms

       Rs = 50.0 to Rl = 9.6 ohm matching network Xs = 19.7j Xp = 24.4j

         with Xs a capacitor, and Xp and inductor Xs = -19.7j Xp = 24.4j

       With a conj match to Zi Xs = -45.2j Xp = 24.4j

       matching components Li = 0.026 uH Ci = 23.5 pF

       Li can be made from 2.5 turns on a 6.25 mm diameter air core

Output: Zo = 2500.0 + 0.0j ohms

        matching network Xp = 357.1 X = 350.0 ohms

        which is parallel Lo = 0.379 uH and series Co =  3.0 pF

        Lo can be made from 9.4 turns on a 6.25 mm diameter air core

My “transducer gain” is somewhat off (I’m getting 21dB), I know not why. Maybe as I’m using 100MHz s-params for a 150MHz circuit. Now time to look at diode TR switching and maybe a class C 1W PA.

I was studying EMRFD to understand the collector load thing and found what looked like a small typo. I emailed the author (the legendary Wes Hayward) who replied and sure enough I was right, and it will be added to the errata. Finding even a small error in a book like EMRFD makes me feel prouder than getting this amplifier working! Just like software – debugging someone else’s well written work is a great way to learn. Also like open source “release early and often” and let the community help improve the work.