Soeren Sonnenburg: Shogun got accepted at Google Summer of Code 2013
[1] http://shogun-toolbox.org/page/Events/gsoc2013_ideas
[2] http://google-melange.appspot.com/gsoc/org/google/gsoc2013/shogun
[1] http://shogun-toolbox.org/page/Events/gsoc2013_ideas
[2] http://google-melange.appspot.com/gsoc/org/google/gsoc2013/shogun
# apt-get update # apt-get build-dep resiprocatewill obtain all the necessary build tools. Then, as a normal user:
$ mkdir ~/src/resiprocate $ cd ~/src/resiprocate $ apt-get source resiprocate $ cd resiprocate $ dpkg-buildpackage -rfakeroot -j12In a few minutes, you should find the packages (*.deb files) are created.
I like it very much
Working with dak is not exactly fun. The documentation is not that awesome, and dak contains many hardcoded stuff for Debian, e.g. it often expects the unstable suite to be present. Also, running dak on Debian Wheezy turned out to be a problem, as the Python module apt_pkg changed the API and dak naturally had problems with that. But with the great help of some Debian ftpmasters (many thanks to that!), dak is now working for Tanglu, managing the whole archive. There are still some quirks which need to be fixed, but the archive is in an usable state, accepting and integrating packages.
The work on dak is also great for Debian: I resolved many issues with non-Debian dak installations, and made many parts of dak Wheezy-proof. Also, I added a few functions which might also be useful for Debian itself. All patches have of course been submitted to upstream-dak.
This is also nearly finished
The Tanglu metapackages have been published in a first alpha version. We will support GNOME-3 and KDE4, as long as this is possible (= enough people working on the packaging). The Tanglu packages will also depend on systemd, which we will need in GNOME anyway, and which also allows some great new features in KDE.
Side-effect of using systemd is at least for the start that Tanglu boots a bit slow, because we haven t done any systemd adjustments, and because systemd is very old. We will have to wait for the systemd and udev maintainers to merge the packages and release a new version first, before this will improve. (I don t want to do this downstream in Tanglu, because I don t know the plans for that at Debian (I only know the information Tollef Fog Heen & Co. provided at FOSDEM))
The community
The community really surprised me! We got an incredible amount of great feedback on Tanglu, and most of the people liked the idea of Tanglu. I think we are one of the less-flamed new distributions ever started
Something else
I am involved in Debian for a very long time now, first as Debian Maintainer and then as Debian Developer and I never thought much about the work the Debian system administrators do. I didn t know how dak worked or how Wanna-build handles the buildds and what exactly the ftpmasters have to do. By not knowing, I mean I knew the very basic theory and what these people do. But this is something different than experiencing how much work setting up and maintaining the infrastructure is and what an awesome job the people do for Debian, keeping it all up and running and secure! Kudos for that, to all people maintaining Debian infrastructure! You rock! (And I will never ever complain about slow buildds or packages which stay in NEW for too long
)
I've occasionally used KPhotoAlbum for a few years and eventually added many tags to the pictures.
But I've decided I wanted to try other tools, and digiKam seems to be the best option from the many reviews I've read.
Still, there's apparently no automatic feature to import into digiKam the tags set in KPhotoAlbum.
Fortunately, some smart people have implemented Perl tools allowing to overcome this issue.
The process involves modifying the pictures to save the tags inside the files, using the IPTC standard. Then, digiKam will be able to load the tags from the modified files.
Here's a copy of the (translated) kphotoalbum2iptc.pl script (the original as in french) I copied from this blog post (in french too).
I've been able to generate .deb packages for the required 2 perl libs dependencies using the method described in the referenced post , with : dh-make-perl --build --cpan Image::Kimdaba and dh-make-perl --build --cpan Image::IPTCInfo
I look after a bunch of servers, working for Bytemark that is not a surprise, but I only touch a very small number of desktop systems.
I was really not doing well by yesterday, I had developed quite the runny
nose. I've discovered that it's neigh on impossible (from my sample set of
two pharmacies) to get pseudoephedrine over the counter in this country. In
the US, you have to provide ID and they report all purchases to the
government and if you start buying too much, they come and kick down the
door of your meth lab. Here, you seem to need a prescription. One pharmacy
told me that 1 in 10 pharmacies will sell it over the counter. I ended up
with the Australian equivalent of Afrin, which I
don't particularly like, but it at least dried up my nose. Discussions on
Facebook suggest that I may have been dealing with second-rate pharmacies,
and the "big ones" would be more useful. I was also advised to try begging
and pleading for Claritin-D. The damn meth labs have ruined it for
everybody. It's too bad they can't come up with an additive that is safe to
ingest, but would fuck up the meth cooking process.
Not content with only two marathon shopping days, Kristy came back for a
third day of driving me all around town, as my quest for a sofa bed and a
dining table continued.
It turns out that one does not simply walk into a furniture store and walk
out with a sofa bed (or a dining table, for that matter). These things all
seem to be on boats from China, or at best interstate warehouses, and most
places can sell you something they know is in transit at best, but they're
loathe to sell floor stock (for obvious reasons), and they seem to not have
anything in a Brisbane warehouse (plenty of stuff was in Sydney or Melbourne
and they'd ship it up). Plushhad a
chaise sofa bed that had a nice sprung mattress, and was due in late this
month or early next, and they would lend me something in the meantime, so
they got my business. I look forward to having something to sit on.
We then had an epic time at Bunnings getting all sorts of random household
stuff, with the obligatory sausage sizzle before and after. Oh, how I have
missed proper sausages! It turns out I'm looking for something that doesn't
seem to exist over here, Rubbermaid don't seem to make the plastic "shed"
cupboards in Australia, so I'll have to look elsewhere (Clark
Rubber seems to make something approximately like what I'm looking for).
Then I picked up some towels from Westfield Chermside and resumed the
search for a dining table. I was really liking the idea of at least one
bench seat, and we finally found a matching table, a bench seat, some
shelving and a coffee table that would work as an entertainment unit, at OZ Design Furniture. They
had a 20% off sale that made it all fairly reasonable. The entertainment
unit was available immediately, and the rest of the stuff should be
delivered in a couple of weeks. That just leaves finding some dining chairs
that will go with it.
OZ Design Furniture had the most unusual delivery charging system. They
charge by the flight of stairs. Living on the 2nd floor does have its
disadvantages. At least I won't be moving out of here any time soon.
By the end of the day, I was totally done, but very happy to have finally
sorted out the elusive remaining bits of furniture. I had my first night
sleeping in my new home.
According to the update here, the signing keys are supposed to be replaced by the hardware vendor. If vendors do that, this ends up being uninteresting from a security perspective - you could generate a signed image, but nothing would trust it. It should be easy enough to verify, though. Just download a firmware image from someone using AMI firmware, pull apart the capsule file, decompress everything and check whether the leaked public key is present in the binaries.
On the weekend of April 20-21, Students for Free Culture is going to be holding its annual conference, FCX2013, at New York Law School in New York City. As a long-time SFC supporter and member, I am enormously proud to be giving the opening keynote address.
Although the program for Sunday is still shaping up, the published Saturday schedule looks great. If previous years are any indication, the conference can serve as an incredible introduction to free culture, free software, wikis, remixing, copyright, patent and trademark reform, and participatory culture. For folks that are already deeply involved, FCX is among the best places I know to connect with other passionate, creative, people working on free culture issues.
I ve been closely following and involved with SFC for years and I am particularly excited about the group that is driving the organization forward this year. If you will be in or near New York that weekend or if you can make the trip you should definitely try to attend.
FCX2013 is pay what you can with a $15 suggested donation. You can register online now. Travel assistance especially for members of active SFC chapters may still be available. I hope to see you there!
Antonia came into the room. Where's Alieta? she asked.
We don't know, replied Luda. It was true; we hadn't seen Alieta
in quite some time, and we had no idea where she was.
Antonia left. Varvara eyed me mischievously and said, You could
call her.
How? I asked.
Touch the grandmother clock and you will figure it out.
I touched the clock trepidly. Nothing happened. I opened my mouth
to speak, but the word I had been about to say resonated in my mind
as if spoken through a comb filter. I concentrated. Alieta,
dozens of human-like voices sang over and over in different
harmonies. I let go.
What was that? I demanded.
Clock, Varvara said dismissively.
Come on, let's do laundry, Luda grunted.
We carried our laundry out to the garage, which is where the washer
and dryer lived. Alieta slipped in through one of the open garage
doors, and surreptitiously pulled Varvara over for a whispered
conversation.
Antonia wandered in and squinted in Alieta's general direction.
Luda quickly pulled Varvara in front of her. It's just Varvara,
she announced.
Antonia's eyes glazed over and she went back into the house.
Alieta pursed her lips and studied the wall as if there
might be some reflective object that had alerted her mother
to her presence. Then she grabbed Varvara by the hand, pulled
her over to push the buttons that closed the garage doors,
and dragged her into the house.
I watched the garage doors close. Then I watched the one on
the left reverse direction. I opened my mouth to notify someone
of this, but the doors reversed direction again, and proceeded
to partially open and close as if possessed. I tried to hide
behind Luda, without success.
Now she was watching as well, as reality seemed to to shimmer
and bend. The roof became arched, and there were loud mechanical
noises as our environs transformed. When it finished, the
place where the garage doors had been was now a wall of screens
displaying video as you might encounter in a television store.
More disconcertingly, we were in front of a railing which
overlooked what appeared to be a car dealership showroom.
Luda sucked in her breath. Benjamin Snow, you were into
some serious shit, she muttered.
phpMyAdmin has in last year received various useful features, which are not that well known. I've decided to give them some promotion before releasing phpMyAdmin 4.0.
The server monitoring part is already present since phpMyAdmin 3.5, but some of the parts were further improved in 4.0.
Server monitor (as you can see on picture above or on demo server) allows you to follow server status in real time. Besides predefined charts, you can choose to follow any of MySQL server status variables or some system parameters.
If you see something weird in the charts, you can select interval and inspect slow or general query log (if you have enabled it). This can help you finding most problematic queries for your server.
Advisor (on picture above or on demo server) is another way to improve server performance - it comes with extensive set of rules, which can help you tuning performance for your workload. Your server has to be running for significant time to give some reasonable recommendations (so don't expect these on the demo server, which is restarted quite often). However it is still recommended to read server documentation before doing any adjustments, as the setting might have some side effects, which will affect your workload as well.
Of course these are not magic pill to cure your unresponsive server, but can help you a lot in finding possible bottlenecks.
Filed under: English Phpmyadmin 0 comments Flattr this!
# apt-get build-dep resiprocate # apt-get install libresiprocate-1.8-devThis will install all the necessary tools, libraries and header files. Headers are under /usr/include/resip Writing some code The object orientated nature of C++ is heavily leveraged by reSIProcate, and this makes it easy to code. The stack is based on a callback paradigm: you create some objects based on well-defined interfaces, give your objects to the stack, and put the stack into a loop. The stack will call your object when some event occurs (e.g. new incoming call, new text message) The easiest way to see this in practice is to browse the test cases. The test cases under the resip/dum(mirrored on github) section of the source tree provide good high-level examples of the type of code an application writes when using reSIProcate in an existing application. Sending a SIP text message Based on the basicMessage test case, I've created a trivial piece of code below to send a text message over SIP. The whole demo project is uploaded into github, see the README for instructions on how to build and run. Here, we have a quick look at the one object in the demo, it is notified on the progress of the SIP text message:
class ClientMessageHandler : public ClientPagerMessageHandler
public:
ClientMessageHandler()
: finished(false),
successful(false)
;
virtual void onSuccess(ClientPagerMessageHandle, const SipMessage& status)
InfoLog(<<"ClientMessageHandler::onSuccess\n");
successful = true;
finished = true;
virtual void onFailure(ClientPagerMessageHandle, const SipMessage& status, std::auto_ptr<contents> contents)
ErrLog(<<"ClientMessageHandler::onFailure\n");
successful = false;
finished = true;
bool isFinished() return finished; ;
bool isSuccessful() return successful; ;
private:
bool finished;
bool successful;
;
int main(int argc, char *argv[])
// boilerplate initialisation code...
...
NameAddr naTo(to.c_str());
ClientPagerMessageHandle cpmh = clientDum.makePagerMessage(naTo);
Data messageBody("Hello world!");
auto_ptr<contents> content(new PlainContents(messageBody));
cpmh.get()->page(content);
...
</contents></contents>Going further with reSIProcate
Given the recent discussions on planet.debian.org I use the opportunity to describe how you can handle upstream history in a git-dpm workflow.
One of the primary points of git-dpm is that you should be able to just check out the Debian branch, get the .orig.tar file(s) (for example using pristine-tar, by git-dpm prepare or by just downloading them) and then calling dpkg-buildpackage.
Thus the contents of the Debian branch need to be clean from dpkg-source's point of view, that is do not contain any files the .orig.tar file(s) contains not nor any modified files.
The easy way
The easiest way to get there is by importing the upstream tarball(s) as a git commit, which one will usually do with git-dpm import-new-upstream as that also does some of the bookkeeping.
This new git commit will have (by default) the previous upstream commit and any parent you give with -p as parents. (i.e. with -p it will be a merge commit) and its content will be the contents of the tarball (with multiple orig files, it gets more complicated).
The idea is of course that you give the upstream tag/commit belonging to this release tarball with -p so that it becomes part of your history and so git blame can find those commits.
Thus you get a commit with the exact orig contents (so pristine-tar can more easily create small deltas) and the history combined..
Sometimes there are files in the upstream tarball that you do not want to have in your Debian branch (as you remove them in debian/rules clean), then when using this method you will have those files in the upstream branch but you delete them in the Debian branch. (This is why git-dpm merge-patched (the operation to merge a new branch with upstream + patches with your previous debian/ directory) will look which files relative to the previous upstream branch are deleted and delete them also in the newly merged branch by default).
The complicated way
There is only a way without importing the .orig.tar file(s), though that is a bit more complicated: The idea is that if your upstream's git repository contains all the files needed for building your Debian package (for example if you call autoreconf in your Debian package and clean all the generated files in the clean target, or if upstream has a less sophisticated release process and their .tar contains only stuff from the git repository), you can just use the upstream git commit as base for your Debian branch.
Thus you can make upstream's commit/tag your upstream branch, by recording it with git-dpm new-upstream together with the .orig.tar it belongs to (Be careful, git-dpm does not check if that branch contains any files different than your .orig.tar and could not decide if it misses any files you need to build even if it tried to tell).
Once that is merged with the debian/ directory to create the Debian branch, you run dpkg-buildpackage, which will call dpkg-source which compares your working directory with the contents of the .orig.tar with the patches applied. As it will only see files not there but no files modified or added (if everything was done correctly), one can work directly in the git checkout without needing to import the .orig.tar files at all (altough the pristine-tar deltas might get a bit bigger).
PostgreSQL just released security updates. 9.1 (as found in Debian testing and unstable and Ubuntu 11.10 and later) is affected by a critical remote vulnerability which potentially allows anyone who can access the TCP port (without credentials) to corrupt local files. If your PostgreSQL database exposes the TCP port to any potentially untrusted location, please shut down your servers and update now!
PostgreSQL 8.4 for Debian stable (squeeze) and Ubuntu 8.04 LTS and 10.04 LTS also got an update, but these are much less urgent.
Debian and Ubuntu advisories for all stable releases, as well as Debian testing are going out as we speak. The updates are already on security.debian.org and security.ubuntu.com.
I also uploaded updates for Debian unstable (8.4, 9.1, and 9.2 in experimental) and the Ubuntu backports PPA, but it will take a bit for these to build as we don t have embargoed staging builds for those. Christoph updated the apt.postgresql.org repository as well.
Warning: If you use the current Ubuntu raring Beta-2 candidate images, you will still have the old version. So if you do anything serious with those installations, please make sure to upgrade immediately.
Update: Debian and Ubuntu security announcements have been sent out, and all packages in the backports PPA are built.
Please see the official FAQ if you want to know some more details about the nature of the vulnerabilities.
Seeing what has been posted recently in planet.d.o, I would like to share as well my thoughts and work-flow, and tell that I do agree with Joey Hess on many of his arguments. Especially when he tells that Debian fetishises upstream tarballs. We re in 2013, at the age of Internet, and more and more upstream authors are using Git, and more and more they don t care about releasing tarballs. I ve seen some upstream authors who simply stopped doing so completely, as a Git tag is really enough. I also fully agree than disk space and network speed isn t much of a problem these days.
When there are tags available, I use the following debian/gbp.conf:
[DEFAULT] upstream-branch = master debian-branch = debian upstream-tag = %(version)s compression = xz [git-buildpackage] export-dir = ../build-area/On many of my packages, I now just use Git tags from upstream if they are available. To make it more easy, I now nearly always use the following piece of code in my debian/rules files:
DEBVERS ?= $(shell dpkg-parsechangelog sed -n -e 's/^Version: //p')
VERSION ?= $(shell echo '$(DEBVERS)' sed -e 's/^[[:digit:]]*://' -e 's/[-].*//')
DEBFLAVOR ?= $(shell dpkg-parsechangelog grep -E ^Distribution: cut -d" " -f2)
DEBPKGNAME ?= $(shell dpkg-parsechangelog grep -E ^Source: cut -d" " -f2)
DEBIAN_BRANCH ?= $(shell cat debian/gbp.conf grep debian-branch cut -d'=' -f2 awk ' print $1 ')
GIT_TAG ?= $(shell echo '$(VERSION)' sed -e 's/~/_/')
get-upstream-sources:
git remote add upstream git://git.example.org/proj/foo.git true
git fetch upstream
if ! git checkout master ; then \
echo "No upstream branch: checking out" ; \
git checkout -b master upstream/master ; \
fi
git checkout $(DEBIAN_BRANCH)
make-orig-file:
if [ ! -f ../$(DEBPKGNAME)_$(VERSION).orig.tar.xz ] ; then \
git archive --prefix=$(DEBPKGNAME)-$(GIT_TAG)/ $(GIT_TAG) xz >../$(DEBPKGNAME)_$(VERSION).orig.tar.xz ; \
fi
[ ! -e ../build-area ] && mkdir ../build-area true
[ ! -e ../build-area/$(DEBPKGNAME)_$(VERSION).orig.tar.xz ] && cp ../$(DEBPKGNAME)_$(VERSION).orig.tar.xz ../build-area true
Packaging a new upstream VERSION now means that I only have to edit the debian/changelog, do ./debian/rules get-upstream-source so that I get new commits and tags, then git merge -X theirs VERSION to import the changes, then finally invoke ./debian/rules make-orig-file to create the orig.tar.xz. My debian branch is now ready for git-buildpackage. Note that the sed with the GIT_TAG thing is there because unfortunately, Git doesn t support the ~ char in tags, and that most of the time, upstream do not use _ in version numbers. Let s say upstream is releasing version 1.2.3rc1, then I simply do git tag 1.2.3_rc1 1.2.3rc1 so that I have a new tag which points to the same commit as 1.2.3rc1, but that can be used for the Debian 1.2.3~rc1-1 release and the make-orig-file.
All this might looks overkill at first, but in fact it is really convenient and efficient. Also, even though there is a master branch above, it isn t needed to build the package. Git is smarter than this, so even if you haven t checked out upstream master branch from the upstream remote, make-orig-file and git-buildpackage will simply continue to work. Which is cool, because this means you can store a single branch on Alioth (which is what I do).
git fetch and you have the upstream tags, and then pass the
flag --upstream-vcs-tag <tag> to git-import-orig whenever importing
the upstream release tarball. git-import-orig will handle the
construction of the merge commit for you and everything will just work,
exactly like it normally does with git-buildpackage except with a more
complete history.
This support was added in git-buildpackage 0.6.0~git20120324, so it's
available in unstable and testing.
(I was going to update my notes on
Debian packaging with Git to include this information before posting
this, but I see that it will require some restructuring and quite a few
changes to that document and I don't have time tonight. Hopefully soon.)
Puppet is a nice tool but it has a significant problem with passwords:
node "mysqlserver"
package
["mysql-server",
"mysql-client",
"sekred"]:
ensure => installed;
service
"mysqld":
name => "mysql",
ensure => running,
hasrestart => true,
hasstatus => true;
exec
"mysql-set-root-password":
command => "mysqladmin -u root password $(sekred get root@mysql)",
onlyif => "mysql -u root", # Trigger only if password-less root account.
require => [Service["mysqld"], Package["mysql-client", "sekred"]];
And to get the root password for mysql, just login into the node "mysqlserver":
$> sekred get root@mysql Cie8iezaSetting password for SSH-only user This example is quite typical of the broken fully automated scenario with passwords: - you setup a remote host only accessible through SSH - you create a user and set its SSH public key to authorize access - your user cannot access its account because SSH prevent password-less account login! In other word, you need to login into the node, set a password for the user and mail him back.... That defeats a little bit the "automation" provided by puppet. Here is what I do with sekred:
define user::template ()
user
$name:
ensure => present,
membership => minimum,
shell => "/bin/bash",
....
include "ssh_keys::$name"
# Check password less account and set one, if required.
$user_passwd="$(sekred get --uid $name $name@login)"
exec
"user-set-default-password-$name":
command => "echo $name:$user_passwd chpasswd",
onlyif => "test \"$(getent shadow $name cut -f2 -d:)\" = \"!\"",
require => [User[$name], Package["sekred"]];
So the command "test \"$(getent shadow $name cut -f2 -d:)\" = \"!\"" test for a password-less account. If this is the case, it creates a password using sekred get --uid $name $name@login and set it through chpasswd.
Note that $user_passwd use a shell expansion that will be evaluated when running the command only, on the host. The --uid flag of sekred assign the ownership of the password to the given user id.
So now the user (foo) can login into the node and retrieve its password using sekred get foo@login.
Try it!
Sekred was a very short project but I am pretty happy with it. It solves a long standing problem and helps to cover an extra mile of automation when setting up new nodes.
The homepage is here and you can download it here. Feel free to send patches, bugs and feature requests (here, login required).
A few weeks ago I taught a class on Open Source: Contributing to free culture (catalog entry) for Spark, a one-day program put on by the student-run MIT Educational Studies Program. I was fortunate to have two helpful co-teachers, Tyler Hallada and Jacob Hurwitz, who assisted with the lesson plan and the in class lecture.Next.