Dirk Eddelbuettel: Introducing ghrr: GitHub Hosted R Repository
Background
R relies on package repositories for initial installation of a package via install.packages(). A crucial second step is update.packages(): For all currently installed packages, a list of available updates is constructed or offered for either one-by-one or bulk updates. This keeps the local packages in sync with upstream, and provides for a very convenient way to obtain new features, bug fixes and other improvements. So by installing from a repository, we automatically have the ability to track the repository for updates.
Enter drat
Fairly recently, the drat package was added to the R ecosystem. It makes both aspects of package distribution easy: providing a package (if you are an author) as well as installing it (if you are a user). Now, because drat is at the same time source code (as it is also a package providing the functionality), and a repository (using what drat provides ib features), the "namespace" becomes a little cluttered.
But because a key feature of drat is the "one variable" unique identification via the GitHub, I opted to create a drat repository in the name of a new organisation: ghrr. This is a simple acronym for GitHub Hosted R Repository.
Use cases
We can outline several use case for packages in ghrr:
- packages not published in a repo by their authors: I already use two like that:
- packages possibly unsuitable for mainline repos:
- Rblpapi is a great package by Whit Armstong and John Laing to which I have been contributing quite a bit of late. As it requires a free-to-use but not open source library and headers from Bloomberg, it will never make it to the mainline repository for R, but hosting it in ghrr is perfect as I can easily update several machines at work once I cut a new development release;
- winsorize is a small package I needed a few weeks ago; it is spun out of robustHD but does not yet contain new code so Andreas and I are content to keep it in this drat for now;
- packages in pre-relase mode:
- RcppArmadillo where I announced both a release candidate before Armadillo 5.000 came out, as well as the actual RcppArmadillo 0.500.0.0 which is not (yet) on the mainline repository as two affected packages need a small update first. Users, however, can get RcppArmadillo already from the sibling Rcpp drat repo.
- RcppToml is a new package I am currently working on implementing a toml parser based on cpptoml. It works, but it not quite ready for public announcements yet, and hence perfect for ghrr.
Going forward
ghrr is meant to be open. While anybody can open a drat repository, particularly on GitHub, it may be beneficial to somehow group packages. This is however not something that can be planned ex-ante: it may just happen if others who see similar benefits in this can in fact contribute. In that spirit, I strongly encourage pull requests.
Early on, I made my commit messages conform to a pattern of package version sha1 repourl to make code provenance of every commit very clear. Ideally, subsequent commits would conform to such a scheme, or replace it with a better one.
Some Resources
A few links to learn more about drat and ghrr:
- ghrr repo view (to see both content and commits) and ghrr web page
- drat repo view, drat code page, and drat web page
Comments and questions via email or issue tickets are more than welcome. We hope that others find ghrr to be a useful tool for easy repository management and use via GitHub.
Use cases
We can outline several use case for packages in ghrr:
- packages not published in a repo by their authors: I already use two like that:
- packages possibly unsuitable for mainline repos:
- Rblpapi is a great package by Whit Armstong and John Laing to which I have been contributing quite a bit of late. As it requires a free-to-use but not open source library and headers from Bloomberg, it will never make it to the mainline repository for R, but hosting it in ghrr is perfect as I can easily update several machines at work once I cut a new development release;
- winsorize is a small package I needed a few weeks ago; it is spun out of robustHD but does not yet contain new code so Andreas and I are content to keep it in this drat for now;
- packages in pre-relase mode:
- RcppArmadillo where I announced both a release candidate before Armadillo 5.000 came out, as well as the actual RcppArmadillo 0.500.0.0 which is not (yet) on the mainline repository as two affected packages need a small update first. Users, however, can get RcppArmadillo already from the sibling Rcpp drat repo.
- RcppToml is a new package I am currently working on implementing a toml parser based on cpptoml. It works, but it not quite ready for public announcements yet, and hence perfect for ghrr.
Going forward
ghrr is meant to be open. While anybody can open a drat repository, particularly on GitHub, it may be beneficial to somehow group packages. This is however not something that can be planned ex-ante: it may just happen if others who see similar benefits in this can in fact contribute. In that spirit, I strongly encourage pull requests.
Early on, I made my commit messages conform to a pattern of package version sha1 repourl to make code provenance of every commit very clear. Ideally, subsequent commits would conform to such a scheme, or replace it with a better one.
Some Resources
A few links to learn more about drat and ghrr:
- ghrr repo view (to see both content and commits) and ghrr web page
- drat repo view, drat code page, and drat web page
Comments and questions via email or issue tickets are more than welcome. We hope that others find ghrr to be a useful tool for easy repository management and use via GitHub.
- Rblpapi is a great package by Whit Armstong and John Laing to which I have been contributing quite a bit of late. As it requires a free-to-use but not open source library and headers from Bloomberg, it will never make it to the mainline repository for R, but hosting it in ghrr is perfect as I can easily update several machines at work once I cut a new development release;
- winsorize is a small package I needed a few weeks ago; it is spun out of robustHD but does not yet contain new code so Andreas and I are content to keep it in this drat for now;
- RcppArmadillo where I announced both a release candidate before Armadillo 5.000 came out, as well as the actual RcppArmadillo 0.500.0.0 which is not (yet) on the mainline repository as two affected packages need a small update first. Users, however, can get RcppArmadillo already from the sibling Rcpp drat repo.
- RcppToml is a new package I am currently working on implementing a toml parser based on cpptoml. It works, but it not quite ready for public announcements yet, and hence perfect for ghrr.
package version sha1 repourl to make code provenance of every commit very clear. Ideally, subsequent commits would conform to such a scheme, or replace it with a better one.
Some Resources
A few links to learn more about drat and ghrr:
- ghrr repo view (to see both content and commits) and ghrr web page
- drat repo view, drat code page, and drat web page
Comments and questions via email or issue tickets are more than welcome. We hope that others find ghrr to be a useful tool for easy repository management and use via GitHub.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
I m a big fan of
Erlang lets you write applications supporting zero downtime by switching one live system to another running a different application version converting the application s state on the fly to the new representation. Debian packages however can have only one installed version on a system which prevents using Erlang s hot-upgrade feature easily.
About a decade ago, I played in the (now defunct) "Jozef Pauly
ensemble", a flute choir connected to the musical academy where I was
taught to play the flute. At the time, this ensemble had the habit of
goin on summer trips every year; sometimes these trips were large
international concert tours (like our 2001 trip to Australia), but that
wasn't always the case; there have also been smaller trips, like the
2002 one to the French Ardennes.
While there, we went on a day trip to the city of Reims. As a city close
to the front in the first world war, it has a museum dedicated to that
subject that I remembered going to. But the fondest memory of that day
was going to a park where a podium was set up, with a few stacks of
fold-up chairs standing nearby. I took one and listened to the music.
That was the day when I realized that I kindof like jazz. I had come
into contact with Jazz before, but it had always been something to be
used as a kind of musical wallpaper; something you put on, but don't
consciously listen to. Watching this woman sing, however, was a
different kind of experience altogether. I'm still very fond of her
rendition of "Besame Mucho".
After having listened to the concert for about two hours, they called it
quits, but did tell us that there was a record which you could buy. Of
course, after having enjoyed the afternoon so much, I couldn't imagine
not buying it, so that happened.
Fast forward several years, in the move from my apartment above my
then-office to my current apartment (just around the corner), the record
got put into the wrong box, and when I unpacked things again it got
lost; permanently, I thought. Since I also hadn't digitized it yet at
the time, I haven't listened to it anymore in quite a while.
But that time came to an end today. The record which I thought I'd lost
wasn't, it was just in a weird place, and while cleaning yesterday, I
found it sitting among a bunch of old stuff that I was going to throw
out. Putting on the record today made me realize again how good it
really is, and I thought that I might want to see if she was still
active, and if she might perhaps have made another album.
It was great to find out that not only had she made six more albums
since the one I bought, she'd also become a lot more known in the Jazz
world (which I must admit I don't really follow all that well), and won
a number of awards.
At the time, Youn Sun Nah was just a (fairly) recent graduate from a
particular Jazz school in Paris. Today, she appears to be so much
more...
only one week left until the jessie release. yay!
in the last weeks I didn't find many RC bugs that I could fix; still, here's
the short list; nice feature: I mostly help others or could build an work
done by others.
Sometimes one stumbles upon stuff that touches one deeply. Granted, the topic of the first video from the artist I want to present you now did touch me naturally. But it made me take a closer look. This is about
Like 
After using haproxy at work for some time I realized that it can be configured for a lot of things, for example: it knows about SNI (on ssl is the method we use to know what host the client is trying to reach so that we know what certificate to present and thus we can multiplex several virtual hosts on the same ssl IP:port) and it also knows how to make transparent proxy connections (the connections go through haproxy but the ending server will think they are arriving directly from the client, as it will see the client's IP as the source IP of the packages).With this two little features, which are available on haproxy 1.5 (Jessie's version has them all), I thought I could give it a try to substitute sslh with haproxy giving me a lot of possibilities that sslh cannot do.Having this in mind I thought I could multiplex several ssl services, not only https but also openvpn or similar, on the 443 port and also allow this services to arrive transparently to the final server. Thus what I wanted was not to mimic sslh (which can be done with haproxy) but to get the semantic I needed, which is similar to sslh but with more power and with a little different behaviour, cause I liked it that way.There is however one caveat that I don't like about this setup and it is that to achieve the transparency one has to run haproxy as root, which is not really something one likes :-( so, having transparency is great, but we'll be taking some risks here which I personally don't like, to me it isn't worth it.Anyway, here is the setup, it basically consists of a setup on haproxy but if we want transparency we'll have to add to it a routing and iptables setup, I'll describe here the whole setupHere is what you need to define on /etc/haproxy/haproxy.cfg:frontend ft_ssl bind 192.168.0.1:443 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if req_ssl_hello_type 1 acl sslvpn req_ssl_sni -i vpn.example.net use_backend bk_sslvpn if sslvpn use_backend bk_web if req_ssl_sni -m found default_backend bk_ssh backend bk_sslvpn mode tcp source 0.0.0.0 usesrc clientip server srvvpn vpnserver:1194 backend bk_web mode tcp source 0.0.0.0 usesrc clientip server srvhttps webserver:443 backend bk_ssh mode tcp source 0.0.0.0 usesrc clientip server srvssh sshserver:22 An example of a transparent setup can be found
The 

Experiments
Last week I discovered
This was my fourth month working on Debian LTS. I was assigned 14.5
hours
by