Been a little busy the past few weeks. Still plan on posting up a Simpana 10 + MySQL on Linux example. Will be sure to get to this soon. Just need to get motivation.
In the meantime, my wife and I purchased some land which we are still waiting on paperwork for. I think the 2 short weeks due to public holidays would impact that, so we probably not expecting to see the paperwork until next week.
We’re planning on building a new house (another one, as the one we live in currently we built about 7 years ago). We figure we have experience with the process and would like to do it again and do somethings differently. So the best way to get what we want 2nd time around is to build again.
On the up side, the estate the land is in has FTTH (Fibre to the home), so I will finally be able to get some decent internet connectivity. I have already confirmed the estate is serviced by Internode FTTH plans. So I am looking at a 50Mbps/20Mbps plan with them that includes 300Gb a month of traffic. Unfortunately the process from land being registered, available to be built on and the house being completed is probably at least 18 months to 24 months. So going to be a while off yet. Land should be registered next year, I think it was March. So the count down begins.
Now my wife and I have to do the run around to find a house we like and other options we want so that the new place will fit on the block etc. Let the fun (games) begin I guess.
I also ended up ordered a Dell Inspirion 15 (Model: 3537) i3 Intel laptop. It was on special the past few days down to $498.99 delivered, so I ordered one, as I wanted another computer that could run Windows 7 or Windows 8.1. By the time I built something like my existing i3 desktop, it was better money spent on the laptop. Soon see how it performs once it comes. It’s coming from the factory as they ended up selling out of the pre-made stock. Will post back my thoughts after I get the delivery.
Schrodinger is one of the more popular licensed computational chemistry suites, offering a range of associated products. Installation is relatively easy, but does require that the sysop pays some attention to the process and makes a handful of modifications as needed for their particular environment, in this case, MPI, PBS, and CentOS Linux.
Firstly, being licensed software, installation requires logon, which will provide access to a tarball of the suite of applications availabile.
If you’re watching the NEW queue, you’ll notice that MariaDB 10.0.10 has been uploaded targeting Debian/experimental. Package description, and to think the bug was only opened on April 2nd – pretty quick turnaround.
Zoe slept solidly all night. She woke up a little before 6am, wanting a cuddle, but it was still dark, so she went back to sleep for another half an hour or so. It was actually nice to get that extra 30 minutes to have a leisurely wake up myself.
Sarah wanted to pick up Zoe at 7:45am to get away and get a camp site, so when Zoe finally woke up for the day, we didn't muck around too much. She announced she wanted banana and oat pancakes, but we were out of bananas. I offered her the opportunity to scooter down to the Hawthorne Garage to get some if she went and got dressed. She decided that'd be good.
I had a 10am appointment in the city with an intellectual property lawyer to talk about patents, so I had this grand plan of trying to squeeze in a run after Zoe was picked up and before I'd have to head into the city, so I got into my running gear, and we headed down to acquire some bananas.
We whipped up the pancakes, and then after a couple of mouthfuls of hers, Zoe declared she didn't like it and wanted Cheerios instead. Oh well. It was nice to get out of the house early in the morning, and it helped get Zoe moving.
Sarah ended up getting here closer to 8:30am, which made it a little too tight to go for a run, have a shower and get into the city, so I scrapped the run and pottered around at home instead for a bit, before driving into the city.
My goodness casual parking in the city is exorbitant. It cost me $35 for under an hour. I got some good advice from the lawyer, so I know where to proceed from here.
Next I headed down to the Valley to get my orientation at River City Labs, but had I read my email before leaving the city, I'd have discovered that the lady giving me the orientation had to leave early because her daughter was ill. It cost me $6 drive into the car park in the Valley, take the elevator down, read my email on my phone and pay my ticket and leave again. Lesson learned.
I decided to do the grocery shopping that I hadn't done yesterday while I waited for Anshu to come over.
For this month's Launceston meeting, Henry (forum user Attitude) will be taking a look at where to start with game development using Free/Open Source engines.
Saturday 26th April
As usual, some of us will be meeting for lunch beforehand at 1:00pm.
Hope to see you there!
Google Maps Link
List of F/OSS game engines on Wikipedia
TasLUG Statewide Gathering: May 24th, Ross Town Hall
Next Launceston meeting: 2:00pm May 31th (Statewide Gathering Recap)
Next Hobart meeting: 6:00pm June 19th (Topic TBC)
Sources for some of the better DAW software currently available:
Sources for some of the better VSTs that I've come across:
Manufacturers of music hardware:
Sources for songs and samples:
Sources for media and other resources:
Following my previous post on the launch, I just rolled Ubuntu 14.04 LTS on an Amazon EC2 t1.micro instance (not something you expect to run a database server on, for sure – 1 vCPU, 0.613GiB RAM). If you do an apt-cache search mysql you get 435 return result sets with the default configuration (trusty: main & universe).
If you do apt-get install mysql-server, you get MySQL 5.5. You enter the password of choice, and before you know it, MySQL is installed (a SELECT VERSION() will return 5.5.35-1ubuntu1).
Next you decide to install MariaDB. I run an apt-get install mariadb-server. It pulls in libjemalloc (for TokuDB) and I expect future releases to ship this engine by default. You enter the password, and you get a new message (as pictured).
I verify my test database that I created exists. It does. A SELECT VERSION() returns 5.5.36-MariaDB-1. The innodb_version returns 5.5.36-MariaDB-33.0.
I’m curious about MySQL 5.6 now. So I run apt-get install mysql-server-5.6. Not so straightforward.start: Job failed to start invoke-rc.d: initscript mysql, action "start" failed. dpkg: error processing package mysql-server-5.6 (--configure): subprocess installed post-installation script returned error exit status 1 Setting up mysql-common-5.6 (5.6.16-1~exp1) ... Processing triggers for libc-bin (2.19-0ubuntu6) ... Errors were encountered while processing: mysql-server-5.6 E: Sub-process /usr/bin/dpkg returned an error code (1)
Looks like MySQL 5.6 is more memory hungry… I edited /etc/mysql/my.cnf to ensure that innodb_buffer_pool_size = 64M (I increased this to 128M and it worked too) was set (there was nothing in the default config) and re-ran apt-get install mysql-server-5.6 and it started. My test database was still around ;-)
I wanted to make sure that MySQL 5.6 isn’t more memory hungry just on that instance so I created yet another clean t1.micro instance and did an apt-get install mysql-server-5.6. Same error. Reported lp#1311387.
Nothing to report in particular about Percona – 5.5.34 Percona XtraDB Cluster (GPL), Release 31.1 (Ubuntu), wsrep_25.9.rXXXX. One thing is for sure – if you’re playing around with the ecosystem, installs and upgrades aren’t exactly straightforward.
As one decompresses from the active month that April brings to the MySQL ecosystem, its worth noting that I received a MySQL Community Award – Community Contributor of the Year 2014 award at the Percona Live MySQL Conference & Expo 2014 in Santa Clara. I was extremely happy and thankful to receive such an award and I still am. Thank you MySQL Community.
My reason for winning, now immortalised:
Colin’s list of service to the MySQL Community goes back almost 10 years. He was a community engineer starting in 2005, chaired some of the O’Reilly MySQL conferences, ran the MySQL projects for Google Summer of Code. As a partner and Chief Evangelist for Monty program, he continues to promote and grow the MySQL ecosystem. Though it’s his job, he goes above and beyond, driven by his passion for open source and MySQL.
I was amongst very good company (congratulations to all the winners). Thank you to whom nominated me, and to the committee for vetting it. Frederic wrote a nice post with a little selfie. Tomas expresses heartfelt thanks from Oracle.
Anyway, not to rest on one’s laurels – while its great to be given an award after years of being involved in the community, I will work harder in the coming months to make things better in any way I can. Thank you again, MySQL Community.
Zoe had her first day back at Kindy this morning for Term 2. I couldn't believe how fast Term 1 flew by, and how little I felt I accomplished on a personal front. The two weeks of school holidays certainly put the brakes on trying to get anything much more done for myself, but Zoe and I had a great time.
I was really happy with the variety of activities we were able to do, and it was nice that Zoe and Megan got to spend a reasonable amount of time together too. The weather cooperated for the majority of the time, which was the cherry on top.
Zoe only had Kindergarten today this week, but Sarah has the week off, so she's going to be taking Zoe for the next couple of days, which is really convenient timing, as it'll give me time to recover from some minor surgery tomorrow without having to run around after her. I might also manage to finalise my US tax return. I'm hoping to catch a few movies with Anshu too, who also has the week off work.
Zoe slept reasonably well last night. Two wake ups, but they were both quickly resolved, so we both got back to sleep quickly. I was absolutely exhausted last night, but felt positively chipper this morning.
We biked to Kindergarten, and I decided to leave the trailer there to make things a bit easier for myself in the afternoon.
I got home, and just felt like vegging on the couch. Then I remembered Anshu had the day off, so she came over and we hung out and had lunch. It was really nice to have a few hours during the day off.
I biked back to Kindergarten, wondering if I'd have to deal with waking up Zoe from a nap, but she hadn't had a nap. We'd had a bit of a talk at breakfast about napping at Kindergarten, and I have no idea if it helped or not, but it meant we could make an orderly departure.
Zoe wanted to participate in Megan's tennis class after Kindergarten, and they were down a kid, which made the warm up stuff not work so well, so the teacher was happy for Zoe to take part. I managed to extract her once the real nitty gritty of the class started. I did get a good opportunity to suss out place availability for term 3.
We biked home, and I wanted to take my bike in for a service while I'm on lifting restrictions, so we drove over to Cannon Hill to drop it off. The Gold Cross bike shop has now merged into the Super Amart store, so Zoe wanted to look at everything on the way back out. We eventually emerged without buying anything.
Next, we went over to Bunnings, because Zoe's been asking if we can grow some veggies and flowers from seed. That ended up being about an hour of trekking around the nursery section trying to find stuff. It was a good way to use up the afternoon. We made it out with a bag of potting mix and a few packets of seeds and a kit for growing stuff that requires a trellis. Unfortunately most of the climbing stuff (like tomatoes) are out of season now, so I'm not sure what we're going to be able to grow with the kit.
We got back home, and I put dinner on and we watched a bit of TV together while it cooked. Bath time and bed time went really smoothly, as I think she was pretty tired. Here's hoping she sleeps well tonight.
Until now, Picturefill supported span-based HTML markup that mimicked a pattern we hoped would one day become a web standard: namely, the picture element and its associated features. Following the hard work of the Responsive Images Community Group (chaired by Filament Group’s own Mat Marquis), we’re pleased to report that there are native picture implementations in development for Chrome, Firefox, Opera, and potentially others!
With this news, this week we released a new version of Picturefill that will make the real picture element work in existing browsers, which means you can start using picture today.Scott Jehl, Picturefill 2.0: Use the picture element today
Whether you’re giving a talk, sharing work with your team, or presenting work to your clients, there comes a time when you’ll need to show code outside of a text editor. Copying and pasting code from a text editor to say, Keynote, is an easy process. The difficulties come in when you want to preserve syntax highlighting, which is crucial to bringing code to life.
I’m in the midst of building a few talks that contain a lot of code, so I’ve been exploring tools to improve my workflow from my editor of choice, Sublime Text, to Keynote. I was looking for the easiest way to copy code as rich text—with my preferred color scheme, font face, and font size applied—to be pasted directly into Keynote.
The first tool I tried was a Sublime Text package, installed with Package Control, called SublimeHighlight. With SublimeHighlight installed, you can select code and trigger a command to copy the code to your clipboard as rich text.
Built on top of Pygments, it’s a really nice package for Sublime Text that fits my workflow perfectly. However, the available format options didn’t feel extensive or powerful, and I seemed to be doing a lot of tweaking in Keynote. The speed of copying directly out of Sublime Text was outweighed by the time I spent in Keynote.
I began looking for a tool that would allow me to spend less time tweaking styles in Keynote, and found Highlight, a command line utility with a terrifying amount of documentation. Fear not; the learning curve is low, and the possibilities are endless. To install it, either follow the instructions, or if you’re running OS X and Homebrew, just run brew install highlight.
To achieve my direct-to-Keynote nirvana, I played with the available command line options a bit until I was satisfied. What I came up with looked like this:highlight -O rtf -t 2 -K 40 -k 'Source Code Pro' --style twilight _output.js | pbcopy
Though verbose, it’s not as complicated as it looks: -O rtf sets the output format to rich text, -t 2 sets tabs to 2 spaces, -K 40 sets font size to 40, and -k ‘Source Code Pro’ sets the font face to Source Code Pro, my preferred font face. I created a theme to match my preferred color scheme, Twilight, and specify its use by including —style twilight. To use this without the custom theme, just leave the —style twilight out.
The final bit, _output.js | pbcopy, tells Highlight to run _output.js, the file containing code to be processed, through its formatter and copy the results to the clipboard. All I have to do is run that line, paste into Keynote, and I have a perfectly formatted chunk of code.
It’s not the perfect workflow by any means, but I love the amount of flexibility and control Highlight provides. You can see how I’ve been making heavy use of this tool in talks that I’ve posted to Speaker Deck.
There’s less than a week left to get your proposal in for PyCon Australia 2014, Australia’s national Python Conference. We focus on first time speakers so please get in touch if you have any questions. The full details are available at http://2014.pycon-au.org/cfp
Filed under: Uncategorized Tagged: pyconau
Here are some results for 3,4, and 5 bit quantisers over a range of errors:
Curiously, the natural binary results are a little better (about 1dB less Eb/No for the same SNR). Another surprise is that at low Eb/No (high BERs) the SNRs are about the same for each quantiser. For example around 9dB SNR at Eb/No = -2dB, for 5,4 and 3 bits.
Here is a plot of 2 to 7 bit natural binary quantisers over a wide Eb/No range. Up to about Eb/No of 4dB (a BER of 1%), the 3-7 bit quantisers all work about the same! At lower BER (higher Eb/No), the quantisation noise starts to dominate and the higher resolutions quantisers work better. Each extra bit adds about 6dB of improved SNR.
Channel errors dominate the SNR at BER greater than 1% (Eb/No=4dB). In some sense the extra quantiser bits are “wasted”. This may not be true in terms of subjective decoded speech quality. The occasional large error tends to drag the SNR measure down, as large errors dominate the noise power. Subjectively, this might be a click, followed by several seconds of relatively clean speech. So more (subjective) testing is required to determine if natural or Gray coding is best for Codec 2 parameters. The SNR results suggest there is not much advantage either way.
Here is a plot of the error from the natural and Gray coded quantisers at Eb/No=-2dB. Occasionally, the Gray coded error is very large (around 1.0), compared to the natural coded error which has a maximum of around 0.5.
This example of a 3 bit quantiser helps us understand why. The natural binary and Gray coding is listed below the quantiser values:Quantised Value 0.0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 Natural Binary Code 000 001 010 011 100 101 110 111 Gray Code 000 001 011 010 110 111 101 100
Although Gray codes are robust to some bit errors (for example 000 and 001), they also have some large jumps, for example the 000 and 100 codes are only 1 bit error apart but jump the entire quantiser range. Natural binary has an exponentially declining error step for each bit.
A common task in speech coding is to take a real (floating point) number and quantise it to a fixed number of bits for sending over the channel. For Codec 2 a good example is the energy of the speech signal. This is sampled at a rate of 25Hz (once every 40ms) and quantised to 5 bits.
Here is an example of a 3 bit quantiser that can be used to quantise a real number in the range 0 to 1.0:Quantised Value 0.0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 Binary Code 000 001 010 011 100 101 110 111
The quantiser has 8 levels and a step size of 0.125 between levels. This introduces some quantisation “noise”, as the quantiser can’t represent all input values exactly. The quantisation noise reduces as the number of bits, and hence number of quantiser levels, increases. Every additional bit doubles the number of levels, so halves the step size between each level. This means the signal to noise ratio of the quantiser increases by 6dB per bit.
We use a modem to send the bits over the channel. Each bit is usually allocated the same transmit power. In poor channels, we get bit errors when the noise overcomes the signal and a 1 turns into a 0 (or a 0 into a 1). These bit errors effectively increases the noise in the decoded value, and therefore reduce the SNR. We now have errors from the quantisation process and bit errors during transmission over the channel.
However not all bits are created equal. If the most significant bit is flipped due to an error (say 000 to 100), the decoded value will be changed by 0.5. If there is an error in the least significant bit, the change will be just 0.125. So I decided to see what would happen if I allocated a different transmit power to each bit. I chose the 5 bits used in Codec 2 to transmit the speech energy. I wrote some Octave code to simulate passing these 5 bits through a simple BPSK modem at different Eb/No values (Eb/No is proportional to the the SNR of a radio channel, which is different to the SNR of the quantiser value).
I ran two simulations, first a baseline simulation where all bits are transmitted with the same power. The second simulation allocates more power to the more significant bits. Here are the amplitudes used for the BPSK symbol representing each bit. The power of each bit is the amplitude squared:Bit 4 3 2 1 0 Baseline 1.0 1.0 1.0 1.0 1.0 Variable Power 1.61 1.20 0.80 0.40 0.40
Both simulations have the same total power for each 5 bit quantised value (e.g 1*1 + 1*1 + 1*1 + 1*1 + 1*1 = 5W). Here are some graphs from the simulation. The first graph shows the Bit Error Rate (BER) of the BPSK modem. We are interested in the region on the left, where the BER is higher than 10%.
The second graph shows the quantiser SNR performance for the baseline and variable power schemes. At high BER the variable power scheme is about 6dB better than the baseline.
The third figure shows the histograms of the quantiser errors for Eb/No = -2dB. The middle bar on both histograms is the quantisation noise, which is centred around zero. The baseline quantiser has lots of large errors (outliers) due to bit errors, however the variable power scheme has more smaller errors near the centre, where (hopefully) it has less impact on the decoded speech.
The final figure shows a time domain plot of the errors for the two schemes. The baseline quantiser has more large value errors, but a small amount of noise when there are no errors. The variable power scheme look a lot nicer, but you can see the amplitude of the smaller errors is higher than the baseline.
I used the errors from the simulation to corrupt the 5 bit Codec 2 energy parameter. Listen to the results for the baseline and variable power schemes. The baseline sample seems to “flutter” up and down as the energy bounces around due to bit errors. I can hear some “roughness” in the variable transmit power sample, but none of the flutter. However both are quite understandable, even though the bit error rates are 13.1% (baseline) and 18.7% (variable power)! Of course – this is just the BER of the energy parameters, in practice with all of the Codec bits subjected to that BER the speech quality would be significantly worse.
The simple modem simulation used here was BPSK modem over an AWGN channel. For FreeDV we use a DQPSK modem over a HF channel, which will give somewhat poorer results at the same channel Eb/No. However it’s the BER operating point that matters – we are aiming for intelligible speech over a channel between 10 and 20%, this is equivalent to a 1600 bit/s DQPSK modem on a “CCIR poor” HF channel at around 0dB average SNR.
codec2-dev/src$ ./c2enc 1300 ../raw/ve9qrp.raw - | ./insert_errors - - ../octave/energy_errors_baseline.bin 56 | ./c2dec 1300 - - | play -t raw -r 8000 -s -2 -
codec2-dev/src$ ./c2enc 1300 ../raw/ve9qrp.raw - | ./insert_errors - - ../octave/energy_errors_varpower.bin 56 | ./c2dec 1300 - - | play -t raw -r 8000 -s -2 -
Note the 1300 bit/s mode actually used 52 bits per frame but c2enc/c2dec works with an integer number of bytes so for the purposes of simulating bit errors we round up to 7 bytes/frame (56 bits).
As I wrote this post I realised the experiments above used natural binary code, however Codec 2 uses Gray code. The next post looks into the difference in SNR performance between natural binary and Gray code.