The student application period for applying to GSoC opened last Monday and we already have a couple of very good applications from students. We are still missing yours!
The list of Debian projects includes a nice variety of projects:
In one of the corners of what is now know as Europa, there was a rich,
prosperous and beautiful kingdom known as Trist nia. In the past, not
that long ago, it had been a number of smaller kingdoms and
caliphates, all with their own cultures, religions and ways of life. Wars,
and series of marriages of convenience eventually configured what ended up
being the united kingdom of Trist nia. Throughout the years, some of the
unified cultures grew and flourished, while others struggled to survive in
their ever-shrinking areas of influence.
A required introduction
Sometimes, the minor cultures would suffer due to oppression coming
from the delegates of the King, who would ban any expression of these
cultures, as they were seen as a potential threat to the kingdom's
stability and unity. For example, just a few decades before the main
subject of this tale, the predecessor of the incumbent King took power by
force, after crushing everyone who opposed his uprise during a bloody and
hard civil war. His reign was ruthless and he imposed draconian laws
uppon his people: usage and teaching of the minor languages was banned,
and everyone was forced to use the language of the Centr lia region, in
public or private.
After four decades, the majority of the Tristanian people were sick enough
of the situation to consider standing against their fear of the regime and
demand freedom, but repression prevailed until the old general died. His
place was taken by the King's grandson even if the people had expressed,
just before the Great War, that they had had enough kings and demanded a
ruler they could choose directly. Of course, the new King seemed a lot
nicer than who they had been suffering for ages, so when asked if they
accepted the new situation, an overwhelming majority said yes .
However, there was a region, Verd lia, where the majority said no .
Things were actually more complicated. Verdalians formed a traditional,
proud society, and while the years of oppression had undoubtedly weakened
it, they had managed to preserve their very unique culture, language and
traditions healthy. The Verdal language was really weird to the
ears of Centr lians and even other minor cultures of the Kingdom, and
erudites struggled to find its real origins, not being able to reach
plausible conclusions.
Verdanians, as we already know, were a traditional society, living in a
land of deep and poorly connected valleys. Little they knew or cared about
the complicated matters of Centr lia and other regions. What made them
happy was to take care their sheep and cows, keep a good fire in their
living room and, every now and then, enjoy one of their log cutting
contests. The impositions of the former dictator were too much for them,
and some of them started sabotaging, assaulting and killing some of the
dictator's soldiers, agents and officers. This was a huge risk at the
time; getting caught meant death penalty for sure, and at first, even
people from other regions were in favour of these actions. However, this
popular support greatly diminished when the new King took the throne, as
these minority continued with the killings, while most of the people saw
it was no longer justified.
The Royal Ball
One of the very first measures the young King introduced was to organise
the Royal Ball of Trist nia , a major event through which the people of the
different regions would be able to elect their delegates to the Crown.
Every four years, a Great Ball contest would happen in Centr lia, and the
winners would be able to decide by their own on some of the matters that
affected their region. Verdanians would send a few teams of dancers, each
of which came from different towns or areas. Some Verdanian teams were
happy about the King and the new political situation, but other teams
weren't so much. And some others, while being simple non-violent dancers,
were known to be supporters of the violent minority who kept on harassing,
assaulting and even killing in their struggle for freedom of Verd nia .
The Verdanian groups aligned with the different culture of Verd nia
(including those who were said to support the violent) tended to get a lot
more points in the dancing contest, and a majority of the elected delegates
were appointed by them, making it easier to pass laws and edicts that
favoured protection of their ways, traditions and language.
No matter how hard they tried, the dancing groups closer to Centr lia
kept losing to the majority. After many years of dance contests, these
groups used their closeness to the King's court to pass the Ball Law of
Tristanian, that would ban any dancing group which didn't condemn the assaults
and killings that kept happening in Verd nia. The unsurprising result was
that, with less dancing groups participating in the following Royal Ball, the
Verdanian majority was broken and new delegates, friendly of the
Centralian officers, were elected.
Many people who had been in favour of assaults and killings began to
question this strategy, and this political movement's unity started to
break. In the end, the dancers decided to part ways with the violent; they
wanted to dance in the next ball, and to do so, they wrote a letter to the
King, in which they explicitly expressed their rejection of violent ways,
and their embracing of dancing as the only means to drive their political
agenda. An objective reading of the new Ball Law clearly showed that this
was enough: the text only said the requisite for a dancing group was to
disavow all kinds of violence.
This wasn't really expected in Centr lia, so they started to add new
requirements in an attempt to keep this group from the contest: their
decisive majority in Verd nia was at stake.
The Royal Ball was nearing and registrations for the contest would soon
close. The Centralian government first argued that the dancing group
should reject the violence coming from the Verdanian extremists in
particular. The dancers did it. Then they argued that the dancers were the
same people who had been supporting violence in Verd nia for years, and
obviously their violence rejection statement was a lie. The dancers
struggled to find new dancers who had not been involved in past dances.
But it was not enough. They then claimed that this dance group should be
quarantined for four years, until they could prove they really were
serious about their new non-violent ideas.
The dance group made a plea to the Trist nian Supreme Counsel, a group
of sixteen experts in law of the Kingdom, and argued that all of these
draconian requirements were not part of the law that was being enforced by
the King. Their appeal to the elder counselors was in vain, though. They
ruled this dancing group was as criminal as the violent minority they had
once supported, and should by no means take part in the Royal Ball.
As a last, desperate measure, the dancing group reached an agreement
with other Verdanian dancers to join forces. They would adopt a new name
and new dancing costume colours. Many feared this would only end up in the
ban of the other dancing group.
Unfortunately, the end of this story has not been written yet, but it
will be completed very soon. Only time will tell if things continue being very
sad and unfair in Trist nia, or if the dance contest will once again be
impartial, with legitimate results.
jrollins and i recently did a bunch of cleanup work on debirf, with the result that debirf 0.30 can now build all the shipped example profiles without error (well, as long as debootstrap --variant=fakechroot is working properly -- apprently that's not the case for fakechroot 2.9 in squeeze right now, which is why i've uploaded a backport of 2.14). To try to avoid getting into a broken state again, we set up an autobuilder to create the images from the three example profiles (minimal, rescue, and xkiosk) for amd64 systems. The logs for these builds are published (with changes) nightly at: git://debirf.cmrg.net/debirf-autobuilder-logsBut even better, we are also publishing the auto-generated debirf images themselves. So, for example, if you've got an amd64-capable machine with a decent amount of RAM (512MiB is easily enough), you can download a rescue kernel and image into /boot/debirf/, add a stanza to your bootloader, and be able to reboot to it cleanly, without having to sort out the debirf image creation process yourself. We're also providing ISOs so people who still use optical media don't have to format their own. Please be sure to verify the checksums of the files you download. The checksums themselves are signed by the OpenPGP key for Debirf Autobuilder <debirf@cmrg.net>, which i've certified and published to the keyserver network. What's next? It would be nice to have auto-built images for i386 and other architectures. And if someone has a good idea for a new example profile that we should also be auto-building, please submit a bug to the BTS so we can try to sort it out.Tags: debirf
So the other day, I was able to do this in an Ubuntu natty amd64 chroot
for the first time.
# cat > /etc/apt/apt.conf.d/multiarch-me
APT::Architectures "amd64"; "i386"; ;
^D
# cat >> /etc/dpkg/dpkg.cfg
foreign-architecture i386
^D
# apt-get update
# apt-get install flashplugin-installer:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
[...]
The following NEW packages will be installed:
flashplugin-installer:i386 flashplugin-nonfree:i386 gcc-4.5-base:i386
libatk1.0-0:i386 libavahi-client3:i386 libavahi-common-data:i386
libavahi-common3:i386 libc6:i386 libcairo2:i386 libcomerr2:i386
libcups2:i386 libdatrie1:i386 libdbus-1-3:i386 libdrm2:i386
libegl1-mesa:i386 libexpat1:i386 libfontconfig1:i386 libfreetype6:i386
libgcc1:i386 libgcrypt11:i386 libgdk-pixbuf2.0-0:i386 libgl1-mesa-glx:i386
libglib2.0-0:i386 libgnutls26:i386 libgpg-error0:i386 libgssapi-krb5-2:i386
libgtk2.0-0:i386 libgtk2.0-common libice6:i386 libjasper1:i386
libjpeg62:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386
libkrb5support0:i386 libnspr4:i386 libnspr4-0d:i386 libnss3:i386
libnss3-1d:i386 libpango1.0-0:i386 libpcre3:i386 libpixman-1-0:i386
libpng12-0:i386 libselinux1:i386 libsm6:i386 libsqlite3-0:i386
libstdc++6:i386 libtasn1-3:i386 libthai-data libthai0:i386 libtiff4:i386
libudev0:i386 libuuid1:i386 libx11-6:i386 libx11-data libx11-xcb1:i386
libxau6:i386 libxcb-dri2-0:i386 libxcb-render0:i386 libxcb-shape0:i386
libxcb-shm0:i386 libxcb-xfixes0:i386 libxcb1:i386 libxcomposite1:i386
libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
libxfixes3:i386 libxft2:i386 libxi6:i386 libxinerama1:i386 libxrandr2:i386
libxrender1:i386 libxt6:i386 libxxf86vm1:i386 x11-common zlib1g:i386
0 upgraded, 78 newly installed, 0 to remove and 3 not upgraded.
Need to get 15.1 MB/15.6 MB of archives.
After this operation, 48.9 MB of additional disk space will be used.
Do you want to continue [Y/n]?
It is a truly heady experience, after so many years of talking about the
need to properly support multiarch in Debian and Ubuntu, to see support for
cross-installation of packages come to fruition. If you've talked to me any
time in the past couple of weeks and noticed it's a little hard to get me to
change the subject, well, that's why.
Many who have grown accustomed to Debian and Ubuntu's lack of support for
installing i386 packages on amd64 (or vice versa) may wonder what the fuss
is about. (Whereas others who are well versed in distributions such as Red
Hat and SuSE may laugh and wonder what took us so long...) So maybe a few
words of explanation are in order.
If you've ever installed ia32-libs on an amd64 machine anywhere; if you've
ever noticed a bug where ia32-libs didn't work right because of wrong system
paths, or had to file a request for another library to be added to ia32-libs
because it wasn't included in the set of libraries Debian decided to package
up in this grotesque, all-in-one 32-bit compatibility bundle; if you've ever
decided not to install a 64-bit OS on your perfectly 64-bit-capable hardware
because of concern that you wouldn't be able to run
$random32-bitonly_application; multiarch is for you.
If you've gotten stuck maintaining a lib32foo "biarch" package in Debian
due to popular demand, multiarch is definitely for you. :)
If you've ever cross-compiled software for a different Debian architecture
than the one you were running, multiarch is for you.
If you've ever wanted to run binaries for a different architecture under
emulation, and found it awkward to set up the library dependencies,
multiarch is for you, too.
Because although the .deb world may be a little late to the party, we're
also naturally taking things much
further than anyone's done
with rpm. Multiarch won't just give you the ability to install 32-bit libs
on 64-bit systems; it'll give you the ability to install libs for any known
architecture on any system. And a whole lot of pain just falls out of the
equation in the process. A cross-compiling environment looks the same as a
native-compiling environment. An emulated system looks the same as a native
system. We can start to seriously consider cross-grading systems from one
architecture to another.
And all this is happening now. The groundwork is there in Ubuntu natty.
Wheezy will be the release that brings multiarch to Debian. When dpkg
1.16.0 is uploaded to unstable real soon
now, the
bootstrapping will begin.
I am immensely grateful to everyone who's helped make multiarch a reality -
to Tollef,
Matt and others for seeding the vision;
Aurelien, Matthias and Arthur for their work to
ready the toolchain;
David
and Michael for the apt implementation;
Guillem and Raphael for the dpkg
implementation, and Linaro's support to help make
this possible; and the many other developers who've helped to refine this
design over the years in numerous other BoFs, sessions and mailing list
threads.
I'm excited to find out what the Debian community will do with multiarch now
that it's upon us. Christian, maybe you should start a pool for how long it
will take before all the libraries shipped in ia32-libs have been converted
to multiarch and we can drop ia32-libs from the archive?
Bdale is a long-time Free Software believer, he has been contributing even before Debian existed in the prehistoric era of free software. 4 comments Liked this article? Click here. My blog is Flattr-enabled.
The RInside
package makes it pretty simple and straightforward to embed
R, the wonderful statistical
programming environment and language, inside of a C++ application. This uses
both the robust embedding API provided by R itself, and the higher-level
abstractions from our Rcpp package.
A number of examples are shown on this blog both
here and
here
as well as on the RInside page;
and the source package actually contains well over a dozen complete examples which cover
anything from simple examples to parallel use via
MPI for parallel computing.
Beginning users sometimes ask about how to use
RInside inside
larger projects. And as I had meant to experiment with embedding inside of
the powerful Qt framework anyway, I
started to dabble a little. A first result is now in the SVN sources of
RInside.
My starting point was the classic tkdensity demo that comes with
R itself. It is a good point of departure as Tcl/Tk makes it very
portable---in fact it should run on every platform that runs R---and quite
expressive. And having followed some of the GUI experiments around R over
the years, I have also seen various re-implementations using different GUI frameworks. And so I am adding
mine to this body of work:
The problem I addressed first was actual buildability. For the
RInside
examples, Romain and I provide a Makefile that just works by making
calls to R itself to learn about flags
for R,
Rcpp and
RInside such
that all required headers and libraries are found. That is actually
relatively straightforward (and documented in our vignettes) but a little
intimidating at first---which is why a ready-made Makefile is a good thing.
Qt of course uses qmake
and the .pro files to encode / resolve dependencies. So task one
was to map what our Makefile does into its variables. Turns out that wasn't all that
hard:
The double dollar signs and escaping of parentheses are a little tedious, but hey it works and expands the compiler and linker flags such that everything <emjust works="Works">. The code itself is pretty straightforward too. We instantiate the RInside object as well as the main Qt application object. We then instantiate a new object of class## -*- mode: Makefile; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- ## ## Qt usage example for RInside, inspired by the standard 'density ## sliders' example for other GUI toolkits ## ## Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois TEMPLATE = app HEADERS = qtdensity.h SOURCES = qtdensity.cpp main.cpp QT += svg ## comment this out if you need a different version of R, ## and set set R_HOME accordingly as an environment variable R_HOME = $$system(R RHOME) ## include headers and libraries for R RCPPFLAGS = $$system($$R_HOME/bin/R CMD config --cppflags) RLDFLAGS = $$system($$R_HOME/bin/R CMD config --ldflags) RBLAS = $$system($$R_HOME/bin/R CMD config BLAS_LIBS) RLAPACK = $$system($$R_HOME/bin/R CMD config LAPACK_LIBS) ## if you need to set an rpath to R itself, also uncomment #RRPATH = -Wl,-rpath,$$R_HOME/lib ## include headers and libraries for Rcpp interface classes RCPPINCL = $$system($$R_HOME/bin/Rscript -e \'Rcpp:::CxxFlags\(\)\') RCPPLIBS = $$system($$R_HOME/bin/Rscript -e \'Rcpp:::LdFlags\(\)\') ## for some reason when building with Qt we get this each time ## so we turn unused parameter warnings off RCPPWARNING = -Wno-unused-parameter ## include headers and libraries for RInside embedding classes RINSIDEINCL = $$system($$R_HOME/bin/Rscript -e \'RInside:::CxxFlags\(\)\') RINSIDELIBS = $$system($$R_HOME/bin/Rscript -e \'RInside:::LdFlags\(\)\') ## compiler etc settings used in default make rules QMAKE_CXXFLAGS += $$RCPPWARNING $$RCPPFLAGS $$RCPPINCL $$RINSIDEINCL QMAKE_LFLAGS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RCPPLIBS $$RINSIDELIBS ## addition clean targets QMAKE_CLEAN += qtdensity Makefile
QtDensity that
will launch the main widget; it is given a reference to the
RInside object.
The definition of the main object is pretty simple: a few private variables, and a few functions to interact with the GUI and get values from the radio buttons, slider or input field---as well as functions to update the chart or re-draw the random variables.// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- // // Qt usage example for RInside, inspired by the standard 'density // sliders' example for other GUI toolkits // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois #include <QApplication> #include "qtdensity.h" int main(int argc, char *argv[]) RInside R(argc, argv); // create an embedded R instance QApplication app(argc, argv); QtDensity qtdensity(R); return app.exec();
Lastly, no big magic in the code either (apart from the standard magic provided by RInside). A bit of standard GUI layouting, and then some functions to pick values from the inputs as well as to compute / update the output. One issue is worth mentioning. The screenshot and code show the second version of this little application. I built a first one using a standard portable network graphics (png) file. That was fine, but not crisp as png is a pixel format so I went back and experimented with scalable vector graphics (svg) instead. One can create svg output with R in a number of ways, one of which is the cairoDevice package by Michael Lawrence (who also wrote RGtk2 and good chunks of Ggobi). Now, it turns out that Qt displays the so-called SVG tiny standard whereas R creates a fuller SVG format. Some discussion with Michael reveals that one can modify the svg file suitably (which is what the function// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- // // Qt usage example for RInside, inspired by the standard 'density // sliders' example for other GUI toolkits // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois #ifndef QTDENSITY_H #define QTDENSITY_H #include <RInside.h> #include <QMainWindow> #include <QHBoxLayout> #include <QSlider> #include <QSpinBox> #include <QLabel> #include <QTemporaryFile> #include <QSvgWidget> class QtDensity : public QMainWindow Q_OBJECT public: QtDensity(RInside & R); private slots: void getBandwidth(int bw); void getKernel(int kernel); void getRandomDataCmd(QString txt); void runRandomDataCmd(void); private: void setupDisplay(void); // standard GUI boilderplate of arranging things void plot(void); // run a density plot in R and update the void filterFile(void); // modify the richer SVG produced by R QSvgWidget *m_svg; // the SVG device RInside & m_R; // reference to the R instance passed to constructor QString m_tempfile; // name of file used by R for plots QString m_svgfile; // another temp file, this time from Qt int m_bw, m_kernel; // parameters used to estimate the density QString m_cmd; // random draw command string ; #endif
filterFile below does) and it all works. Well:
almost. There is a bug (and Michael thinks it is the SVG rendering) in which
the density estimate does not get clipped to the plotting region.
What the little application does is actually somewhat neat for the few lines. One key features is that the generated data can be specified directly by an R expression which allows for mixtures (as shown, and as is the default). With that it easy to see how many points are needed in the second hump to make the estimate multi-modal, and how much of a distance between both centers is needed and so on. Obviously, the effect of the chosen kernel and bandwidth can also be visualized. And with the chart the being a support vector graphics display, we can resize and scale at will and it still looks crisp. The code (for both the simpler png variant and the svg version shown here) is in the SVN repository for RInside and will be in the next release. Special thanks to Michael Lawrence for patiently working through some svg woes with me over a few emails.// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- // // Qt usage example for RInside, inspired by the standard 'density // sliders' example for other GUI toolkits -- this time with SVG // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois #include <QtGui> #include "qtdensity.h" QtDensity::QtDensity(RInside & R) : m_R(R) m_bw = 100; // initial bandwidth, will be scaled by 100 so 1.0 m_kernel = 0; // initial kernel: gaussian m_cmd = "c(rnorm(100,0,1), rnorm(50,5,1))"; // simple mixture m_R["bw"] = m_bw; // pass bandwidth to R, and have R compute a temp.file name m_tempfile = QString::fromStdString(Rcpp::as<std::string>(m_R.parseEval("tfile <- tempfile()"))); m_svgfile = QString::fromStdString(Rcpp::as<std::string>(m_R.parseEval("sfile <- tempfile()"))); m_R.parseEvalQ("library(cairoDevice)"); setupDisplay(); void QtDensity::setupDisplay(void) QWidget *window = new QWidget; window->setWindowTitle("Qt and RInside demo: density estimation"); QSpinBox *spinBox = new QSpinBox; QSlider *slider = new QSlider(Qt::Horizontal); spinBox->setRange(5, 200); slider->setRange(5, 200); QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int))); spinBox->setValue(m_bw); QObject::connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(getBandwidth(int))); QLabel *cmdLabel = new QLabel("R command for random data creation"); QLineEdit *cmdEntry = new QLineEdit(m_cmd); QObject::connect(cmdEntry, SIGNAL(textEdited(QString)), this, SLOT(getRandomDataCmd(QString))); QObject::connect(cmdEntry, SIGNAL(editingFinished()), this, SLOT(runRandomDataCmd())); QGroupBox *kernelRadioBox = new QGroupBox("Density Estimation kernel"); QRadioButton *radio1 = new QRadioButton("&Gaussian"); QRadioButton *radio2 = new QRadioButton("&Epanechnikov"); QRadioButton *radio3 = new QRadioButton("&Rectangular"); QRadioButton *radio4 = new QRadioButton("&Triangular"); QRadioButton *radio5 = new QRadioButton("&Cosine"); radio1->setChecked(true); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addWidget(radio4); vbox->addWidget(radio5); kernelRadioBox->setMinimumSize(260,140); kernelRadioBox->setMaximumSize(260,140); kernelRadioBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); kernelRadioBox->setLayout(vbox); QButtonGroup *kernelGroup = new QButtonGroup; kernelGroup->addButton(radio1, 0); kernelGroup->addButton(radio2, 1); kernelGroup->addButton(radio3, 2); kernelGroup->addButton(radio4, 3); kernelGroup->addButton(radio5, 4); QObject::connect(kernelGroup, SIGNAL(buttonClicked(int)), this, SLOT(getKernel(int))); m_svg = new QSvgWidget(); runRandomDataCmd(); // also calls plot() QGroupBox *estimationBox = new QGroupBox("Density estimation bandwidth (scaled by 100)"); QHBoxLayout *spinners = new QHBoxLayout; spinners->addWidget(spinBox); spinners->addWidget(slider); QVBoxLayout *topright = new QVBoxLayout; topright->addLayout(spinners); topright->addWidget(cmdLabel); topright->addWidget(cmdEntry); estimationBox->setMinimumSize(360,140); estimationBox->setMaximumSize(360,140); estimationBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); estimationBox->setLayout(topright); QHBoxLayout *upperlayout = new QHBoxLayout; upperlayout->addWidget(kernelRadioBox); upperlayout->addWidget(estimationBox); QHBoxLayout *svglayout = new QHBoxLayout; svglayout->addWidget(m_svg); QVBoxLayout *outer = new QVBoxLayout; outer->addLayout(upperlayout); outer->addLayout(svglayout); window->setLayout(outer); window->show(); void QtDensity::plot(void) const char *kernelstrings[] = "gaussian", "epanechnikov", "rectangular", "triangular", "cosine" ; m_R["bw"] = m_bw; m_R["kernel"] = kernelstrings[m_kernel]; // that passes the string to R std::string cmd1 = "Cairo(width=6,height=6,pointsize=10,surface='svg',filename=tfile); " "plot(density(y, bw=bw/100, kernel=kernel), xlim=range(y)+c(-2,2), main=\"Kernel: "; std::string cmd2 = "\"); points(y, rep(0, length(y)), pch=16, col=rgb(0,0,0,1/4)); dev.off()"; std::string cmd = cmd1 + kernelstrings[m_kernel] + cmd2; // stick the selected kernel in the middle m_R.parseEvalQ(cmd); filterFile(); // we need to simplify the svg file for display by Qt m_svg->load(m_svgfile); void QtDensity::getBandwidth(int bw) if (bw != m_bw) m_bw = bw; plot(); void QtDensity::getKernel(int kernel) if (kernel != m_kernel) m_kernel = kernel; plot(); void QtDensity::getRandomDataCmd(QString txt) m_cmd = txt; void QtDensity::runRandomDataCmd(void) std::string cmd = "y <- " + m_cmd.toStdString(); m_R.parseEvalQ(cmd); plot(); // after each random draw, update plot with estimate void QtDensity::filterFile() // cairoDevice creates richer SVG than Qt can display // but per Michaele Lawrence, a simple trick is to s/symbol/g/ which we do here QFile infile(m_tempfile); infile.open(QFile::ReadOnly); QFile outfile(m_svgfile); outfile.open(QFile::WriteOnly QFile::Truncate); QTextStream in(&infile); QTextStream out(&outfile); QRegExp rx1("<symbol"); QRegExp rx2("</symbol"); while (!in.atEnd()) QString line = in.readLine(); line.replace(rx1, "<g"); // so '<symbol' becomes '<g ...' line.replace(rx2, "</g");// and '</symbol becomes '</g' out << line << "\n"; infile.close(); outfile.close();
Update: Some typos fixed.
Update 2: Two URLs corrected.
Update: Despite another email yesterday reasserting the 90-120 days lie, the source code has now landed on HTC's site.
Since there were quite some requests for a Planet Commandline feed
without the microblogging feeds included, I splitted Planet
Commandline into different flavours. I m quite happy with that
solution, because I must admit that the amount of microblogging
postings in relation to normal blog postings was indeed higher than
initially expected
So from now on Planet Commandline has a basic flavour at http://planet-commandline.org/ and one with the microblogging
feeds (climagic
and commandlinefu) included at http://planet-commandline.org/+snippets/.
For making this possible I hacked our Planet Venus wrapper to accept
arbitary configuration snippets to be added at the end of the
configuration as well as as sed-based modifications to the
concatenated configuration before Planet Venus is run on them.
This also allowed me to create further flavours of Planet Commandline:
We're heading to release candidates for phpMyAdmin 3.4.0, so the translators have less time to make the translations better. There are still 13 translations at 100%:
Filed under: English Phpmyadmin 1 comments Flattr this!
Debian CD/DVD ISO images are huge files (4.7 GB for a DVD). It can take a long time to download if your connection with the server is not very fast. Jigdo can help you download them much more quickly if you have a high-speed connection to a normal Debian mirror.
If your download rate from your usual Debian mirror is not better than the download rate from the closest Debian CD mirror, then you should download your images straight from the Debian CD mirror. Otherwise read on and learn how you can save lots of time.
Jigdo is based on a simple idea: the CD images contain mainly thousands of .deb files (and source files too) that are already available on all Debian mirrors. So instead of downloading the ISO image in its entirety, you could reconstruct it with all the files that it contains, that you would download from your usual Debian mirror.
Thus when you download a .jigdo file, you only download a little text file (compressed with gzip) that contains enough information to reconstruct the complete image:
--noask to avoid the prompts.
$ jigdo-lite http://cdimage.debian.org/cdimage/release/6.0.1/multi-arch/jigdo-dvd/debian-6.0.1-i386-amd64-source-DVD-1.jigdo Jigsaw Download "lite" Copyright (C) 2001-2005 jigdo@ Richard Atterer atterer.net Getting mirror information from /etc/apt/sources.list Downloading .jigdo file --2011-03-22 09:08:11-- http://[2001:6b0:e:2018::163]/cdimage/release/6.0.1/multi-arch/jigdo-dvd/debian-6.0.1-i386-amd64-source-DVD-1.jigdo [...] ----------------------------------------------------------------- Images offered by http://cdimage.debian.org/cdimage/release/6.0.1/multi-arch/jigdo-dvd/debian-6.0.1-i386-amd64-source-DVD-1.jigdo': 1: 'Debian GNU/Linux 6.0.1 "Squeeze" - Official Multi-architecture i386/amd64/source DVD #1 20110319-14:55 (20110319)' (debian-6.0.1-i386-amd64-source-DVD-1.iso) Further information about debian-6.0.1-i386-amd64-source-DVD-1.iso': Generated on Sat, 19 Mar 2011 15:11:27 +0000 ----------------------------------------------------------------- If you already have a previous version of the CD you are downloading, jigdo can re-use files on the old CD that are also present in the new image, and you do not need to download them again. Mount the old CD ROM and enter the path it is mounted under (e.g. /mnt/cdrom'). Alternatively, just press enter if you want to start downloading the remaining files. Files to scan: ----------------------------------------------------------------- The jigdo file refers to files stored on Debian mirrors. Please choose a Debian mirror as follows: Either enter a complete URL pointing to a mirror (in the form ftp://ftp.debian.org/debian/'), or enter any regular expression for searching through the list of mirrors: Try a two-letter country code such as de', or a country name like United States', or a server name like sunsite'. Debian mirror [http://ftp.fr.debian.org/debian]: Downloading .template file --2011-03-22 09:12:41-- http://cdimage.debian.org/cdimage/release/6.0.1/multi-arch/jigdo-dvd/debian-6.0.1-i386-amd64-source-DVD-1.template [...] Successfully created debian-6.0.1-i386-amd64-source-DVD-1.iso' ----------------------------------------------------------------- Finished! The fact that you got this far is a strong indication that debian-6.0.1-i386-amd64-source-DVD-1.iso' was generated correctly. I will perform an additional, final check, which you can interrupt safely with Ctrl-C if you do not want to wait. OK: Checksums match, image is good!And you re done, you have successfully downloaded an official Debian DVD with jigdo-lite. You can head over to the Debian CD page and find out the URL of the .jigdo files for the latest stable release. One last thing, Bluray images are only available with Jigdo because they are so huge that keeping complete ISO images would be a waste of disk resources of the CD images server (and its mirrors). Of course, if downloading ISO images and burning CD/DVD is not for you, you can always order some professionally printed CD/DVD. You will even help Debian by doing this.
If you want to read more articles like this one, click here to subscribe to my free newsletter. You can also follow me on Identi.ca, Twitter and Facebook.
6 comments Liked this article? Click here. My blog is Flattr-enabled.
WordPress currently has an annoying bug where you cannot add images easily using the in-built editor. Instead of a pop-up being shown with the image setting details, you are sent to another page. Once you choose the image size etc, you go to a blank page. Until that s fixed, there is a work-around. It s not exactly pretty but it does work. I have assumed you have uploaded your images to the media library first.
First, type up what you want your blog entry to say. The save it as a draft which is the button in the blue circle in the screenshot. Then click the add image icon which will bring up the warning to go to the image selection page. This page should be a pop up on the same screen but is not (and is the bug).
On the image selection page choose Image library which is the blue circle and edit the meta-data such as the name caption etc. Once you are happy with your decisions, click the Insert into Post button (red circle) which goes to a blank screen.
The blank screen actually does have data in it. You will need to view source which will show something like:
<script type="text/javascript"><!--mce:0--></script>
<a rel="attachment wp-att-367" href="http://enc.com.au/2011/03/getting-around-the-wordpress-add-image-bug/tomatoes2/"><img class="alignright size-medium wp-image-367" title="tomatoes2" src="http://enc.com.au/wp-content/uploads/2011/03/tomatoes2-300x230.jpg" alt="" width="300" height="230" /></a>
I've just made a couple of software releases:
--trace option.--lru-size reduced to 500, for great improvement
in memory used, without, it seems, much decrease in speed.obnam verify now reports success explicitly. Based on question
from Joey Hess.obnam verify now accepts both non-option arguments and the --root
option. Suggested by Joey Hess.obnam forget now accepts "generation specifiers", not just numeric
generation ids. This means that obnam forget latest works.obnam force-lock introduced, to allow breaking a lock left behind
if obnam crashes. But it never does, of course. (Well, except if there's
a bug, like when a file changes at the wrong moment.)obnam genids introduced, to list generation ids without any other data.
The old command obnam generations still works, and lists other info
about each generation as well, but that's sometimes bad for scripting.--dump-memory-profile option now accepts the value simple, for
reporting basic memory use. It has such a small impact that it's the
default.
I have been working in the last weeks in the removal of the last pieces of KDE 3 from the Debian archive and I have found there are a lot of packages that is sad having to remove.
If you are looking for a good idea/excuse to learn and improve your KDE 4 / C++ /Qt4 skills, have to do a small application for school or you just feel like some useful coding, here is the list:
Now that I sent an update about my running activities, I have to
report about what I'm doing these weeks in Debian to try keeping a
fair balance for those of you who read this blog through Planet Debian.
Most January was spent in preparing the release of squeeze. Of course,
I didn't work directly on the release, not being involved in the
release team. However, last bits of preparation for Debian Installer
as well as rushing out the last remaining bits of localization work
took most of my time.
After the release of squeeze, time came to resume back some
activities.
First of all, on the l10n front, I resumed the work on "l10n NMUs",
trying to get old
l10n bugs fixed. I restarted proposing NMUs or, more precisely,
help to perform translation updates rounds to these maintainers. Most
of them had "old" l10n bugs because of the freeze. So, I indeed did
not end up in doing many NMUs...but got several l10n bugs closed
anyway.
Work being resumed in unstable also lead to many changes in packages'
debconf templates (new packages using debconf, packages introducing
new templates, etc.). As these are the trigger for Smith
reviews (reviews of English in debconf templates and packages'
description, this activity, which was very low during the freeze,
resumed again (we'll soon celebrate the 4th anniversary of this
project).
I also decided to invest more time in D-I again. The D-I team is
currently more active than it was last years. Thanks to a few
individual, work resumed in some areas and bug triaging has been
very active. I recently resyned a nice improvement which had been
contributed by a user to iso-scan, then polished by Frans Pop. This
will allow to choose among several different ISO images when
installing Debian from a USB stick while, previously, only the first
found was being used.
I also worked with a new translator, to prepare the activation of
Uyghur translation in D-I.
Some work happend in the pkg-fonts team. I had a few fonts adopted by
the team, as part of the general effort to get rid of defoma. I sent
patches for a few others, but many remain. If you maintain font
packages, please help us in getting rid of defoma. Changes are easy to
do; ask the team if you need help (pkg-fonts-devel@lists.alioth.debian.org).
Samba packages also ate a significant part of my time. First of all,
DSA-2175
lead to prepare fixes for samba in squeeze and lenny. Then, upstream
released samba 3.5.8 which I uploaded to unstable. I briefly
considered trying to get the Stable Release managers approval to push
that version in squeeze, but the number of fixes made by upstream was
discouraging. So, I chose to examine them slowly and cherry-pick those
I consider important enough to warrant an upload for squeeze. More git
wizardry learned doing so (thanks to Julien Cristau for his help). And
I now have a pending proposal for three of these fixes (that represent
14 atomic patches from upstream) to be included in squeeze.
Recently there has been some major developments in DebConf11 organization. In short, I will list some of the most important.
Official DC11 website has finally been completed and now contains a great deal of information for those interested in attending this years conference. Some of the most notable changes include:
Frontpage now contains a small menu with links to most important parts of website, like About, Registration, Contact Sidebar menu is now divided in 3 categories:
Site is now available on Bosnian language for native speaking attendees, should they have problems with English version. Every page is available on both languages, which can be changed by clicking on ba/en flag in upper left corner, or DC11: Bosnian Version.
As you may have noticed, the official page received a small face lift. New header with the Government building, a small token of appreciation for all the help the Government is providing; as well as some minor changes in CSS and color scheme. While talking about design, we d like to thank Leandro G mez for his help with the header.
As agreed on the meeting, which took place on 22. of February, [Meeting logs], following sponsorship levels will be used for this years conference:
Main reason for lowering amounts is due to last years results of high increase in the same. As for the benefits of these levels, the only thing changed is t-shirts / bags places; we believe t-shirts are much more noticeable than bags, and have therefore been promoted to Silver, while bags have been downgraded to Bronze. For a full list of requirements and benefits, please visit: DC11: Sponsorship Sponsorship Brochure
Sponsorship brochures have finally been completed and are available for a public distribution. The brochures are available in 3 qualities: low, high and original. Low and high quality brochures, ~6Mb and ~8Mb respectively, are for normal distribution to our sponsors, while original quality, at around 240Mb, is intended for maximum quality printing. Just as with the website, each quality is available in both Bosnian and English. Current version of the brochure is 1.1 and is most likely the final one. These brochures are available at Documentation page: DC11: Documentation >> Documents made by Local Team Or download them directly:
Also, I d like to thank Mirosal Remetic for making a great template and Pablo Duboue for some very valuable suggestions regarding the structure of the brochure.
Many questions have been raised regarding Bosnian visa regime. We got in contact with the embassy and they clarified who can enter our country with(out) Visa. The list can be found on DC11 Wiki: Visa regime. It also states, which countries have a privilidge of ID-only entrance. If your country is not listed, that means you will need visa. If you want to know what exactly you need to get one, please visit the this official Government page and chose your country from a drop-down menu. As for the visa itself, as well as the list of Customs Rules, please read DC11: Visa.
Also, thanks to Darjan Prtic for getting the list from the Government officials.
If you think, that is it for now, you are dead wrong. At this very moment following is being organized and developed:
Well, these are pretty much the highlights of some recent and some future developments of DebConf11 organizational team. Mind you, there s a lot more going on, but I tried to give a small summary from the inside. Should you be interested in attending, helping out, sponsoring or just have some questions, feel free to ask them on our mailing list at: debconf11-localteam@lists.debconf.org. I should inform you that this is a public mailing list and its archives are available for a broader public. If you do not wish for your mail to be made public, please direct any enquiry directly to me trough the Contact Form or any other member of Core Local Team, Adnan Hodzic or Velimir Iveljic.
I spent part of today looking at packaging Peter Gutmann's CryptLib for debian. My conclusion: it may not be worth my time. One of the main reasons i wanted to package it for debian is because i would like to see more OpenPGP-compliant free software available to debian users and developers, particularly if the code is GPL-compatible. Cryptlib makes it quite clear that it intends to be GPL-compatible: cryptlib is distributed under a dual license that allows free, open-source use under a GPL-compatible license and closed-source use under a standard commercial license.However, a significant portion of the cryptlib codebase (particularly within the bn/ and crypt/ directories) appears to derive directly from OpenSSL, and it retains Eric Young's copyright and licensing. This licensing retains the so-called "advertising clause" that is generally acknowledged to be deliberately incompatible with the GPL. (A common counterargument for this incompatibility is that OpenSSL should be considered a "System Library" for GPL'ed tools that link against it; whether or not you believe this for tools linked against OpenSSL, this counterargument clearly does not hold for a project that embeds and ships OpenSSL code directly, as CryptLib does) This does not mean that CryptLib is not free software (it is!), nor does it mean that you cannot link it against GPL'ed code (you can!). However, you probably can't distribute the results of linking CryptLib against any GPL'ed code, because the GPL is incompatible with the OpenSSL license. The un-distributability of derived GPL-covered works makes the CryptLib package much less appealing to me, since i want to be able to write distributable code that links against useful libraries, and many of the libaries i care about happen to be under the GPL. I also note that Peter Gutmann and CryptLib Security Software (apparently some sort of company set up to distribute CryptLib) may be in violation of Eric Young's License, which states:
A Google search for Eric Young's name on cryptlib.com yields no hits. I do find his name on page 340 of the Cryptlib manual, but that hardly seems like it covers "All advertising materials mentioning features or use of this software". I suppose it's also possible that CryptLib has negotiated an alternate license with Eric Young that I simply don't know about. In summary: i think CryptLib could go into debian, but its incorporation of OpenSSL-licensed code makes it less useful than i was hoping it would be. I have a few other concerns about the package after looking it over in more detail. I suspect these are fixable one way or another, but i haven't sorted them out yet. I'm not sure i'll spend the time to do so based on the licensing issues i sorted out above. But in case anyone feels inspired, the other concerns i see are:* 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-).
0 dkg@pip:~/src/cryptlib/cryptlib$ for foo in $(find . -iname '*.o'); do > if ! readelf -S "$foo" grep -q .note.GNU-stack ; then > echo "$foo" > fi > done ./shared-obj/desenc.o ./shared-obj/rc5enc.o ./shared-obj/md5asm.o ./shared-obj/castenc.o ./shared-obj/bfenc.o ./shared-obj/rmdasm.o ./shared-obj/sha1asm.o ./shared-obj/bn_asm.o ./shared-obj/rc4enc.o 0 dkg@pip:~/src/cryptlib/cryptlib$They probably all need to be fixed, unless there's a good reason for them to be that way (in which case they need to be documented).
git clone git://lair.fifthhorseman.net/~dkg/cryptlibOh, and please correct me about anything in this post; I'd be especially happy to hear that my analysis of the licensing issues above is wrong :) Tags: cryptlib, gpl, licensing, openssl
Next.