I just pushed a new release of PiwigoPress (main page, WordPress plugin dir) to the WordPress servers. This release incorporates new features for the sidebar widget, and better interoperability with some Piwigo galleries.
The new features are:
- Selection of images: Up to now images for the widget were selected at random. The current version allows selecting images either at random (the default as before), but also in ascending or descending order by various criteria (uploaded, availability time, id, name, etc). With this change it is now possible to always display the most recent image(s) from a gallery.
- Interoperability: Some Piwigo galleries don’t have thumbnail sized representatives. For these galleries the widget was broken and didn’t display any image. We now check for either square or thumbnail.
That’s all, enjoy, and leave your wishlist items and complains at the issue tracker on the github project piwigopress.
Junichi Uekawa: I've been writing ELF parser for fun using C++ templates to see how much I can simplify.
In this week’s REST Easy tutorial, we tackle the process of adding entity references to your API endpoints. Entity references create relationships between two separate data structures in Drupal. Exposing that link within your API is critical to providing a comprehensive content model.
But there's a corner case that can be somewhat confusing here, and it's one that I managed to crash into multiple times when I was implementing some code that works with this. Keys can be "possessed" by a process, and have permissions that are granted to the possessor orthogonally to any permissions granted to the user or group that owns the key. This is important because it allows for the creation of keyrings that are only visible to specific processes - if my userspace keyring manager is using the kernel keyring as a backing store for decrypted material, I don't want any arbitrary process running as me to be able to obtain those keys. As described in keyrings(7), keyrings exist at the session, process and thread levels of granularity.
This is absolutely fine in the normal case, but gets confusing when you start using sudo. sudo by default doesn't create a new login session - when you're working with sudo, you're still working with key posession that's tied to the original user. This makes sense when you consider that you often want applications you run with sudo to have access to the keys that you own, but it becomes a pain when you're trying to work with keys that need to be accessible to a user no matter whether that user owns the login session or not.
I spent a while talking to David Howells about this and he explained the easiest way to handle this. If you do something like the following:
$ sudo keyctl add user testkey testdata @u
a new key will be created and added to UID 0's user keyring (indicated by @u). This is possible because the keyring defaults to 0x3f3f0000 permissions, giving both the possessor and the user read/write access to the keyring. But if you then try to do something like:
$ sudo keyctl setperm 678913344 0x3f3f0000
where 678913344 is the ID of the key we created in the previous command, you'll get permission denied. This is because the default permissions on a key are 0x3f010000, meaning that the possessor has permission to do anything to the key but the user only has permission to view its attributes. The cause of this confusion is that although we have permission to write to UID 0's keyring (because the permissions are 0x3f3f0000), we don't possess it - the only permissions we have for this key are the user ones, and the default state for user permissions on new keys only gives us permission to view the attributes, not change them.
But! There's a way around this. If we instead do:
$ sudo keyctl add user testkey testdata @s
then the key is added to the current session keyring (@s). Because the session keyring belongs to us, we possess any keys within it and so we have permission to modify the permissions further. We can then do:
$ sudo keyctl setperm 678913344 0x3f3f0000
and it works. Hurrah! Except that if we log in as root, we'll be part of another session and won't be able to see that key. Boo. So, after setting the permissions, we should:
$ sudo keyctl link 678913344 @u
which ties it to UID 0's user keyring. Someone who logs in as root will then be able to see the key, as will any processes running as root via sudo. But we probably also want to remove it from the unprivileged user's session keyring, because that's readable/writable by the unprivileged user - they'd be able to revoke the key from underneath us!
$ sudo keyctl unlink 678913344 @s
will achieve this, and now the key is configured appropriately - UID 0 can read, modify and delete the key, other users can't.
This is part of our ongoing work at CoreOS to make rkt more secure. Moving the signing keys into the kernel is the first step towards rkt no longer having to trust the local writable filesystem. Once keys have been enrolled the keyring can be locked down - rkt will then refuse to run any images unless they're signed with one of these keys, and even root will be unable to alter them.
 (obviously it should also be impossible to ptrace() my userspace keyring manager)
 Part of our Secure Boot work has been the integration of dm-verity into CoreOS. Once deployed this will mean that the /usr partition is cryptographically verified by the kernel at runtime, making it impossible for anybody to modify it underneath the kernel. / remains writable in order to permit local configuration and to act as a data store, and right now rkt stores its trusted keys there.
It is fitting that in football-crazed Barcelona, although we will have a plethora of tech talks, that we have at least one talk that highlights the sport! Whether you’re a fan of FC Barcelona or any football team for that matter, it is pretty impressive what a team can accomplish together. And although we aren’t goalies and midfielders, Adam Onishi's (onishiweb) talk will highlight how front-enders and Drupalers can go for the gold together.
The monthly Drupal core bug fix/feature release window is scheduled for this Wednesday. However, there have not been enough changes to the development version since the last bug fix/feature release to warrant a new release, so there will be no Drupal core release on that date. (I had hoped to get a release done, but scheduling issues plus the work involved in putting out a large security release in August made it impossible.) A Drupal 7 bug fix/feature release during the October window is likely instead.
Upcoming release windows include:
- Wednesday, September 16 (security release window)
- Wednesday, October 7 (bug fix/feature release window)
We recently teamed up with Drupalize.me to produce a brand new (free!) video tutorial: "Introduction to RedHen CRM."
In this introductory video, you'll tour RedHen CRM's central features, get a detailed walkthrough of the setup process, and learn a few of RedHen's cool tricks, like duplicate management (a pet feature of mine). This is a great resource for anyone who is looking for a step-by-step guide to setting up and configuring RedHen, or just wants to learn more about it!
Continuing in our series of integrating CRMs with Drupal, we're now going to take a look at CiviCRM, an open-source, web-based CRM aimed at charities and non-profits which integrates closely with Drupal, Joomla and WordPress.
Have you ever wondered how Drupal does what it does? Good, me too. In this series of posts, I'm going to explain what Drupal is doing behind the scenes to perform its magic.
In Part 1, we'll keep it fairly high level and walk through the path a request takes as it moves through Drupal. In later parts, we'll take deeper dives into individual pieces of this process.Step 0: Some background information
For this example, let's pretend that George, a user of your site, wants to visit your About Us page, which lives at http://oursite/about-us.
Let's also pretend that this page is a node (specifically, the node with nid of 1) with a URL alias of about-us.
And to keep things simple, we'll say that we're using Apache as our webserver, and there's nothing fancy sitting in front of Drupal, such as a caching layer or the like.
So basically, we're talking about a plain old Drupal site on a plain old webserver.Step 1: The request hits the server
There's some pretty hot action that happens before Drupal even sees the request. George's browser sends a request to http://oursite.com/about-us, and this thing we call the internet figures out that that should go to our server. If you're not well versed on how that part happens, you may benefit from reading this infographic on how the internet works.
Once our server has received the request, that's when the fun begins. This request will land on port 80, and Apache just so happens to be listening on that port, so Apache will immediately see the request and decide what to do with it.
Since the request is going to oursite.com then Apache can look into its configuration files to see what the root directory is for oursite.com (along with lots of other info about it which is out of scope for this post). We'll say that the root directory for our site is /var/www/oursite, which is where Drupal lives. So Apache is going to send the request there.Step 2: The .htaccess file
But Drupal hasn't taken over just yet. Drupal ships with a .htaccess file which is a way of telling Apache some things. In fact, Drupal's .htaccess tells Apache a whole lot of things. The most important things it does are:
- Protects files that could contain source code from being viewable, such as .module files or .inc files, both of which contain PHP.
- Allows requests that point directly to files in the filesystem to pass through without touching Drupal.
- Redirects all other requests to Drupal's index.php file.
It also does some other fancy things such as disabling directory indexes and allowing Drupal to serve gzipped CSS and JS, but those are the biggies.
So, in our case, Apache will see that we're looking for /about-us, and will say:
- Is this request trying to access a file that it shouldn't? No.
- Is this request directly pointing to a file in the filesystem? No.
- Then this request should be sent to index.php!
And away we go...Step 3: Drupal's index.php file
Finally, we have reached Drupal, and we're looking at PHP. Drupal's index.php is super clean, and in fact only has 4 lines of code, each of which are easy to understand.Line 1: Define DRUPAL_ROOT
php define('DRUPAL_ROOT', getcwd());
This just sets a constant called DRUPAL_ROOT to be the value of the current directory that index.php is in. This constant is used all over the place in the Drupal core codebase.
In our case, this means that DRUPAL_ROOT gets set to /var/www/oursite.Lines 2 and 3: Bootstrap Drupal
php require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
These lines run a full Drupal bootstrap, which basically means that they tell Drupal "Hey, grab all of the stuff you're going to need before we can get to actually handling this request."
For more information about the bootstrap process, see Part 2 of this series.Line 4: Do everything else
This simple looking function is where the heart and soul of Drupal lives. For more information about what happens in this ball of wax, visit the Menu Router chapter.
Time has almost come! The yearly Europe DrupalCon will start on September 21nth 2015 in Barcelona. It will be my fist time on a DrupaCon even if I am working with Drupal for 7 years now. Don't ask me why, there are no excuses.
As a frontend developer and a freelancer it was too hard for me to select the sessions to attend. DrupalCon hosts the best of the best talks for Drupal out there and the benefits for Drupal *ers is enormous. Sessions will be recorded but live sessions are these that matter.
So, after a deep review on each session I decided to attend sessions that are dealing with the keywords below (notice that order matters):
- CI (Continuous Integration) and CD (Continuous Development)
- Drupal 8 plug system
- Headless Drupal
I am sure that with some sessions (eg these related with Docker or AngularJS) there will be a "crowding". Remember that. It happens everywhere, from local meetups to large events. Docker, Headless and Devops are here to stay and will bother us for years. Thankfully Drupal with the new 8.x version is "up to date" with the new technologies and methods and the DrupalCon shows that movement clearly.
Here is My Schedule (I know that there are duplicates or even triplicates but I will decide last minute. Maybe after asking other attendees...)
09/22/2015 - 11:00-09/22/2015 - 12:00 Session Speaker(s) Experience level Room Symfony for Drupal developers Crell Intermediate 115
09/22/2015 - 13:00-09/22/2015 - 14:00 Session Speaker(s) Experience level Room Drupal development with Vagrant 128 Fundamentals of Front-End Ops prestonso Intermediate 111: Adyax Docker powered team and deployment daven Intermediate 118-119: Platform.sh
09/22/2015 - 14:15-09/22/2015 - 15:15 Session Speaker(s) Experience level Room Drupal 8 Plugin Deep Dive EclipseGc Advanced 116: Pantheon Headful Drupal nod_ Intermediate 122-123: Interoute
09/22/2015 - 15:45-09/22/2015 - 16:45 Session Speaker(s) Experience level Room Composer and Drupal 8 webflo, tstoeckler Intermediate 122-123: Interoute Dependency Injection, what, why, how and when mr_r_miller Intermediate 115
09/22/2015 - 17:00-09/22/2015 - 18:00 Session Speaker(s) Experience level Room Expose Drupal with RESTful e0ipso Intermediate 112: Exove Caching at the Edge: CDNs for everyone Wim Leers, Fabianx Advanced 117: Acquia
09/23/2015 - 10:45-09/23/2015 - 11:45 Session Speaker(s) Experience level Room Local vs. Remote Development: Do Both by Syncing Your Site From Kitchen to Cloud With Jenkins SolomonGifford Beginner 116: Pantheon Prototypes and Drupal: from designing in-browser to implementing custom templates ygerasimov, mortenc Intermediate 111: Adyax
09/23/2015 - 13:00-09/23/2015 - 14:00 Session Speaker(s) Experience level Room Docker and DevOps – Building platforms globally William Morrish - Interoute Intermediate 120-121 Linked Data 101: The Non-Terrifying Intro to Semantic Content nozurbina Intermediate 115
09/23/2015 - 14:15-09/23/2015 - 15:15 Session Speaker(s) Experience level Room Drupal and Security: what you need to know scor, klausi Intermediate 111: Adyax
09/23/2015 - 15:45-09/23/2015 - 16:45 Session Speaker(s) Experience level Room Hassle-free Hosting and Testing with DevShop & Behat. Jon Pugh Intermediate 112: Exove Decoupling Drupal modules into PHP libraries bojanz Advanced 111: Adyax
09/23/2015 - 17:00-09/23/2015 - 18:00 Session Speaker(s) Experience level Room What's your type? Andreu Balius Intermediate 113: Amazee Labs Perfecting Drupal IA: Harmonious Menus, Paths, and Breadcrumbs Jody Lynn Intermediate 118-119: Platform.sh
09/24/2015 - 10:45-09/24/2015 - 11:45 Session Speaker(s) Experience level Room Making Drupal a better out-of-the-box product: Report on usability testing results and how we can make 8.1.x+ shine webchick, Bojhan, LewisNyman Beginner 122-123: Interoute Building the Front End with Angular.js ceng Intermediate 112: Exove
09/24/2015 - 13:00-09/24/2015 - 14:00 Session Speaker(s) Experience level Room CIBox - full stack open source Continuous Integration flow for Drupal/Symfony teams podarok, ygerasimov Intermediate 113: Amazee Labs
09/24/2015 - 14:15-09/24/2015 - 15:15 Session Speaker(s) Experience level Room The wonderland of HTTP in PHP dawehner Intermediate 115 Introducing Probo.CI tizzo Intermediate 118-119: Platform.sh
It's been over 2 years since I [[decided to start a new, nomadic life|A new life]]. I had the idea of blogging about this experience as it happened, but not only I am incredibly lazy when it comes to writing, most of the time I have been too busy just enjoying this lifestyle!
The TL;DR version of these last 2 years:
- Lounged a bit in Ireland after leaving work, went on a great road trip along the West coast.
- Lived in Nice 3 months, back in the same house I lived between 2009 and 2010.
- During that time, my dad visited and took him for a trip around Nothern Italy, the Côte d'Azur and Paris; then travelled to DebConf in Switzerland, visited Gregor in Innsbruck, and travelled back to Nice by train, crossing the alps and a big chunk of Italy.
- Then went to Buenos Aires for 3 months (mom was very happy).
- Back in Europe, attended Fosdem, and moved to Barcelona for 3 months; so far, the best city I ever lived in!
- Went back to Dublin for a while, ended up staying over 8 months, including
getting a temporary job at a normal office (booo!).
- Although one of these months I spent travelling in the States (meh).
- And of course, many more short trips, including a couple of visits to Barcelona, Lille, Nice, and of course Brussels for Fosdem.
- Again went to Buenos Aires, only 2 months this time.
- Another month in Dublin, then holidays visiting my friends in Lisbon, wedding in Oviedo, and a road trip around Asturias and Galicia.
- From Spain I flew to Prague and stayed for 2 months (definitely not enough).
- Quick trip to Dublin, then CCC camp and DebConf in Germany.
And now, I am in Cluj-Napoca, Romania.
[[!img Romania/IMG_20150827_191757.jpg size="500x375" alt="View from my window]]
I haven't posted in a very long time. Not only because I suck at this, but also because IkiWiki decided to stop working with OpenID, so I can't use the web interface any more to post.. Very annoying.
Already spent a good deal of time trying to find a solution, without any success.. I really don't want to migrate to another software again, but this is becoming a showstopper for me.
Review: Through Struggle, The Stars, by John J. LumpkinSeries: Human Reach #1 Publisher: John J. Lumpkin Copyright: July 2011 ISBN: 1-4611-9544-6 Format: Kindle Pages: 429
Never let it be said that I don't read military SF. However, it can be said that I read books and then get hellishly busy and don't review them for months. So we'll see if I can remember this well enough to review it properly.
In Lumpkin's future world, mankind has spread to the stars using gate technology, colonizing multiple worlds. However, unlike most science fiction futures of this type, it's not all about the United States, or even the United States and Russia. The great human powers are China and Japan, with the United States relegated to a distant third. The US mostly maintains its independence from either, and joins the other lesser nations and UN coalitions to try to pick up a few colonies of its own. That's the context in which Neil and Rand join the armed services: the former as a pilot in training, and the latter as an army grunt.
This is military SF, so of course a war breaks out. But it's a war between Japan and China: improved starship technology and the most sophisticated manufacturing in the world against a much larger economy with more resources and a larger starting military. For reasons that are not immediately clear, and become a plot point later on, the United States president immediately takes an aggressive tone towards China and pushes the country towards joining the war on the side of Japan.
Most of this book is told from Neil's perspective, following his military career during the outbreak of war. His plans to become a pilot get derailed as he gets entangled with US intelligence agents (and a bad supervisor). The US forces are not in a good place against China, struggling when they get into ship-to-ship combat, and Neil's ship goes on a covert mission to attempt to complicate the war with political factors. Meanwhile, Rand tries to help fight off a Chinese invasion of one of the rare US colony worlds.
Through Struggle, The Stars does not move quickly. It's over 400 pages, and it's a bit surprising how little happens. What it does instead is focus on how the military world and the war feels to Neil: the psychological experience of wanting to serve your country but questioning its decisions, the struggle of working with people who aren't always competent but who you can't just make go away, the complexities of choosing a career path when all the choices are fraught with politics that you didn't expect to be involved in, and the sheer amount of luck and random events involved in the progression of one's career. I found this surprisingly engrossing despite the slow pace, mostly because of how true to life it feels. War is not a never-ending set of battles. Life in a military ship has moments when everything is happening far too quickly, but other moments when not much happens for a long time. Lumpkin does a great job of reflecting that.
Unfortunately, I thought there were two significant flaws, one of which means I probably won't seek out further books in this series.
First, one middle portion of the book switches away from Neil to follow Rand instead. The first part of that involves the details of fighting orbiting ships with ground-based lasers, which was moderately interesting. (All the technological details of space combat are interesting and thoughtfully handled, although I'm not the sort of reader who will notice more subtle flaws. But David Weber this isn't, thankfully.) But then it turns into a fairly generic armed resistance story, which I found rather boring.
It also ties into the second and more serious flaw: the villain. The overall story is constructed such that it doesn't need a personal villain. It's about the intersection of the military and politics, and a war that may be ill-conceived but that is being fought anyway. That's plenty of conflict for the story, at least in my opinion. But Lumpkin chose to introduce a specific, named Chinese character in the villain role, and the characterization is... well.
After he's humiliated early in the story by the protagonists, Li Xiao develops an obsession with killing them, for his honor, and then pursues them throughout the book in ways that are sometimes destructive to the Chinese war efforts. It's badly unrealistic compared to the tone of realism taken by the rest of the story. Even if someone did become this deranged, it's bizarre that a professional military (and China's forces are otherwise portrayed as fairly professional) would allow this. Li reads like pure caricature, and despite being moderately competent apart from his inexplicable (but constantly repeated) obsession, is cast in a mustache-twirling role of personal villainy. This is weirdly out of place in the novel, and started irritating me enough that it took me out of the story.
Through Struggle, The Stars is the first book of a series, and does not resolve much by the end of the novel. That plus its length makes the story somewhat unsatisfying. I liked Neil's development, and liked him as a character, and those who like the details of combat mixed with front-lines speculation about politics may enjoy this. But a badly-simplified mustache-twirling victim and some extended, uninteresting bits mar the book enough that I probably won't seek out the sequels.
Followed by The Desert of Stars.
Rating: 6 out of 10
The "free upgrade for users of prior Windows versions" is a limited time offer for a year from launch. Microsoft do not offer licence keys for the upgrade: once a machine has updated to Windows 10 and authenticated on the 'Net, then a machine can be re-installed and will be regarded by Microsoft as pre-authorised. Users don't get the key at any point.
Although Microsoft have pushed the fact that this can be done through Windows Update, there is the option to use Microsoft's Media Creation tool to do the upgrade directly on the Windows machine concerned. This would be necessary to get the machine to upgrade and register before a full clean install of Windows 10 from media.
This Media Creation Tool failed for me on three machines with "Unable to access System reserved partition'
All the machines have SSDs from various makers: a colleague suggested that resizing the partition might enable the upgrade to continue. Of the machines that failed, all were running Windows 7 - two were running using BIOS, one using UEFI boot on a machine with no Legacy/CSM mode.
Using GParted live .iso - itself based on Debian Live - allowed me to resize the System partition from 100MiB to 200MiB by moving the Windows partition but Windows became unbootable.
In two cases, I was able to boot from DVD Windows installation media and make Windows bootable again at which point the Microsoft Media Creation Tool could be used to install Windows 10
The UEFI boot machine proved more problematic: I had to create a Windows 7 System Repair disk and repair Windows booting before Windows 10 could proceed.
My Windows-using colleaague had used only Windows-based recovery disks: using Linux tools allowed me to repair Windows installations I couldn't boot
This is my August update, and by the far the coolest thing in it is Debconf.Debconf15
I don’t get tired of saying it is the best conference I ever attended. First it’s a mix of meeting both new people and old friends, having the chance to chat with people whose work you admire but never had a chance to meet before. Second, it’s always quality time: an informal environment, interesting and constructive presentations and discussions.
This year the venue was again very nice. Another thing that was very nice was having so many kids and families. This was no coincidence, since this was the first DebConf in which there was organized childcare. As the community gets older, this a very good way of keeping those who start having kids from being alienated from the community. Of course, not being a parent yet I have no idea how actually hard is to bring small kids to a conference like DebConf. ;-)
I presented two talks:
- Tutorial: Functional Testing of Debian packages, where I introduced the basic concepts of DEP-8/autopkgtest, and went over several examples from my packages giving tips and tricks on how to write functional tests for Debian packages.
- Packaging the Free Software Web for the end user, where I presented the motivation for, and the current state of shak, a project I am working on to make it trivial for end users to install server side applications in Debian. I spent quite some hacking time during DebConf finishing a prototype of the shak web interface, which was demonstrated live in the talk (of course, as usual with live demos, not everything worked :-)).
There was also the now traditional Ruby BoF, where discussed the state and future of the Ruby ecosystem in Debian; and an in promptu Ruby packaging workshop where we introduced the basics of packaging in general, and Ruby packaging specifically.
Besides shak, I was able to hack on a few cool things during DebConf:
- debci has been updated with a first version of the code to produce britney hints files that block packages that fail their tests from migrating to testing. There are some issues to be sorted out together with the release team to make sure we don’t block packages unecessarily, e.g. we don’t want to block packages that never passed their test suite — most the test suite, and not the package, is broken.
- while hacking I ended up updating jquery to the newest version in the 1.x series, and in fact adopting it I guess. This allowed emeto drop the embedded jquery copy I used to have in the shak repository, and since then I was able to improve the build to produce an output that is identical, except for a build timestamp inside a comment and a few empty lines, to the one produced by upstream, without using grunt (.
- Rails 4.2 in unstable: in order to support Diaspora (currently in experimental), and an upcoming Gitlab package (WIP). This requires quite some updates, NEW packages, and also making sure that Redmine is updated to a new upstream version. I did a few updates as part of this effort:
- rails 2:4.2.3-3
- ruby-arel 6.0.3-1
- ruby-coffee-script 2.4.1-1
- ruby-coffee-script-source 22.214.171.124-1
- ruby-commander 4.3.5-1
- ruby-execjs 2.4.0-1
- ruby-globalid 0.3.6-1
- ruby-jbuilder 2.3.1-1
- ruby-jquery-rails 4.0.4-2
- ruby-minitest 5.8.0-1
- ruby-multi-json 1.11.2-1
- ruby-rack-test 0.6.3-1
- ruby-sass-rails 5.0.3-1
- ruby-spring 1.3.6-1
- ruby-sprockets 3.3.0-1~exp2
- ruby-sprockets-rails 2.3.2-1~exp1
- ruby-sqlite3 1.3.10-1
- ruby-turbolinks 2.5.3-1
- rerun (NEW), a tool to launch commands and restart them on filesystem change. Very useful when writing sinatra/rack applications.
- vagrant: new upstream relaese, supporting VirtualBox 5.0
- pinpoint: new upstream release, ported to clutter-gst-3.0
- chake: new upstream release
- gem2deb: new release with several improvements, and a bug fix followup
- chef: fix installation of initscripts
- pry: fixed imcompatibility with new ruby-slop (RC bug)
- foodcritic: fixed test suite run during build (RC bug)
- library updates:
- ruby-hashie (2 RC bugs)
- ruby-listen: new upstream release, fixed test suite (RC bug)
- ruby-rspec-retry: new upstrean release, fixed test suite (RC bug)
- ruby-dbf: new upstream release (sponsored, work by Christopher Baines)
- ruby-bootstrap-sass: new upstream release + fixed to work on non-Rails apps
- ruby-rails-dom-testing (NEW, dependency for rails 4.2)
- ruby-rails-deprecated-sanitizer (NEW, dependency for rails 4.2)
- ruby-rmagick new upstream release
- ruby-uglifier new upstream release
- ruby-cri (RC bug)
A week ago, we concluded our biggest DebConf ever! It was a huge success.
We are overwhelmed by the positive feedback, for which we’re very grateful. We want to thank you all for participating in the talks; speakers and audience alike, in person or live over the global Internet — it wouldn’t be the fantastic DebConf experience without you!
Our very own designer Valessio Brito made a lovely video of impressions and images of the conference.Your browser does not support the video tag.
To share a sense of the scale of what all of us accomplished together, we’ve compiled a few statistics:
- 555 attendees from 52 countries (including 28 kids)
- 216 scheduled events (183 talks and workshops), of which 119 were streamed and recorded
- 62 sponsors and partners
- 169 people sponsored for food & accommodation
- 79 professional and 35 corporate registrations
We’re collecting impressions from attendees as well as links to press articles, including Linux Weekly News coverage of specific sessions of DebConf. If you find something not yet included, please help us by adding links to the wiki.
We tried a few new ideas this year, including a larger number of invited and featured speakers than ever before.
On the Open Weekend, some of our sponsors presented their career opportunities at our job fair, which was very well attended.
And a diverse selection of entertainment options provided the necessary breaks and ample opportunity for socialising.
On the last Friday, the Oscar-winning documentary “Citizenfour” was screened, with some introductory remarks by Jacob Appelbaum and a remote address by its director, Laura Poitras, and followed by a long Q&A session by Jacob.
DebConf15 was also the first DebConf with organised childcare (including a Teckids workshop for kids of age 8-16), which our DPL Neil McGovern standardised for the future: “it’s a thing now,” he said.
The participants used the week before the conference for intensive work, sprints and workshops, and throughout the main conference, significant progress was made on Debian and Free Software. Possibly the most visible was the endeavour to provide reproducible builds, but the planning of the next stable release “stretch” received no less attention. Groups like the Perl team, the diversity outreach programme and even DebConf organisation spent much time together discussing next steps and goals, and hundreds of commits were made to the archive, as well as bugs closed.
DebConf15 was an amazing conference, it brought together hundreds of people, some oldtimers as well as plenty of new contributors, and we all had a great time, learning and collaborating with each other, says Margarita Manterola of the organiser team, and continues: The whole team worked really hard, and we are all very satisfied with the outcome. Another organiser, Martin Krafft adds: We mainly provided the infrastructure and space. A lot of what happened during the two weeks was thanks to our attendees. And that’s what makes DebConf be DebConf.
Our organisation was greatly supported by the staff of the conference venue, the Jugendherberge Heidelberg International, who didn’t take very long to identify with our diverse group, and who left no wishes untried. The venue itself was wonderfully spacious and never seemed too full as people spread naturally across the various conference rooms, the many open areas, the beergarden, the outside hacklabs and the lawn.
The network installed specifically for our conference in collaboration with the nearby university, the neighbouring zoo, and the youth hostel provided us with a 1 Gbps upstream link, which we managed to almost saturate. The connection will stay in place, leaving the youth hostel as one with possibly the fastest Internet connection in the state.
And the kitchen catered high-quality food to all attendees and their special requirements. Regional beer and wine, as well as local specialities, were provided at the bistro.
DebConf exists to bring people together, which includes paying for travel, food and accomodation for people who could not otherwise attend. We would never have been able to achieve what we did without the support of our generous sponsors, especially our Platinum Sponsor Hewlett-Packard. Thank you very much.
See you next year in Cape Town, South Africa!
COPYFILE DEBIAN EXEC A DEBAUTO EXEC A
COPYFILE PARMFILE DEBIAN A PARMFILE DEBAUTO A
Now edit DEBAUTO EXEC A and replace the DEBIAN in 'PUNCH PARMFILE DEBIAN * (NOHEADER' with DEBAUTO. This will load the alternate kernel parameters file into the card reader, while still loading the original kernel and initrd files.
Replace PARMFILE DEBAUTO A's content with this (note the 80 character column limit):
Replace <IPADDR>, <GW>, and <FIRST-DNS> to suit your local network config. You might also need to change the netmask, which I left in for clarity about the format. Adjust the device address of your OSA network card. If it's in layer 3 mode (very likely) you should set layer2=false. Note that mixed case matters, hence you will want to SET CASE MIXED in xedit.
Then there are the two URLs that need to be changed. The authorized_keys_url file contains your SSH public key and is fetched unencrypted and unauthenticated, so be careful what networks you traverse with your request (HTTPS is not supported by debian-installer in Debian).
preseed/url is needed for installation parameters that do not fit the parameters file - there is an upper character limit that's about two lines longer than my example. This is why this example only contains the bare minimum for the network part, everything else goes into this preseeding file. It file can optionally be protected with a MD5 checksum in preseed/url/checksum.
Both URLs need to be very short. I thought that there was a way to specify a line continuation, but in my tests I was unable to produce one. Hence it needs to fit on one line, including the key. You might want to use an IPv4 as the hostname.
To skip the initial boilerplate prompts and to skip straight to the user and disk setup you can use this as preseed.cfg:
d-i debian-installer/locale string en_US
d-i debian-installer/country string US
d-i debian-installer/language string en
d-i time/zone US/Eastern
d-i mirror/country manual
d-i mirror/http/mirror string httpredir.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
I'm relatively certain that the DASD disk setup part cannot be automated yet. But the other bits of the installation should be preseedable just like on non-mainframe hardware.
"The advantages of variables in Drupal 7 is they're all loaded into memory. The disadvantages of variables in Drupal 7 is they're all loaded into memory".
With this, Károly Négyesi ('chx'), opened his Storing Data with Drupal 8 workshop at Drupalaton to a standing room only crowd - half whom chuckled knowingly, with the rest following shortly after once they'd had a little time to think about this technical juxtaposition.
It is this pull no punches attitude which made chx's workshop, for me at least, the highlight of the event - I like to know what is wrong, why it is wrong, and what we can or are doing to fix it. It was different when I'd asked the Hungarian, now living in Vancouver, to keynote our local DrupalCamp Brighton held back in January. In a departure from his normal techie talks, chx delivered a highly enjoyable and enlightening session talking about the profession of programming and how computer game music was the best type of music to listen to when coding. Here at Drupalaton though, we were back to the nitty and gritty of Drupal's internals.
Chx proceeded to give an excellent overview of the different subsystems of Drupal and how they'd changed from version 7 to 8. Drupal 8 brings together a lot of pieces which were fragmented in Drupal 7 - for example Drupal's Entity API where most of the functionality existed in a contributed module. By bringing it all together into core Drupal and providing APIs it improves maintainability through common knowledge, translation, access, performance and testing. He went on to cover the improved data stores in Drupal 8, for example the state API to store information such as when maintenance updates were last run using cron, a private tempstore for functionality like autosave data and the new quick edit functionality, and a shared tempstore for things like views.
After an intense hour and a half and a short break chx for a moment thought he'd lost half the audience but most soon filtered back in once their brains had a little more time for the coffee to take effect! The workshop continued with much information about how to use these new APIs, and how all configuration was now in YAML files then loaded into the database at runtime. In previous versions of Drupal, many settings were stored in the database and work-arounds such as using the Features module were used to extract settings. These approaches had varying results - as someone coming from an Enteprise Java world where storing settings in files is the norm I for one am very excited about this as it provides far more easier development, deployment and versioning. Features still exist in Drupal 8, but for their original purpose - to create exportable features of functionality.Contributing to Drupal can be tiring!
After the workshop I made my way to the only air-conditioned room for what felt like miles around and managed to catch this picture of chx resting - with lots of talk recently about 'Headless Drupal' I thought the angle was quite funny.
I'd gone there to do some more work on Drupal 8 Rules - the fifth most popular module for Drupal which enables people to create functionality through the user interface, for example to send an email when someone adds a comment, or to apply a certain tax rate for a certain product in a certain country.
Although I'd previously worked on a few core issues for Drupal 8 like splitting up the 'password strength' and 'password matches' code and cleaning up some unused variables, I'd not really found an area I could focus on, but then I attended Drupalaton last year where there was a whole day of Rules, with a morning workshop bringing people up to speed on Rules in Drupal 8 and an afternoon spent focusing on how you could get involved and contribute.
For me, the workshop format is what makes Drupalaton so special - most other DrupalCamps have half-to-an-hour long sessions where you get an overview of something but don't really get time to delve in deep. I wanted to learn Drupal 8, and helping Rules out where I could to me seemed like a pretty good way of learning it. Since then I've helped update a few Rules Actions, Conditions, and Events to Drupal 8 and although I haven't done half as much as I've wanted to, it feels great to be learning lots and hopefully helping progress things a little bit.Cruise Party
After spending the afternoon learning more about exporting, importing, and deploying configuration management in Fabian Bircher's workshop (slides and a great blog post from Fabian here), it was time for the yearly Drupalaton Cruise Party.
The cruise party is an excellent chance to chill out, see a little more of Central Europe's largest lake, talk Drupal, and enjoy a most wonderful sunset!Behold Behat!
The next morning, after I'd managed to complete 30 lengths of the swimming pool and a 20km cycle for the second day in a row (yes, I know, shocker, but the Sun makes me a different person than I am in the dreary rainy grey UK!) it was workshop time again - this morning's being 'From User Story to Behat Test' with Pieter Frenssen.
I'm almost as excited about using Behat as I am about Drupal 8 - after many years of discussions about how functionality X worked, or whether feature X and function Y was included in the original quote, this way of defining requirements provides an excellent interface all project stakeholders can be a part of, with a solid technical backing enabling tests to be performed against sets of Plain English user stories.
The workshop was to go through setting up Behat with Drupal 8 which was great as I'd spent some time recently getting it set up but lacked in-depth understanding of the setup which Pieter's workshop helped enormously with so now I'll be using it on all my projects. There's plenty of info online about Behat so I won't go into more details here.Grill Party
The afternoon was spent discussing using Drupal as a prototyping tool with Kristof Van Tomme László Csécsy and finding out about Pretotyping. This is of particular interest to me as I continue my work on abilit.es - a topic for another blog I think!
In the evening the lovely Drupalaton organising team arranged a Grill Party - this didn't happen last year but was great as was right next to the hotel and means we weren't dispersed across many different places.
As well as great food a few people had been working on some lyrics and provided lots of entertainment with a fab Drupalaton song!So long Drupalaton, till next year! Sunday was fairly quiet, no sessions were on but the sprint room was open so I interspersed some rules work with some cycling. After a few days of the hotel's all-inclusive menu I wasn't expecting to lose any weight, but certainly enjoyed getting the metabolism up and running again nicely! In 36 degrees cycling was not easy but certainly fun and I'm glad I took my Brompton on its first trip abroad - I'd been wanting an opportunity to test out the Vincita Sightseer bag and it did not disappoint. I look forward to taking my bike to more places around the world - you definitely get to see a lot more of a place than just by foot and with the bag going into normal hold it doesn't cost any extra than normal baggage. Monday finally came round and it was time to make the journy back to the UK via Budapest. The train to Budapest is always an experience - it stops *everywhere* and takes three hours to go just over a hundred miles, has no air conditioning, and wouldn't let me on without buying a 'boading pass' even though I had a ticket already. Luckily it was not much and I had a small amount of local currency to cover it otherwise I would've been stuck! Felt great to cycle out of the hotel down to the train station the pack the bike up in its own bag (it fits on the back rack when riding) and I can't wait till I can do it all again, perhaps DrupalCon Barcelona, although I'm not a huge fan of cycling in cities & DrupalCon is quite intense so perhaps not, we'll see! A big thank you to all those who had something to do with this lovely event, from organising to speaking, sponsoring, and of course attending, am already looking forward to next year's holiday, erm - I mean, Drupalaton! tags: DrupalatonDrupal 8Drupal PlanetPlanet Drupal