I have this project in my head, I want to work on it but I always lack the time. In order to go forward, I thought I could write about it, at least it would let me clarify my ideas and the core goals. So here I am, I will present you Librement (I have registered the alioth project but it s empty).
The core goal is to make it easy for every user to contribute to free software in some way. I will now present the main features that I envision.
Defining skills and interests
In order to propose tasks that the user can do, we must have an idea of his skills. So on the first run (and later through a preferences menu) the user will be invited to define his skills:
Follow me on Identi.ca, Twitter and Facebook. Or subscribe to this blog by RSS or by email.
11 comments Liked this article? Click here. My blog is Flattr-enabled.
i suspect a lot of people are used to forwarding TCP sockets with SSH -- for example, to connect locally to a mysql daemon that runs only on the loopback interface of a remote machine (this is debian's default mysql-server configuration): ssh -N -T -oExitOnForwardFailure=yes -L 3306:localhost:3306 remoteuser@mysqlserver.exampleBut sometimes, the remote service runs on a UNIX-domain socket, not on a TCP socket -- for example, debian's default configuration for postgresql is to have it listen only on a UNIX domain socket in /var/run/postgresql, and use SO_PEERCRED with a simple system account == psql account mapping scheme to authenticate users without needing any extra credentials. This is not quite as simple to forward over ssh, but it's doable as long as socat is installed on both your local host and on the remote postgres server. Here's one way to do it if $SOCKET_DIR points to the full path of a directory under the user's control (this is all one command, split across lines for easier reading):
socat "UNIX-LISTEN:$SOCKET_DIR/.s.PGSQL.5432,reuseaddr,fork" \ EXEC:'ssh remoteuser@psqlserver.example socat STDIO UNIX-CONNECT\:/var/run/postgresql/.s.PGSQL.5432'Then, you'd connect with something like:
psql "user=remoteuser host=$SOCKET_DIR"Each such psql connection will trigger an ssh connection to be made. Of course, this won't work well if ssh has to prompt for passwords, but you should be using ssh-agent anyway, right? There are at least a couple nice features of being able to use postgresql from a local client like this:
(This is a part of a series of posts on my recent experience with Windows. See Windows (I) for the first post.)
For the past month, I got disconnected from basically all of my usual activities. Not only from Debian work (well, yes, I followed up on a couple of important bugs and releases, but I was in a very low power consumption mode of sorts), DebConf organization/following (some people have contacted me regarding the DebConf 12 venue decision, for which we should start working and have a presentation soon) Even the always-so-important Real Life got pushed aside. I barely participated in this year's EDUSOL (On-line Encounter of Education and Free Software). Even work suffered I asked my boss to hold any incoming requests for me (save, of course, for urgent stuff).
I am now shyly coming up from the hole I dug myself in for this time.
Why did I do such a thing?
I do not have a formal education beyond high school. Due to several personal issues, I was accepted to the best university in my country, and to the first generation of the study program I would definitively love to have followed, but didn't attend.
Of course, I had a fair bit of computing background, enough to be competitive and start working. After amazingly few years, I didn't only get a decent job, but I got a job precisely at the very university I wanted to study at (and where my father has worked for the past 40 years). And, even with some changes along the years, here I am with 10 years of laboral history in this university, with an academic position (although the smallest academic position, but still). It is one of my life's achievements, one of the things that makes me proudest of.
Still, I don't want to stay at this level for the rest of my life. And an institution such as this one has rules Yes, flexible enough to allow me in, but rules whose importance I cannot deny. I aspire to become a professor/researcher at some point, and that is just not possible without filling in the prerequisites. Besides, I want to try my hand at teaching at a universitary level.
So, what choices did I have besides devoting at least four years to full-time study? Well, there is a government entity that evaluates and regulates formal education given by smaller universities CENEVAL. For probably around ten years now, they have offered the ACREL (Acuerdo 286 Licenciatura) program to validate professional knowledge acquired through work experience And I'm writing this detail as several people have asked me for details on it. So, once you are accepted in the program (basic requisites: Having a high school certificate, over 30 year old, and with over 10 years of provable work experience), they can grant a Licenciatura degree (i.e. the equivalent to a four-year study program). So, in order to get it granted, I have to:
We ve come a long way since the times when you needed to configure 2 X servers in XDM just to be able to use 2 X sessions at once. However there was still some way to go until recently. A number of bugs that could be wrongly attributed to bugs in the X server or in the desktop environment were actually caused by the display manager doing crap.
GDM up to 2.20
Since the introduction of the flexible X servers feature, GDM hadn t evolved much on the matter of user switching. What it used to do was pretty straightforward:
Earlier in the year, Romain and I did a bunch of initial work on a wrapper from
R to the
GNU GSL by way of our
Rcpp package for
seamless R and C++ integration. But other work kept us busy and this fell a
little to the side.
We have now found some time to finish this work for a first release, together
with a nicely detailed eleven page
package vignette.
As of today, the package is now a
CRAN package, and
Romain already posted a nice
announcement on his blog
and on
the rcpp-devel list.
So what does RcppGSL do? I gave the package
its own webpage here
as well and listed these points as key features of RcppGSL:
#include <RcppGSL.h> #include <gsl/gsl_matrix.h> #include <gsl/gsl_blas.h> extern "C" SEXP colNorm(SEXP sM) try RcppGSL::matrix<double> M = sM; // create gsl data structures from SEXP int k = M.ncol(); Rcpp::NumericVector n(k); // to store results for (int j = 0; j < k; j++) RcppGSL::vector_view<double> colview = gsl_matrix_column (M, j); n[j] = gsl_blas_dnrm2(colview); M.free() ; return n; // return vector catch( std::exception &ex ) forward_exception_to_r( ex ); catch(...) ::Rf_error( "c++ exception (unknown reason)" ); return R_NilValue; // -WallThis example function is implemented in an example package contained in the RcppGSL package itself -- so that users have a complete stanza to use in their packages. This will then build a user package on Linux, OS X and Windows provided the GSL is installed (and on Windows you have to do all the extra steps of defining an environment variable pointing to and of course install Rtools to build in the first place---Linux and OS X are so much easier for development). Another complete example is in the package itself and provides a faster (compiled) alternative to the standard lm() function in R; this example is the continuation of the same example I had in several versions of my Intro to HPC with R tutorials and in the Rcpp package itself as an early example. We will try to touch base with CRAN package authors using both GSL and Rcpp to see how this can help them. The API in our package may well be incomplete, but we are always happy to try to respond to requests for additional features brought to our attention, preferably via the rcpp-devel list. More information is on the RcppGSL page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
The new RQuantLib release 0.3.5
is now on CRAN and
in Debian.
RQuantLib
combines (some of) the quantitative analytics of
QuantLib with the
R statistical computing environment and language.
Most of the changes were made two and four weeks ago: first in response to
some warnings triggered by R 2.12.0 on the included manual pages which needed
a brush-up, and then again is some consolidation of manual pages and some
other minor tweaks. The release was
then held back at CRAN as we noticed that manual pages, when collated to a
single large document, triggered a segmentation fault in the latex
compiler. Oddly enough only in Europe (if the a4paper option was
used) and not here (where I use uspaper). Long story short, this
turns out to be a bug in the latex toolchain (which we reported as
Debian bug report 604754)
which is apparently is known but has no known fix yet (a sample file was
supplied with the bug report if you want to take a look).
With that, special thanks go to Kurt Hornik and Brian Ripley on the R Core
team who made a change to how R processes the manual which made it resilient
to the latex bug so that normal release of the package could proceed (and the
shiny manual
is available too).
Thanks to
CRANberries, there is
also a
diff to the previous release 0.3.4.
Full changelog details, examples and more details about this package are at
my RQuantLib page.
Plack is one of these wonderful adventures in the modern Perl world that makes it fun to write Web applications in Perl again. But I have a few applications written with Apache/mod_perl and they are not fun to work with. So what would you do?
One option would be to take the long road and port these apps to use Plack instead of messing around with Apache2::RequestRec. For this to work you might need to review the full code base before seeing any signs of progress.
Another option is to mock your Apache2::RequestRec object using Plack. This is the road explored by Plack::App::WrapApacheReq. With very little work this enables you to run your mod_perl application with any Plack handler you want. You can run your application as a stand alone server or serve it with nginx trough FastCGI.
But the fun doesn t stop here. Debugging and profiling mod_perl have always been a PITA, but with Plack::App::WrapApacheReq it is easy. Just take the generic.psgi example and it enables you to run the Perl debugger easy or just to use NYTProf on your request handling code.
The initial ideas for writing Plack::App::WrapApacheRec came from my mocking code to test a legacy mod_perl application. Even this gets more fun by using Plack. I havn t tested it yet, but with Plack::Test and Plack::Test::ExternalServer it should be trivial to run the same set of tests directly in a single process test suite or against your deployed server.
Plack::App::WrapApacheRec is still in it s infancy. It only mocks as much of Apache2::RequestRec as I need to run a single legacy application and to run Plack::Handler::Apache2 (as an absurd example, but yes we are self hosting). But I think that with very little work we should be able to run most mod_perl applications. Take it out for a ride, if it complains about a missing method please report it with CPAN s RequestTracker. Patches would be appreciated (or pull requests on github), but just a list of unimplemented method you need would be excellent.
Plack is fun, now working with mod_perl applications might become fun too.
As part of the Training Sessions initiative organized by the Debian Women project, this week a lesson about Python packaging will be held. The lesson, which is aimed at an intermediate audience, will focus specifically modules and applications packaging and will be held by Piotr O arowski who is member of Python Applications Packaging Team and Debian Python Modules Team.
The session will take place, as usual, on #debian-women channel on irc.debian.org on Thursday, 2nd December at 20:00 UTC.
Cause of the advanced topic is madatory to have some knowledge about Debian packaging (see, for example Lars Wirzenius tutorial) and about general Python development.
The lesson will consists of a first, theoretical, part in wich Piotr will explain us some basics; and of a Q&A part, entirely dedicated to more advanced problems.
See you on Thursday!
Francesca Ciceri
The Debian archive is known to be one of the largest software collections available in the free software world. With more than 16,000 source packages and 30,000 binary packages, users sometimes have trouble finding packages that are relevant to them. Debian developer Enrico Zini has been working on infrastructure to solve this problem. During the recent mini-debconf Paris, Enrico gave a talk presenting what he has been working on in the last few years, which hasn t gotten yet the attention it deserves .
Enrico is known in the Debian community for the introduction of debtags, a system
used to classify all packages using facets.
Each facet describes a specific kind of property: type of user-interface, programming language it s written in, type of document manipulated, purpose of the software, etc. His most recent work builds on that. It is available in Debian and Ubuntu in the apt-xapian-index package. Its purpose is to allow advanced queries over the database of available packages.
Users of apt-xapian-index
He started by presenting some early users of the infrastructure. The most widely know is Ubuntu s software center. Its search feature provides results almost instantly thanks to apt-xapian-index. But it is
a very simple interface that doesn t exploit many of the advanced
features provided by the apt-xapian-index.
Another early adopter, making use of some more advanced features, is GoPlay!. It s a graphical user interface to find games. It makes use of debtags to classify games so that you can browse, for example, all 3D action/arcade games related to cars. GoPlay has even been extended to be a more generic debtags based package browser and the package now also provides GoLearn!, GoAdmin!, GoNet!, GoOffice!, GoSafe!, and GoWeb!.
Fuss-launcher is an application launcher and not a package browser, but by using apt-xapian-index, it s able to reuse information provided at the package level to make it easier to find installed applications. Package descriptions tend to be more verbose than those embedded in .desktop files. Enrico also showed another nice feature to the audience: if you drag a document onto its window, it will show you a list of applications that can open it.
Last but not least, apt-xapian-index provides a command line search tool that is vastly superior to the traditional apt-cache
search: it s axi-cache search (axi stands for apt-xapian-index). Enrico compared the output of a search on the letter r . While apt-cache spits out an infinite list of packages containing this letter somewhere in the description, axi-cache only listed packages related to GNU R. He also demonstrated the contextual tab completion. It makes it easy to use debtags and to refine your search. Once you have typed a first keyword, the tab-completion for the second one only contains keywords or debtags that are actually able to provide more
restrictive results. Advanced queries with logical operations (AND, OR,
NOT, XOR) are also supported.
Features of the backend
Enrico then dived into the internals. Xapian s search engine is at the root of this infrastructure. He likes it because it s a simple library
(i.e. no daemon) and it has nice Python bindings. While apt-xapian-index s core work is to index the descriptions of all the packages, it actually stores much more and can be easily extended with plugins (written in Python).
For instance, the information stored encompasses:
This article was first published in Linux Weekly News. Click here to subscribe to my newsletter and keep up with the Debian/Ubuntu news thanks to my monthly digest.
No comment Liked this article? Click here. My blog is Flattr-enabled.
Yesterday in Harald K nig s commandline talk at LinuxDay.at, I
first heard of cat s -e option, and noticed that cat has quite some
interesting options. From the man page of cat:
user@host:demo $ cat bla
abc
user@host:demo $ cat -Ab bla
1 M-CM-$ M-CM-6 M-CM-<^IM-CM-^_ $
$
$
2 abc$
user@host:demo $ cat -Ens bla
1 $
2 $
3 abc$
user@host:demo $
I hope this blog posting will reduce the percentage of useless uses
of cat by raising the amount of useful uses of cat . :-)
It is Sunday, and I was bored, and wanted to experiment a bit with
a possible future direction for piuparts. To do that, I needed to
create a virtual machine image with Debian installed in it. I failed.
I failed, because I am not familiar with all the stuff I need to be
to pull this off. More shame to me.
There's a lot of possible ways to do this, and I tried a few, but
ran out of time before I could exhaust all opportunities. Somewhere
out there is probably the magic rune I am looking for, and if so,
please point it out to me. I might want to get back to this problem
say day, and having a working rune would simplify things a lot.
Here are things I tried:
debootstrap, then convert that into a
bootable image: create image with qemu-img, partition it with
parted (so I can have a swap partition), create devices for the
partitions with kpartx, create filesystem and copy chroot into
the partition. Reason for failure: could not find a way to install
kernel or bootloader into the image.live-boot and
live-config packages installed, it would be what I want. Reason
for failure: --initramfs none either causes the image build to
fail or the resulting image to not have a bootloader at all.
I assume that is the right option, but don't know for sure.
(#605255)qemubuilder might do what I want, but failed to build anything
at all, even after I worked around a bug by specifying architecture
explicitly.
(#440944, open
since 2007)vmdebootstrap squeeze foo.img http://cdn.debian.net/debian
It would be a fairly low-level tool, just like debootstrap is,
but having just one place where all the trickiness to create the initial
image happens would simplify the overall complexity of other tools.
Making it simple to use would allow other stuff to be easily
built on top of the new tool. For example, piuparts could use it to
create a VM image in which to run tests, rather than using chroot,
which would allow more code paths to be tested.
But I'm not ready to write the tool today, alas.
The future
Soon, everyone connected to Spacelabs will have finished their Master s
or PhD (in my case) and nobody will be left to continue the project.
Although this is a bit sad, I think we can be proud of what we have
accomplished, learnt and experienced. I will miss our location high in
the Potentiaal/E-hoog building overlooking Eindhoven, and our being
together as a group. We are however not gone yet, there is still a lot
to plan and to work on if we want to rescue the huge amount of servers
and services that we have accumulated over the years if we were to
leave
1 Yes, the website is very much from the past.
Ever wondered how to easily convert e.g. 10 seamiles into kilometres?
Use units:
$ units
2411 units, 71 prefixes, 33 nonlinear units
You have: 10 seamiles
You want: km
* 18.288
/ 0.054680665
You have: ^C
$
Of course this is interactive. There s also a non-interactive mode:
$ units '10 seamiles' 'km'
* 18.288
/ 0.054680665
$
The line with the asterisk means that 10 seamiles are 18.288
kilometres or 1 kilometre is the 0.054680665th part of 10 seamiles.
This quite non-intuitive output is caused by the fact that unit is
designed to be used with units only:
$ units seamiles km
* 1.8288
/ 0.54680665
$
Now this makes more sense: You have to multiply seamiles with 1.8288
to get kilometres and you have to multiply (not divide) kilometres
with 0.54something to get seamiles.
But this output is still a little bit cumbersome, and annoying if you
want to use it in shell scripts. But for luck, units knows some nice
options, especially -v ( verbose ) and -t ( terse ):
$ units -v '10 seamiles' km
10 seamiles = 18.288 km
10 seamiles = (1 / 0.054680665) km
$ units -t '10 seamiles' km
18.288
Now that s way easier to read and script!
You can also script more complex things like
$ units -v '100 attoparsec/microfortnight' m/s
100 attoparsec/microfortnight = 2.5509901 m/s
100 attoparsec/microfortnight = (1 / 0.39200466) m/s
Unfortunately not all common units are unambiguous for units:
units -v '100 km/h' m/s
conformability error
100 km/h = 1.5091905e+38 s / kg m
m/s = 1 m / s
Well, h seems not to be units unit for hours , so lets tell it
explicity that we want km per hour:
units -v '100 km/hour' m/s
100 km/hour = 27.777778 m/s
100 km/hour = (1 / 0.036) m/s
Looks more like what I expected.
units behaves though a little bit strange when I try to convert
litres per 100 kilometres into miles per gallon:
$ units -t '6L/100km' 'mpg' conformability error 6e-08 m^2 425143.71 / m^2 $Interestingly changing the verbosity helps already in this case:
$ units -v '6L/100km' 'mpg'
reciprocal conversion
1 / (6L/100km) = 39.202431 mpg
1 / (6L/100km) = (1 / 0.025508622) mpg
Greetings from the Debian booth at LinuxDay.at and thanks to Y_Plentyn, rhalina and bzed
for example ideas and the suggestion to write a blog posting about
units. :-)
Next.