I had no access to the internet for most of my childhood. Nobody in my area knew anything about programming. I learned a great deal from a number of CDs that included free software source code and archives of project mailing lists. When I got to university, I learned even more by being able to develop a Debian-based OS for use in our computer facilities. That gave me the experience and knowledge that I needed to become involved in Debian development, which in turn gave me the background required to be able to help Ubuntu become the first free software operating system to work out of the box on modern laptops. From there, I've been able to build my career around developing free software.libraw. Now I really feel even more
strongly for the Debian policy section 4.13 which states that
Debian packages should not ship with copies of other packages code. It
made it really hard to figure out which packages were vulnerable,
especially because it was hard to figure out which versions of
libraw/dcraw were actually vulnerable to the bug, but also just plain
figure out which packages were copying code from libraw. I wish I had
found out about secure-testing/data/embedded-code-copies
earlier... Still, it was interesting to get familiar with
codesearch.debian.net to try to find copies of the vulnerable
code, which was not working so well. Kudos to darktable 2.0 for
getting rid of their embedded copy of libraw, by the way - it made it
completely not vulnerable to the issue, the versions in stretch and
sid not having the code at all and older versions having
non-vulnerable copies of the code.
virt-manager
would just fail on startup with an error saying interface mtu value
is improper, which is a very unhelpful error message (what is a
proper value??) - and, for the record, the MTU on eth0 and wlan0
is the fairly standard 1500, while lo is at 65536 bytes, nothing
unusual there as far as I know.
Then the next problem was actually running a VM - I still somewhat
expected to be able to boot off a chroot, something I should
definitely forget about it seems like (boot loader missing? not
sure). I ended up calling virt-install with the live ISO image I was
previously using:
virt-install --virt-type kvm --name squeeze-amd64 --memory 512 --cdrom ~/iso/Debian/cdimage.debian.org_mirror_cdimage_archive_6.0.10_live_amd64_iso_hybrid_debian_live_6.0.10_amd64_gnome_desktop.iso --disk size=4 --os-variant debiansqueeze
At least now I have an installed squeeze VM, something I didn't get to
do in Virtualbox (mostly because I didn't want to wait through the
install, because it was so slow).
Finally, I still have trouble getting a commandline console on the VM:
somehow, running virtsh console squeeze-amd64 doesn't give me a
login terminal, and worse, it actually freezes the terminal that I
can actually get on virt-viewer squeeze-amd64, which definitely
sounds like a bug.
I documented a bit more of that setup in the Debian wiki KVM page
so hopefully this will be useful for others.
41M 2004
363M 2005
937M 2006
2,2G 2007
894M 2008
800M 2009
1,8G 2010
1,4G 2011
9,8G 2012
31G 2013
26G 2014
9,8G 2015
The drop in 2015 is mostly due to me taking less pictures in the last
year, for some reason...
[text](link) which seems more natural at
first, but then the formatting looks messier, as paragraph wrapping is
all off because of the long URLs. So I always ended up converting
those links, which was a painful series of keystrokes.
So I made a macro, and while I'm a it, why not rewrite it as a lisp
function. Twice.
Then I was told by the markdown-mode.el developers that they had
already fixed that (in the 2.1 version, not in Debian jessie) and
that the C-c C-a r key binding actually recognized existing links and
conveniently converted them.
I documented my adventures in bug #94, but it seems I wrote this
code for nothing else than re-learning Emacs lisp, which was actually
quite fun.
.txt file that i rename to .mdwn.
I would then have to do:
M-x rename-file <ret> newfile
M-x rename-buffer <ret> newfile
C-x C-s <ret> newfile
Really annoying.
Turns out that set-visited-file-name actually does most of the job,
but doesn't actually rename the file, which is really silly. So I
wrote this small function instead:
(defun rename-file-and-buffer (newfname)
"combine rename-file and rename-buffer
set-visited-file-name does most of the job, but unfortunately
doesn't actually rename the file. rename-file does that, but
doesn't rename the buffer. rename-buffer only renames the buffer,
which is pretty pointless.
only operates on current buffer because set-visited-file-name
also does so and we don't bother doing excursions around.
"
(interactive "GRename file and bufer: ")
(let ((oldfname (buffer-file-name)))
(set-visited-file-name newfname nil t)
(rename-file oldfname newfname)
)
)
Not bound to any key, really trivial, but doing this without that
function is really non-trivial, especially since
set-visited-file-name needs special arguments to not mark the file
as modified.
+S ("secure
channel" flag) where all channels are secure by default, and you
need to deliberately mark a channel as insecure with the +U flag
if you actually want to allow users on an clear-text connection to
join the channel. A transition mechanism is also
proposed.
There are three of us living here, and the plan is to switch all three
of us from wireless to wired ethernet Internet connections by
transporting cabling through the ventilation system using this
remote-controlled car.
Here s an action shot we took. My housemate put on his Gaming
playlist and it reached a very suitable crescendo as we guided the car
through its final journey, pulling the last piece of cotton which we
would then use to pull the final cabal through. The timing of the
music couldn t have been better. It reflected the risk of losing
control of the car as we moved the controller around to enable the car
to pick up the radio signals. A further risk was caused by the car
only being able to turn right, not left, and there not being enough
room in the air duct for it to make a full-circle rotation. Our
backup plan was to try tossing a ball tied to a piece of string down
the duct.
Unfortunately I m still on a wireless connection because to reach my
room we d have had to send the cable via the furnace/air conditioning
unit which we decided against.
Does a SATA-to-USB converter, for moving data off my old laptop hard
drive which I had to replace this week, need to be this complicated?
More than 10 years ago, I launched Unhappy Birthday in a fit of copyrighteous exuberance. In the last decade, I have been interviewed on the CBC show WireTap and have received an unrelenting stream of hate mail from random strangers.
With a recently announced settlement suggesting that Happy Birthday is on its way into the public domain, it s not possible for even the highest-protectionist in me to justify the continuation of the campaign in its original form. As a result, I ve suspended the campaign while I plan my next move. Here s the full text of the notice I posted on the Unhappy Birthday website:
Unfortunately, a series of recent legal rulings have forced us to suspend our campaign. In 2015, Time Warner s copyright claim to Happy Birthday was declared invalid. In 2016, a settlement was announced that calls for a judge to officially declare that the song is in the public domain. This is horrible news for the future of music. It is horrible news for anybody who cares that creators, their heirs, etc., are fairly remunerated when their work is performed. What incentive will there be for anybody to pen the next Happy Birthday knowing that less than a century after their deaths their estates and the large multinational companies that buy their estates might not be able to reap the financial rewards from their hard work and creativity? We are currently planning a campaign to push for a retroactive extension of copyright law to place Happy Birthday, and other works, back into the private domain where they belong! We believe this is a winnable fight. After all, copyright has been retroactively extended before! Stay tuned! In the meantime, we ll keep this page here for historical purposes.Copyrighteous Benjamin Mako Hill (2016-02-11)
(unfortunately this bit seems to be something that it s worth pointing out)From: Mark Brown <broonie@kernel.org> To: $ CCS Cc: $ LIST Subject: $ SUBJECT In-Reply-To: $ MSGID The patch $ TITLE has been applied to the $ REPO tree at $ URL $ BRANCH All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
(the script does try to CC relevant lists). As well as giving people more information this also means that the mails only get sent out when things actually get published to my public repositories which avoids some confusion that used to happen sometimes with people getting my replies before I d pushed, especially when I d been working with poor connectivity as often happens when travelling. On the down side it s very much an obvious form letter which some people don t like and which can make people glaze over. My hope with this is to make things easier on average for patch submitters and easier for me, feedback on the scripted e-mails appears to be good thus far and the goal with the pasted in content is that it should be less obvious that it s happening so I d expect less feedback there.If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
Since fourteen years, I have been photographing digitally and putting the pictures on my webpage. Back then, online privacy was not a big deal, but things have changed, and I had to at least mildly protect the innocent. In particular, I wanted to prevent search engines from accessing some of my pictures.
As I did not want my friends and family having to create an account and remember a password, I set up an OpenID based scheme five years ago. This way, they could use any of their OpenID enabled account, e.g. their Google Mail account, to log in, without disclosing any data to me. As my photo album consists of just static files, I created two copies on the server: the real one with everything, and a bunch of symbolic links representing the publicly visible parts. I then used mod_auth_openid to prevent access to the protected files, unless the users logged in. I never got around of actually limiting who could log in, so strangers were still able to see all photos, but at least search engine spiders were locked out.
But, very unfortunately, OpenID did never really catch on, Google even stopped being a provider, and other promising decentralized authentication schemes like Mozilla Persona are also phased out. So I needed an alternative.
A very simply scheme would be a single password that my friends and family can get from me and that unlocks the pictures. I could have done that using HTTP Auth, but that is not very user-friendly, and the login does not persist (at least not without the help of the browser). Instead, I wanted something that involves a simple HTTP form. But I also wanted to avoid server-side programming, for performance and security reasons. I love serving static files whenever it is feasible.
Then I found that mod_rewrite, Apache s all-around-tool for URL rewriting and request mangling, supports reading and writing cookies! So I came up with a scheme that implements the whole login logic in the Apache server configuration. I d like to describe this setup here, in case someone finds it inspiring.
I created a login.html with a simple HTML form:
<form method="GET" action="/bilder/login.html">
<div style="text-align:center">
<input name="password" placeholder="Password" />
<button type="submit">Sign-In</button>
</div>
</form>
It sends the user to the same page again, putting the password into the query string, hence the method="GET" mod_rewrite unfortunately cannot read the parameters of a POST request.
The Apache configuration is as follows:
RewriteMap public "dbm:/var/www/joachim-breitner.de/bilder/publicfiles.dbm"
<Directory /var/www/joachim-breitner.de/bilder>
RewriteEngine On
# This is a GET request, trying to set a password.
RewriteCond % QUERY_STRING password=correcthorsebatterystaple
RewriteRule ^login.html /bilder/loggedin.html [L,R,QSD,CO=bilderhp:correcthorsebatterystaple:www.joachim-breitner.de:2000000:/bilder]
# This is a GET request, trying to set a wrong password.
RewriteCond % QUERY_STRING password=
RewriteRule ^login.html /bilder/notloggedin.html [L,R,QSD]
# No point in loggin in if there is already the right password
RewriteCond % HTTP:Cookie bilderhp=correcthorsebatterystaple
RewriteRule ^login.html /bilder/loggedin.html [L,R]
# If protected file is requested, check for cookie.
# If no cookie present, redirect pictures to replacement picture
RewriteCond % HTTP:Cookie !bilderhp=correcthorsebatterystaple
RewriteCond $ public:$0 private private
RewriteRule ^.*\.(png jpg)$ /bilder/pleaselogin.png [L]
RewriteCond % HTTP:Cookie !bilderhp=correcthorsebatterystaple
RewriteCond $ public:$0 private private
RewriteRule ^.+$ /bilder/login.html [L,R]
</Directory>
The publicfiles.dbm file is generated from a text file with lines like
login.html.en 1
login.html.de 1
pleaselogin.png 1
thumbs/20030920165701_thumb.jpg 1
thumbs/20080813225123_thumb.jpg 1
...
using
/usr/sbin/httxt2dbm -i publicfiles.txt -o publicfiles.dbm
and whitelists all files that are visible without login. Make sure it contains the login page, otherwise you ll get a redirect circle.
The other directives in the above configure fulfill these tasks:
correcthorsebatterystaple) is in the query string, the server redirects the user to a logged-in-page that tells him that the login was successful and instructs him to reload the photo album. It also sets a cookie that will last very long -- after all, I want this to be convenient for my visitors. The query string parsing is not very strict (e.g. a password of correcthorsebatterystaplexkcdrules would also work), but that s ok.correcthorsebatterystaple; just ask me what it is.
At Collabora, we use SparkleShare to store all sorts of internal documents, and it s being used by users not
familiar with command line interfaces too. Unfortunately, the version we recently had
in Debian had a couple of very annoying bugs, making it a great pain to use it: it would not notice edits in
local files, or not notice new commits being pushed to the server, and that led to individual users edits
being lost sometimes. Not cool, especially when the document has to be sent to the customer in a couple of
minutes.
The new versions, 1.4 (and recently released 1.5) was reported as being much better and also fixing some crashes,
but it also used GTK+ 3 and some libraries not yet packaged for Debian. Thanh Tung Nguyen
packaged these packages (and a newer SparkleShare) for Ubuntu and published them in his PPA, but they required some work to be fit for Debian.
I have never touched Mono packages before in my life, so I had to
learn a lot. Some time was spent talking to upstream about fixing
their copyright statements (they had none in the code, and only
one author was mentioned in configure.ac, and nowhere else in the
source), a bit more time went into adjusting and updating the patches
to the current source code version. Then, of course, waiting the
packages to go through NEW. Fixing parallel build issues,
waiting for buildds to all build dependencies for at least one architecture
But then, finally, on 19th of January I had the updated SparkleShare
in Debian.
As you may have already guessed, this blog post has been sponsored by
Collabora, the first of my employers to
I've not really spent much time on Gammu in past months and it was about time to do some basic housekeeping.
It's not that there would be too much of new development, I rather wanted to go through the issue tracker, properly tag issues, close questions without response and resolve the ones which are simple to fix. This lead to few code and documentation improvements.
Overall the list of closed issues is quite huge:
Filed under: English Gammu python-gammu Wammu 0 comments
Yesterday, I pushed out version 2.11.18 of the Geode X.Org driver. This is the driver used by the OLPC XO-1 and by a plethora of low-power desktops, micro notebooks and thin clients. This release mostly includes maintenance fixes of all sorts. Of noticeable interest is a fix for the long-standing issue that switching between X and a VT would result in a blank screen (this should probably be cherry-picked for distributions running earlier releases of this driver). Many thanks to Connor Behan for the fix!
Today, Gammu 1.37.0 has been released. As usual it collects bug fixes. This time there is another important change as well - improver error reporting from SMSD.
This means that when SMSD fails to connect to the database, you should get a bit more detailed error than "Unknown error".
Full list of changes:
Filed under: English Gammu 0 comments
alias ls='ls --color=auto -N'
Unfortunately it doesn't actually revert to the previous behaviour,
but it's close enough.
I had some pile of hosting requests in queue since half of January and my recent talk on FOSDEM had some impact on requests for hosting translations as well, so it's about time to process them.
New kids on the block are:
Second round includes:
Unfortunately I had to reject some projects as well mostly due to lack of file format support. This is still the same topic - when translating project, please stick with some standard format. Preferably what is usual on your platform.
If you like this service, you can support it on Bountysource salt or Gratipay. There is also option for hosting translations of commercial products.
Filed under: English Weblate 0 comments
This post was written by Dirk Eddelbuettel and Christoph Sax and will be posted on both author's respective blogs. The seasonal package by Christoph Sax brings a very featureful and expressive interface for working with seasonal data to the R environment. It uses the standard tool of the trade: X-13ARIMA-SEATS. This powerful program is provided by the statisticians of the US Census Bureau based on their earlier work (named X-11 and X-12-ARIMA) as well as the TRAMO/SEATS program by the Bank of Spain. X-13ARIMA-SEATS is probably the best known tool for de-seasonalization of timeseries, and used by statistical offices around the world. Sadly, it also has a steep learning curve. One interacts with a basic command-line tool which users have to download, install and properly reference (by environment variables or related means). Each model specification has to be prepared in a special 'spec' file that uses its own, cumbersome syntax. As seasonal provides all the required functionality to use X-13ARIMA-SEATS from R --- see the very nice seasonal demo site --- it still required the user to manually deal with the X-13ARIMA-SEATS installation. So we decided to do something about this. A pair of GitHub repositories provide both the underlying binary in a per-operating system form (see x13prebuilt) as well as a ready-to- use R package (see x13binary) which uses the former to provide binaries for R. And the latter is now on CRAN as package x13binary ready to be used on Windows, OS-X or Linux. And the seasonal package (in version 1.2.0 -- now on CRAN -- or later) automatically makes use of it. Installing seasaonal and x13binary in R is now as easy as:
install.packages("seasonal")
which opens the door for effortless deployment of powerful deasonalization. By default, the principal function of the package employs a number of automated techniques that work well in most circumstances. For example, the following code produces a seasonal adjustment of the latest data of US retail sales (by the Census Bureau) downloaded from Quandl:
library(seasonal)
library(Quandl) ## not needed for seasonal but has some niceties for Quandl data
rs <- Quandl(code="USCENSUS/BI_MARTS_44000_SM", type="ts")/1e3
m1 <- seas(rs)
plot(m1, main = "Retail Trade: U.S. Total Sales", ylab = "USD (in Billions)")
This tests for log-transformation, performs an automated ARIMA model search, applies outlier detection, tests and adjusts for trading day and easter effects, and invokes the SEATS method to perform seasonal adjustment. And this is how the adjusted series looks like:
xp <- Quandl(code="FRED/VALEXPCNM052N", type="ts")/1e9
m2 <- seas(window(xp, start = 2000),
xreg = cbind(genhol(cny, start = -7, end = -1, center = "calendar"),
genhol(cny, start = 0, end = 7, center = "calendar"),
genhol(cny, start = 8, end = 21, center = "calendar")
),
regression.aictest = c("td", "user"),
regression.usertype = "holiday")
plot(m2, main = "Goods, Value of Exports for China", ylab = "USD (in Billions)")
which generates the following chart demonstrating a recent flattening in export activity measured in USD.
X-13ARIMA-SEATS is, but also just how easy it is to use X-13ARIMA-SEATS from R now that we provide the x13binary package automating its installation.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
My monthly report covers a large part of what I have been doing in the free software world. I write it for my donators (thanks to them!) but also for the wider Debian community because it can give ideas to newcomers and it s one of the best ways to find volunteers to work with me on projects that matter to me.
Debian LTS
I did not ask for any paid hours this month and won t be requesting paid hours for the next 5 months as I have a big project to handle with a deadline in June. That said I still did a few LTS related tasks:
No comment Liked this article? Click here. My blog is Flattr-enabled.
Next.