I want Zoe to do one "extra curricular" activity per term this year. Something
dance-related, something gymnastics-related and maybe some other form of sport
(I'm thinking soccer). My girlfriend and I were wandering through Westfield Carindale on
Saturday, and we happened upon a guy from Infinity Martial Arts touting his
wares.
I thought I'd suss it out, and they had an introductory offer where the sign-up
fee and uniform fee were significantly reduced, and they had a pretty flexible
timetable. They were just starting up their East Brisbane location, and the
close proximity to home along with the reduced price sealed the deal.
Long-term, I'd like for Zoe to learn Tae Kwon Do, for self-defense, but BJJ
seemed as good as anything to get her introduced to the idea of martial arts.
The class for 2-4 year olds was billed as "Fun and Fitness 4 Kids" so it's
really a combination of listening to the instructor, some basic
gymnastics-style stuff and a little bit of martial arts.
We biked over this morning (going up Hawthorne Road is a slog) and got there in
about 15 minutes via the direct route. It's in the upstairs of a gym in the
middle of an industrial area, but it was pretty easily accessible by bike.
They're still waiting on some of the equipment, so the space was a little
spartan.
It was just Zoe and I and a mother of two not quite 2 year old twin girls
taking a trial class.
First up, we got her uniform, and she looked so cute. There were pants and a
jacket and a belt. I'm going to have to video the instructor tying up the belt
next week so I can learn how to do it the right way.
The class started with the kids standing on these flat coloured circles
("mushrooms") and effectively playing "Simon Says" ("instructor says") without
being caught out. It was a pretty sneaky way of doing a bunch of warm up
exercises like rotating the knees and ankles. Zoe did very well, but there were
a few that she just point blank refused to do.
Next the instructor set up a bunch of "stations" around the room. The first
station involved me crouching in a fetal position with a football and Zoe had
to try and tip me over to get the football. That was a load of fun. The next
station was a few steps and foam-filled vinyl ramp, and Zoe just had to do a
somersault down that. The next station was pretty much the same but taller, and
Zoe had to do a "sausage roll" on her side down that. The next station was just
a small exercise ball and Zoe had to do some "donkey kicks" on it. The final
station involved me waving a couple of cut-off pool noodles at arm's length,
and Zoe had to run in covering her head and give me a bear hug. We did a few
rotations of these stations. It was heaps of fun.
Next, the instructor got a whole bunch of ball pit balls of different colours,
and scattered them over the floor, and put a basket at each end of the room.
The kids were then instructed to retrieve specific colours as fast as possible.
Zoe started out trying to get as many as possible in her arms before returning
to the basket, but the idea was to do it one ball at a time. A lot of running
back and forth.
Finally, we did some actual BJJ (I think). It was called the "sleeping
crocodile hold" or something like that. I had to lie on my back, and Zoe had to
sneak up to me from my side and grapple me with one arm behind my head and the
other around my waist and a knee in my side.
I have no interest in Zoe learning mixed martial arts, but this class was so
much fun. I was feeling a bit tired this morning before we headed out, but by
the end of it I was so pumped. It was just the right combination of
daddy/daughter rough and tumble, with a bit of gymnastics and following
instruction. I'm pretty certain Zoe enjoyed it. I liked that the instructor
stopped for a water break between each activity, so the kids were kept well
hydrated throughout.
We took the "scenic route" home, because we had no particular time constraints.
It was more like 25 minutes and involved the Norman Park Greenway. I was so
glad we went that way. It was a beautiful ride that I didn't know existed. Very
indirect, it involved going through Woolloongabba, Coorparoo and Norman Park,
around the back of Coorparoo State High School along the side of Norman Creek.
It was semi-wetland conditions.The only part that was a bit annoying was where
Norman Avenue met Wynnum Road. It was quite steep and the green light didn't
last very long.
I had wanted to do story time at Bulimba Library at 10:30am on Fridays, but I'd
rather bike home via the Norman Park Greenway instead, because it's a nice
ride. I've since decided that I'll just use the story time at the library
during wet weather, when we'd be driving to BJJ anyway, and be able to make it
to the library in time after class.
I've also got to figure out where I'm going to fit doing some Science into the
schedule. Fridays are going to be busy I think.
I managed to get Zoe down for a nap by a bit after 12:30pm today. She was
pretty knackered after the class (as was I from biking home) so I let her watch
a bit of TV while I prepared lunch. She was funny, she saw how sweaty I was
when we got home, and suggested I take a shower while she watch some TV.
I was a bit unprepared for my first Science Friday, though. I'd been
considering going to the Sir
Thomas Brisbane Planetarium after BJJ, but I discovered it's closed until
February 7 for maintenance and an upgrade, so that cunning plan was thwarted.
I used her nap time to order 365
Science Experiments and 50 Dangerous Things
(you Should Let Your Children Do). I should get plenty of inspiration
out of those two.
After she woke up, we did the old "vinegar and sodium bicarbonate" trick as our
science experiment. I've finally got a use for my Google Labs Founders' Award
lab coat. I need to try and find some child-sized safety glasses. The adult
ones barely stay on her little nose.
After that, we went for a walk to our local toy store to see if they sold
child-sized safety glasses (they didn't) and then Zoe watched a little bit of
TV and then we walked to the CityCat to go to Teneriffe to catch a bus to
Chinatown.
I couldn't have timed it better if I tried. Just as we got to Chinatown, they
started doing a thing with the Chinese dragons, and I hoisted Zoe up on my
shoulders so she could watch. I wasn't sure how she was going to take it, with
all the noise from the drums and the dragons themselves, but she was
enthralled. We watched other acts and then my girlfriend joined us, and we went
to a Chinese restaurant for dinner.
I bought Zoe these training
chopsticks a while ago, and she's taken to them like a duck to water. I
brought them with us so she could use them at the restaurant, and she ate the
biggest dinner I've ever seen her eat. After dinner, we caught the tail end of
a procession and had some ice cream. We were starting to leave, and there was
another dragon, and Zoe was brave enough to go and touch it on her own, for
good luck. We then made our way back to the bus.
By the time the bus arrived and got us back to Teneriffe, and a CityCat finally
arrived, it was very late, but Zoe was pretty good the whole time. It was
probably the latest night she's ever had with me while we've been out on the
go, and she only got a bit ratty once we were home. It didn't help that she'd
forgotten that she'd put Cowie in a cupboard this morning and we burned some
more time tracking her down.
Today was a fantastic (and very full) day. I enjoyed it a lot, and I think Zoe
did too. Fortunately, Fridays won't always be this full on.
Today was our first expedition to the local Playgroup at the Bulimba
Senior Citizen's Centre, an easy 5 minute bike ride from our place.
I told Zoe we were going to Playgroup when Sarah dropped her around this
morning, and she got very excited and jumped up and down. When Sarah asked
her if she knew what Playgroup was, she said "no!" while continuing to jump
up and down excitedly. We all laughed.
I must have put this on my calendar when I was in Sydney last week, because
I had it down for 8:30am, and we rocked up and there wasn't anyone there. A
lady arrived to set up for a music class, and she said that the Playgroup
didn't usually start until much later, so I figured I'd had a timezone fail
and we went for a little bike ride around Bulimba while we waited.
The lady who was running the Playgroup arrived at about 9:15am, and so we
helped with the set up. Basically lots of toys, a couple of slides and some
basic craft stuff. Heaps of the little IKEA round plastic stools.
Parents (almost exclusively mothers) started trickling in from 9:30am. I've
got a total name overload. We need name tags. Most of the girls seemed to be
about 2 and a half, and a lot of the mothers had very young second children.
Apparently a mother's group had joined en masse because they all had second
children who were crawling, and so meeting in a park wasn't practical any
more.
Structurally, the first hour or so was just a free for all, and the last
half an hour was some songs, a story and some playing under and on a
parachute.
All in all it was a good morning's activity, and at $20 for the term, nice
and cheap. Apparently you're supposed to join Playgroup Queensland as
well, for $40, but that takes care of liability insurance and whatnot. If
only their website used SSL.
Zoe mostly just wanted to play with me. We did a lot of role playing with
some dolls, and she checked out the various toys. She loved that
there was a stage, and took it upon herself to give an impromptu dance
performance for a bit. We also did a little craft activity. She seemed more
interested in helping flap the parachute than going under it, but enjoyed
having a ride on it when the time came.
I've just finished reading How
Not to F*** Them Up by Oliver James. It was quite an interesting
read, although not particularly applicable for my situation, as it more
dealt with the first three years. It was interesting observing a whole bunch
of different mothering techniques in action, both in dealing with their
toddler children, and how they responded to their second infants.
After Playgroup, we biked over to the local toy shop around the
corner from home, and grabbed some birthday presents for the birthday party
on Saturday and came home for lunch. Chicken quesadillas and some mango (I
hadn't realised how much I've missed Queensland mangoes until we moved back,
and I'm glad Zoe loves them as well).
I got her down for a nap earlier today, and after she woke up, I asked Zoe
if she wanted to write on the birthday cards we'd bought for the twins'
birthday presents. She said she didn't know how to write her name (which
isn't true) and wanted to paint them instead, so we compromised and used
some sponge letters to stamp "Z O E" on the cards in paint.
Zoe said that Eva's favourite colour was purple and Layla's was pink (or it
may have been the other way around), so we stamped one with purple paint and
mixed red and white to make something that looked more orange than pink and
stamped the other one.
Then Zoe wanted to glue the two paper plates together that we'd been using
to hold the paint, so we did that, and then she wanted to "hand paint" a
cardboard tube, which seemed to involve me directly squirting various
colours into her hands and then her "painting" the tube with what was in her
hands. The tube quickly ended up a brown/grey colour. All in all, it was a
fabulous mess, and fortunately no walls or doors copped any paint on the way to
the bathroom to clean up.
After that, we cleaned up Zoe's room a bit, which resulted in her going off
and playing with her Magna Doodle with Smudge for a bit, and then we played
Doctor with her doctor set and then we did some baking.
It was a good afternoon, and she only asked to watch TV once, when she first
woke up from her nap, and we managed to successfully divert to other much
more fun stuff.
The 3D-printing technology has gained quite a big momentum in recent times. Its use is spreading widely even among hobbyists and many sources report daily several (sometimes weird) examples of its usage. The thing I like most, as a Free Software activist, is that several 3D-printing-related free and open source software are already available and quite good, and some printers are even released as free hardware.
Unfortunately, Debian is quite lagged behind with regard to the availability of such software in our archive, especially compared to other distributions who already ship much of it. Hopefully this situation will change drastically thanks to the brand new Debian 3D-Printing team, whose purpose is to make Debian a rocking platform to do some serious 3D-printing.
The team is bootstrapping right now, and we are looking for volunteers who are willing to help us. Packagers are greatly welcomed, but also triagers, users and passionate people with some experience in the field are extremely valuable.
People willing to join the team can take a look at our (in-progress) wiki page and apply on the team page on Alioth. As with any good packaging team, a mailing list is available to share ideas, feel free to subscribe it, and feel free to join #debian-3dprinting on OFTC if you want to hang out with other team members.
Yesterday was the first day of my new routine, except I haven't really
established the new routine yet. I think that's going to take a few weeks. It
was, however, the first day of Zoe's new routine, she started Kindergarten.
"Kindergarten" is a bit of an ambiguous term, even within Australia, it
seems. Back when I went to school, there was "pre-school", which was, as
best I can determine, what "Kindergarten" is now, except a year later. It
was optional, half a week, and the year preceding the start of primary
("elementary") school. I think every other state was already doing an extra
year of school (which I think they called "Kindergarten", "Kinder", or
something starting with "K") so Queensland blew up "pre-school", created
"Prep" and now that's the first year of primary school. Zoe will start
"Prep" next year.
Then the Queensland education boffins realised that kids were missing out on
the stuff that "pre-school" used to offer, so they reintroduced it in the
form of "Kindergarten"
(by Queensland standards). It's supposed to be play-based, and isn't really
"long day care". Zoe does Monday, Tuesday and every other Wednesday, from
8:30am until 2:20pm.
I'd only heard about C&K from a
friend after moving back to Brisbane, so we were very fortunate to secure a
place without having camped out on a waiting list from birth. We got very
lucky, and ended up getting multiple offers, but we're pretty thrilled with
the one that Zoe got into. It's a relatively new facility, right next to a
state school and some bushland. They take the kids on excursions into the
bushland, and up to the state school where there's some chickens. The
Kindergarten facility itself is really lovely.
Anyway, yesterday was Zoe's first day. I biked there yesterday morning
(without Zoe) and it took me about 11 minutes. It took me more like 15
minutes to pick her up with the bike trailer. It's uphill on the way there,
but not too much of a slog.
It's been really great that Zoe's BFF from day care, Megan, also scored a
place in the same Kindergarten, as I think this will help the transition for
both girls greatly.
I was able to stay for an extended period of time to help settle Zoe in, and
I was able to leave without her being particularly distressed.
I then biked home, running a few errands along the way. I then got stuck
into a woodworking project (I'm trying to make a
little wooden clothesline for Zoe).
It turns out trying to cut a halved joint with a
hand saw and chisel is a lot of work. I've managed to aggravate an old
rotator cuff injury and the two pieces are a tad too tight, so I'm thinking
I'll redo it and cut the joint out with an electric router instead. I
probably spent at least a couple of hours faffing around with that.
So I banged away with a hammer and chisel for a bit, got a haircut, had a
late lunch and next thing I knew it was 2pm and time to head back on the
bike to pick up Zoe.
She was still asleep on her stretcher when I arrived to pick her up, which
wasn't that surprising, since she tends to sleep later and longer at day
care. I got a good opportunity to chat with her teacher about her first day
and then gently woke her up with a kiss, and we headed home.
I introduced Zoe to one of our new neighbours, and after a snack, we drove
into Fortitude Valley where I had to pick up some mail from my post office
box. When we got back home, I started on dinner while Zoe watched a little
bit of TV. I spontaneously invited my cousin over to join us for dinner, and
we walked down to the Hawthorne Garage for a babyccino after dinner.
It was a good day.
I realised that I'm going to have to be super regimented with my time on the
days Zoe is in Kindergarten, because 2pm is going to roll around very
quickly. "Scarcity brings clarity", as Sergey says...
A new minor / maintenance release RQuantLib 0.3.11
is now on CRAN and
in Debian.
Like the RcppClassic upload two days ago
and the RcppZiggurat and
RcppEigen uploads yesterday,
this release was motivated at least in part by an upcoming Rcpp release about
which I should have more to day soon. A few things got polished and
updated, and we added a plugin which should make use via Rcpp Attribute easier.
RQuantLib
combines (some of) the quantitative analytics of
QuantLib with the
R statistical computing environment and language.
Thanks to
CRANberries, there is
also a
diff to the previous release 0.3.10.
Full changelog details, examples and more details about this package are at
my RQuantLib page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
It is unfortunate that I've been exposed to several companies that all need the same kind of problems solving, again and again:
Remote. Automated. System management.Throw in monitoring of metrics, security fixes, and reporting and there's probably a valuable service there. It probably can't happen though, for three main reasons:
There will be a new option in gcc 4.9 named -fstack-protector-strong , which offers an improved version of -fstack-protector without going all the way to -fstack-protector-all . The stack protector feature itself adds a known canary to the stack during function preamble, and checks it when the function returns. If it changed, there was a stack overflow, and the program aborts. This is fine, but figuring out when to include it is the reason behind the various options.
Since traditionally stack overflows happen with string-based manipulations, the default (-fstack-protector), only includes the canary code when a function defines an 8 (--param=ssp-buffer-size=N, N=8 by default) or more byte local character array. This means just a few functions get the checking, but they re probably the most likely to need it, so it s an okay balance. Various distributions ended up lowering their default --param=ssp-buffer-size option down to 4, since there were still cases of functions that should have been protected but the conservative gcc upstream default of 8 wasn t covering them.
However, even with the increased function coverage, there are rare cases when a stack overflow happens on other kinds of stack variables. To handle this more paranoid concern, -fstack-protector-all was defined to add the canary to all functions. This results in substantial use of stack space for saving the canary on deep stack users, and measurable (though surprisingly still relatively low) performance hit due to all the saving/checking. For a long time, Chrome OS used this, since we re paranoid. :)
In the interest of gaining back some of the lost performance and not hitting our Chrome OS build images with such a giant stack-protector hammer, Han Shen from the Chrome OS compiler team created the new option -fstack-protector-strong, which enables the canary in many more conditions:
-fstack-protector-all for about 10 months now.
As a quick demonstration of the options, you can see this example program under various conditions. It tries to show off an example of shoving serialized data into a non-character variable, like might happen in some network address manipulations or streaming data parsing. Since I m using memcpy here for clarity, the builds will need to turn off FORTIFY_SOURCE, which would also notice the overflow.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct no_chars
unsigned int len;
unsigned int data;
;
int main(int argc, char * argv[])
struct no_chars info = ;
if (argc < 3)
fprintf(stderr, "Usage: %s LENGTH DATA...\n", argv[0]);
return 1;
info.len = atoi(argv[1]);
memcpy(&info.data, argv[2], info.len);
return 0;
Built with everything disabled, this faults trying to return to an invalid VMA:
$ gcc -Wall -O2 -U_FORTIFY_SOURCE -fno-stack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentation fault (core dumped)Built with FORTIFY_SOURCE enabled, we see the expected catch of the overflow in
memcpy:
$ gcc -Wall -O2 -D_FORTIFY_SOURCE=2 -fno-stack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** buffer overflow detected ***: /tmp/boom terminated ...So, we ll leave FORTIFY_SOURCE disabled for our comparisons. With pre-4.9 gcc, we can see that
-fstack-protector does not get triggered to protect this function:
$ gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentation fault (core dumped)However, using
-fstack-protector-all does trigger the protection, as expected:
$ gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** stack smashing detected ***: /tmp/boom terminated Aborted (core dumped)And finally, using the gcc snapshot of 4.9, here is
-fstack-protector-strong doing its job:
$ /usr/lib/gcc-snapshot/bin/gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-strong /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** stack smashing detected ***: /tmp/boom terminated Aborted (core dumped)For Linux 3.14, I ve added support for
-fstack-protector-strong via the new CONFIG_CC_STACKPROTECTOR_STRONG option. The old CONFIG_CC_STACKPROTECTOR will be available as CONFIG_CC_STACKPROTECTOR_REGULAR. When comparing the results on builds via size and objdump -d analysis, here s what I found with gcc 4.9:
A normal x86_64 defconfig build, without stack protector had a kernel text size of 11430641 bytes with 36110 function bodies. Adding CONFIG_CC_STACKPROTECTOR_REGULAR increased the kernel text size to 11468490 (a +0.33% change), with 1015 of 36110 functions stack-protected (2.81%). Using CONFIG_CC_STACKPROTECTOR_STRONG increased the kernel text size to 11692790 (+2.24%), with 7401 of 36110 functions stack-protected (20.5%). And 20% is a far-cry from 100% if support for -fstack-protector-all was added back to the kernel.
The next bit of work will be figuring out the best way to detect the version of gcc in use when doing Debian package builds, and using -fstack-protector-strong instead of -fstack-protector. For Ubuntu, it s much simpler because it ll just be the compiler default.
2014, Kees Cook. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.
A new maintenance release of
RcppEigen is now on
CRAN. And just like
yesterday's RcppClassic upload
and
today's RcppZiggurat upload,
the timing was motivated chiefly by some minor caretaking for an upcoming
Rcpp release --
hopefully soon, and with more details to follow.
But this release also contains some minor cleanups. The NEWS
file entry shown below lists all changes.
Changes in RcppEigen version 0.3.2.0.2 (2014-01-26)Courtesy of CRANberries, there are diffstat reports for the most recent release relative to the preceding version. Questions, comments etc about RcppEigen should go to the rcpp-devel mailing list off the R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A new maintenance release of
RcppZiggurat
is now on CRAN. And just like
yesterday's RcppClassic upload,
this is motivated chiefly by some minor caretaking for an upcoming
Rcpp release --
hopefully soon, and with more details to follow.
This release also contains some small extensions and work-in-progress. By
using R's uniform generator, we can fall back to R's seeding of the RNG --
but going through the R data structures has a performance hit. Similarly,
and somewhat surprisingly, the default generators in both Boost and the C++11
library are not all that speedy.
The NEWS file entry shown below lists all changes.
Changes in version 0.1.2 (2013-12-28)Courtesy of CRANberries, there are diffstat reports for the most recent release relative to the preceding version. More detailed information is on the RcppZiggurat page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
- Add a new generator deploying R's unif_rand which faciliates use of Ziggurat as the user-supplied generator for N(0,1)
- Update a 'local' demo comparing normal distribution RNGs from Boost, C++11 and Armadillo none of which are particularly speedy
- Add declaration to import a symbol from Rcpp to
NAMESPACEto ensure proper instantiation with the upcoming Rcpp version
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A maintenance release of RcppClassic, now at version 0.9.5, went out to
CRAN today. Nothing changed in
user-facing code. The build was triggered by a change in an upcoming Rcpp
release (more about that another time), and a few minor updates were needed
for extended checks done by R.
Courtesy of CRANberries, there is
the set of changes relative to
the previous release 0.9.4.
Questions, comments etc should go to the
rcpp-devel mailing list
off the R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A bug fix release of Armadillo
came out and was turned into a new RcppArmadillo
release which is now on CRAN
and will go shortly to Debian.
The complete list of changes is below.
Changes in RcppArmadillo version 0.4.000.2 (2014-01-21)Courtesy of CRANberries, there is also a diffstat report for the most recent release As always, more detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
- Upgraded to Armadillo release Version 4.000.2
- fix for
randi()generating out-of-interval values- workaround for a bug in the Intel compiler
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
A new major release 0.4.0 of
RProtoBuf,
is now on CRAN.
RProtoBuf
provides GNU R
bindings for the
Google Protocol Buffers ("Protobuf")
data encoding
library used and released by Google, and deployed as a language and
operating-system agnostic protocol by numerous projects.
With this release, we are welcoming
Jeroen Ooms
to the team. Jeroen had already worked on some RProtoBuf extensions in the
context of his OpenCPU project; we have now
integrated those Protocol Buffers functions. And Jeroen pushed all the right buttons to
finally get RProtoBuf built on everybody's least-favourite operating system
by provding a static library for use by
win-builder and
CRAN.
Murray once again did a lot of work on internals.
His use of the LLVM tool llvm-format was particular helpful to
make our coding style a little more consistent.
The complete NEWS file entry for this release follows:
Changes in RProtoBuf version 0.4.0 (2014-01-14)CRANberries also provides a diff to the previous release 0.3.2. More information is at the RProtoBuf page which has a draft package vignette, a 'quick' overview vignette and a unit test summary vignette. Questions, comments etc should go to the rprotobuf mailing list off the RProtoBuf page at R-Forge.
- Changes to support CRAN builds for MS Windows.
- Added functions
serialize_pb,unserialize_pb, andcan_serialize_pbplus documentation from Jeroen Ooms RProtoBufUtils package.- New dir
inst/pythonwith some Python examples.- Added Jeroen Ooms as author.
- Vignettes have been converted to the R 3.0.0 or later use of external vignette builders, no longer need a
Makefile- Added missing methods to dollar completion list for Message, Descriptor, EnumValueDescriptor, and FileDescriptor classes.
- Add missing export for
.DollarNamesEnumValueDescriptor to allow completion on that class.- Add more than 15 additional pages to the main Intro vignette documenting better all of the S4 classes implemented by RProtoBuf, updating the type mapping tables to take into account 64-bit support, and documenting advanced features such as Extensions.
- Added better error checking in EnumDescriptors to catch the case when wrong types are provided.
- Updated the FileDescriptor
name()method to accept a boolean for full paths just like the genericname()method.- Correct a bug that incorrectly dispatched
as.character()whenas.list()was called on Descriptor objects.- Update FileDescriptor
$dispatch to work properly for the names of fields defined in the FileDescriptor, instead of just returningNULLeven for types returned by$completion.- Added a reservation for extension fields in the example tutorial.Person schema.
- Support setting int32 fields with character representations and raise an R-level
stop()error if the provided string can not be parsed as a 32-bit integer, rather than crashing the R instance.- Update the project TODO file.
- Add better documentation and tests for all of the above.
- Corrected the handling of uint32 and fixed32 types in protocol buffers to ensure that they work with numbers as large as 2^32 - 1, which is larger than an integer can hold in R since R does not have an unsigned integer class. These values are stored as doubles internally now to avoid losing precision.
- Added unit tests to verify behavior of RProtoBuf with extreme values for uint32 types.
- Removed old exception handling code and instead rely on the more modern Rcpp::stop method maintained in Rcpp.
- Add better error messages when setting a repeated field of messages to inform the user which element index was of the wrong type and what the expected type was.
- Add an optional 'partial' argument to readASCII allowing uninitialized message fragments to be read in.
- (internal) Added const qualifiers in more places throughout the C++ code for type safety.
- (internal) Standardize coding conventions of the C++ files and run them through clang-format for consistency. A STYLE file has been submitted to R-Forge with details about the coding standards and how they are enforced with Emacs and clang-format.
- Applied changes suggested by Kevin Ushey to the
S4class handling to support both the currently released Rcpp as well as the currently pending next version.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
Tanglu

I was back at my parents' over Christmas, like usual. Before I got back my Dad had mentioned they'd been having ADSL stability issues. Previously I'd noticed some issues with keeping a connection up for more than a couple of days, but it had got so bad he was noticing problems during the day. The eventual resolution isn't going to surprise anyone who's dealt with these things before, but I went through a number of steps to try and improve things.
Firstly, I arranged for a new router to be delivered before I got back. My old Netgear DG834G was still in use and while it didn't seem to have been the problem I'd been meaning to get something with 802.11n instead of the 802.11g it supports for a while. I ended up with a TP-Link TD-W8980, which has dual band wifi, ADSL2+, GigE switch and looked to have some basic OpenWRT support in case I want to play with that in the future. Switching over was relatively simple and as part of that procedure I also switched the ADSL microfilter in use (I've seen these fail before with no apparent cause).
Once the new router was up I looked at trying to get some line statistics from it. Unfortunately although it supports SNMP I found it didn't provide the ADSL MIB, meaning I ended up doing some web scraping to get the upstream/downstream sync rates/SNR/attenuation details. Examination of these over the first day indicated an excessive amount of noise on the line. The ISP offer the ability in their web interface to change the target SNR for the line. I increased this from 6db to 9db in the hope of some extra stability. This resulted in a 2Mb/s drop in the sync speed for the line, but as this brought it down to 18Mb/s I wasn't too worried about that.
Watching the stats for a further few days indicated that there were still regular periods of excessive noise, so I removed the faceplate from the NTE5 master BT socket, removing all extensions from the line. This resulted in regaining the 2Mb/s that had been lost from increasing the SNR target, and after watching the line for a few days confirmed that it had significantly decreased the noise levels. It turned out that the old external ringer that was already present on the line when my parents' moved in was still connected, although it had stopped working some time previously. Also there was an unused and much spliced extension in place. Removed both of these and replacing the NTE5 faceplate led to a line that was still stable. At the time of writing the connection has been up since before the new year, significantly longer than it had managed for some time.
As I said at the start I doubt this comes as a surprise to anyone who's dealt with this sort of line issue before. It wasn't particularly surprising to me (other than the level of the noise present), but I went through each of the steps to try and be sure that I had isolated the root cause and could be sure things were actually better. It turned out that doing the screen scraping and graphing the results was a good way to verify this. Observe:
I have just enrolled in a MOOC to learn about programming with Android.
There are many tutorials and reports of people using Linux for the
development of the apps out there, but, unfortunately, many of them are
outdated or contain misleading information.
You will find bazillion instructions out there telling you to install
JDK6. (Even the instructions in the MOOCs say so, and Google says that it is
the only supported version of Java). Even more than that, some of them will
tell you that you should not use OpenJDK, but use Oracle's JDK instead.
So, if you have a pure amd64 system and you try to install the x86-64
version of Google's Android Developer Tools (ADT), you are going to have a
surprise: you will have all sorts of programs telling you that you have file
not found, even though the required binaries are there.
(This is, of course, besides install openjdk-7-jdk, if you wish to use the
integrated Eclipse environment).
Turns out that the so-called 64-bit ADT/SDK actually has many 32-bit
executables(!) and they aren't statically linked. Inspecting them, I needed
the following packages:
gcc-4.8-base:i386
libc6-i686:i386
libc6:i386
libgcc1:i386
libstdc++6:i386
zlib1g:i386
It is worth observing that:
libstdc++6:i386 depends (transitively) on libc6:i386, libgcc1:i386,
and gcc-4.8-base:i386.zlib1g:i386 depends (transitively) on libc6:i386, libgcc1:i386, and
gcc-4.8-base:i386.apt-get install libstdc++6:i386 zlib1g:i386
Although not necessary, since you are using an amd64 machine, your computer
already supports many more recent instructions that will be used if you
install the package libc6-i686:i386.
To avoid the emulator from spitting out error messages related to libGL.so,
install libgl1-mesa-dev (note: not i386 here).
This way, you will be able to run the embedded QEMU with full KVM
acceleration if you pass the options -qemu -m 1024 -enable-kvm on
Eclipse's "Run > Run Configurations... > Target > Additional Emulator
Command Line Options".
After that, you are probably good to go.
Somalia's chief exports appear to be morally-ambiguous Salon articles about piracy and sophomoric evidence against libertarianism. However, it is the former topic that Captain Phillips concerns itself with, inspired by the hijacking of the Maersk Alabama container ship in 2009.
What is truth? In the end, Captain Phillips does not rise above Pontius Pilate in providing an answer, but it certainly tries using more refined instruments than irony or leaden sarcasm.
This motif pervades the film. Obviously, it is based on a "true story" and brings aboard that baggage, but it also permeates the plot in a much deeper sense. For example, Phillips and the US Navy lie almost compulsively to the pirates, whilst the pirates only really lie once (where they put Phillips in greater danger).
Notice further that Phillips only starts to tell the truth when he thinks all hope is lost. These telling observations become even more fascinating when you realise that they must be based on the testimony of the, well, liars. Clearly, deception is a weapon to be monopolised and there are few limits on what good guys can or should lie about if they believe they can save lives.
Even Phillip's nickname ("Irish") is a falsehood he straight-up admits he is an American citizen.
The racist idea that Africans prefer an AK-47 rotated about the Z-axis is socially constructed.
The drone footage: I'd love to write an essay about how Call of Duty might have influenced (or even be) cinema.
Somalia's chief exports appear to be morally-ambiguous Salon articles about piracy and sophomoric evidence against libertarianism. However, it is the former topic that Captain Phillips concerns itself with, inspired by the hijacking of the Maersk Alabama container ship in 2009.
What is truth? In the end, Captain Phillips does not rise above Pontius Pilate in providing an answer, but it certainly tries using more refined instruments than irony or leaden sarcasm.
This motif pervades the film. Obviously, it is based on a "true story" and brings aboard all that well-travelled baggage, but it also permeates the plot in a much deeper sense. For example, Phillips and the US Navy lie almost compulsively to the pirates, whilst the pirates only really lie once where they put Phillips in greater danger.
Notice further that Phillips only starts to tell the truth when he thinks all hope is lost. These telling observations become even more fascinating when you realise that they must be based on the testimony of the, well, liars. Clearly, deception is a weapon to be monopolised and there are few limits on what good guys can or should lie about if they believe they can save lives.
Even Phillip's nickname ("Irish") is a falsehood he straight-up admits he is an American citizen.
The racist idea that Africans prefer a AK-47 rotated about the Z-axis is socially constructed.
The drone footage: I'd love to read (or write) an essay about how Call of Duty might have influenced cinema.
Next.