Another on-my-the-journey-back blog post; this time from the Frankfurt Airport Train Station – my flight was delayed (if I knew that I could have watched the remaining Lightning Talks), and so was my train, but despite 5min of running through the Airport just not enough. And now that the free 30 Minutes of Railway Station Internet are used up, I have nothing else to do but blog...
Last week I was attending ICFP 2014 in Gothenburg, followed by the Haskell Symposium and the Haskell Implementors Workshop. The justification to attend was the paper on Safe Coercions (joint work with Richard Eisenberg, Simon Peyton Jones and Stephanie Weirich), although Richard got to hold the talk, and did so quite well. So I got to leisurely attend the talks, while fighting the jet-lag that I brought from Portland.
There were – as expected – quite a few interesting talks. Among them the first keynote, Kathleen Fisher on the need for formal methods in cars and toy-quadcopters and unmanned battle helicopters, which made me conclude that my Isabelle skills might eventually become relevant in practical applications. And did you know that if someone gains access to your car’s electronics, they can make the seat belt pull you back hard?
Stefanie Weirich’s keynote (and the subsequent related talks by Jan Stolarek and Richard Eisenberg) on what a dependently typed Haskell would look like and what we could use it for was mouth-watering. I am a bit worried that Haskell will be become a bit obscure for newcomers and people that simply don’t want to think about types too much, on the other hand it seems that Haskell as we know it will always stay there, just as a subset of the language.
Similarly interesting were refinement types for Haskell (talks by Niki Vazou and by Eric Seidel), in the form of LiquidTypes, something that I have not paid attention to yet. It seems to be a good way for more high assurance in Haskell code.
Finally, the Haskell Implementors Workshop had a truckload of exciting developments in and around Haskell: More on GHCJS, Partial type signatures, interactive type-driven development like we know it from Agda, the new Haskell module system and amazing user-defined error messages – the latter unfortunately only in Helium, at least for now.
But it’s not the case that I only sat and listened. During the Haskell Implementors Workshop I held a talk “Contributing to GHC” with a live demo of me fixing a (tiny) bug in GHC, with the aim of getting more people to hack on GHC. The main message here is that it is not that big of deal. And despite me not actually saying much interesting in the talk, I got good feedback afterwards. So if it now actually motivates someone to contribute to GHC, I’m even more happier.
And then there is of course the Hallway Track. I discussed the issues with fusing a left fold (unfortunately, without a great solution). In order to tackle this problem more systematically, John Wiegley and I created the beginning of a “List Fusion Lab”, i.e. a bunch of list benchmark and the possibility to compare various implementations (e.g. with different RULES) and various compilers. With that we can hopefully better assess the effect of a change to the list functions.
PS: The next train is now also delayed, so I’ll likely miss my tram and arrive home even later...
PPS: I really have to update my 10 year old picture on my homepage (or redesign it completely). Quite a few people knew my name, but expected someone with shoulder-long hair...
PPPS: Haskell is really becoming mainstream: I just talked to a randomly chosen person (the boy sitting next to me in the train), and he is a Haskell enthusiast, building a structured editor for Haskell together with his brother. And all that as a 12th-grader...
Back in January I changed jobs. This took me longer to decide to do than it should have. My US visa (an L-1B) was tied to the old job, and not transferable, so leaving the old job also meant leaving the US. That was hard to do; I'd had a mostly fun 3 and a half years in the SF Bay Area.
The new job had an office in Belfast, and HQ in the Bay Area. I went to work in Belfast, and got sent out to the US to meet coworkers and generally get up to speed. During that visit the company applied for an H-1B visa for me. This would have let me return to the US in October 2014 and start working in the US office; up until that point I'd have continued to work from Belfast. Unfortunately there were 172,500 applications for 85,000 available visas and mine was not selected for processing.
I'm disappointed by this. I've enjoyed my time in the US. I had a green card application in process, but after nearly 2 years it still hadn't completed the initial hurdle of the labor certification stage (a combination of a number of factors, human, organizational and governmental). However the effort of returning to live here seems too great for the benefits gained. I can work for a US company with a non-US office and return on an L-1B after a year. And once again have to leave should I grow out of the job, or the job change in some way that doesn't suit me, or the company hit problems and have to lay me off. Or I can try again for an H-1B next year, aiming for an October 2015 return, and hope that this time my application gets selected for processing.
Neither really appeals. Both involve putting things on hold in the hope longer terms pans out as I hope. And to be honest I'm bored of that. I've loved living in America, but I ended up spending at least 6 months longer in the job I left in January than I'd have done if I'd been freely able to change employer without having to change continent. So it seems the time has come to accept that America and I must part ways, sad as that is. Which is why I'm currently sitting in SFO waiting for a flight back to Belfast and for the first time in 5 years not having any idea when I might be back in the US.
Before I start a short listing of (some of) the stuff I did during Debconf 14, I’d like to say how much I enjoyed everyone there. You guys (all of you, really!) are just awesome, and it’s always a real pleasure to see you all, each time.
Anyway, here’s a bits of the stuff I did.
1/ packaging of Google Cloud Engine client tools.
Thanks to the presence of Eric and Jimmy, I was able to finish the work I started at Debconf 13 last year. All python modules are packaged and uploaded. Only the final client (the “gcloud” command line utility) isn’t uploaded, even though it’s already packaged. The reason is that this client downloads “stuff” from internet, so I need to get the full, bundled, version of it, to avoid this. Eric gave me the link, I just didn’t have time to finish it yet. Though the (unfinished) package is already in the Git in Alioth.
2/ Tasksel talks
We discussed improvements in Tasksel both during the conference, and later (in front of beers…). I was able to add a custom task on a modified version of the Tasksel package for my own use. I volunteered myself for adding a “more task” option in Tasksel for Jessie+1 because I really would like to see this feature, and nobody raised hand, but honestly, I have no idea how to do it, and therefore, I’m not sure I’ll be able to do so. We’ll see… Anyway, before this happen, we must make sure that we know what kind of tasks we want in this “more tasks” screen, otherwise it’d be useless work for nothing. Therefore, I have setup a wiki page. Please edit the page and drop your ideas there. I’ve already added entries for desktops and Debian blends, but I’m sure there’s more that we could add.
3/ Custom Debian CD
I started experimentation on building my own Debian Wheezy CD image (well, DVD, since the resulting image is nearly 2GB). This was fun, but I am still having the issue that the installer fails to install Dash, so the CD is still unusable. I’ll try to debug it. Oh… I nearly forgot… “of course”, the ISO image aims at including all OpenStack Icehouce packages backported to Wheezy, and the goal was to include the above custom Tasksel task, with an “OpenStack proxy node” task, and a “OpenStack compute” task. Let’s hope I can figure out what the issue is, and finally release it.
4/ OpenStack talk
Nothing special to say, just watch the video. I hope my talk was interesting enough. Of course, after watching myself, I hate everything I see, and would like to correct so many mistakes, but that’s the usual, I guess.
5/ Some RC fixing
Thanks to the nice work of our DPL rebuilding all the archive, I had to fix a couple of FTBFS issues on my own packages. 3 of them have been easy to fix (2 missing build-dependencies which I missed because my automated build environment has them by default, and a unit test failure), I still don’t understand what’s going on with Ceilometer. I also NMU-ed transmission (switching from 2.82 to 2.84, as upstream had the bugfix, and current maintainer was not responsive) which was the last blocker for the miniupnpc transition to Jessie. After the 5 days delay of the upload, it went in Sid, then migrated to Jessie, together with the miniupnpc library. I also fixed a trivial RC bug with python3-webob.
6/ Python team meeting
It was nice to see everyone, and hopefully, we’ll soon implement what we discussed. I hope to start migrating some of my OpenStack dependencies to the team once we move to Git (though please don’t expect this to happen before the Juno release, which keeps me very busy these days).
There’s probably more stuff which I did during Debconf 14 (hacking or otherwise), but either it’s not worth sharing, or I can’t remember… :)
DrupalCon is the heart and soul of the Drupal Community. Thousands of us have attended over the past 9 years. Many of us, myself included, have had life-changing experiences at DrupalCon. How did DrupalCon change your life? Now is the time to share your story with thousands of your closest friends! ... or the Drupal community.
What is this for? It's for the "Prenote" session at DrupalCon Amsterdam. Every DrupalCon, Jam and I collaborate to show some aspect of the Drupal experience through humor, drama, song, cheesy costumes, and famous Drupal guest stars. We'd like to include some of these stories in Amsterdam!
Thanks for sharing!Which DrupalCon? * Austin, 2014 Prague, 2013 Portland, 2013 Sydney, 2013 Munich, 2012 Denver, 2012 London, 2011 Chicago, 2011 Copenhagen, 2010 San Francisco, 2010 Paris, 2009 Washington, D.C., 2009 Szeged, 2008 Boston, 2008 Barcelona, 2007 Sunnyvale, 2007 Brussels, 2006 Vancouver, 2006 Amsterdam, 2005 Portland, 2005 Antwerp, 2005 Which DrupalCon changed your life? Tell your story * What happened that changed your life? Was it meeting a specific person? Attending a session? Being in the right place at the right time? What aspect of your life now would not have been the same if you hadn't attended DruaplCon. Will you be attending DrupalCon Amsterdam? * Yes No E-mail * Skype or phone How can we contact you? What's your Skype ID or phone number?
I haven't made one of these in a long time, so I have some catching from random purchases to do, which includes a (repurposed) nice parting gift from my previous employer and a trip to Powell's since I was in the area for DebConf14. This also includes the contents of the Hugo voter's packet, which contained a wide variety of random stuff even if some of the novels were represented only by excerpts.
John Joseph Adams (ed.) — The Mad Scientist's Guide to World
Domination (sff anthology)
Roger McBride Allen — The Ring of Charon (sff)
Roger McBride Allen — The Shattered Sphere (sff)
Iain M. Banks — The Hydrogen Sonata (sff)
Julian Barnes — The Sense of an Ending (mainstream)
M. David Blake (ed.) — 2014 Campbellian Anthology (sff anthology)
Algis Budrys — Benchmarks Continued (non-fiction)
Algis Budrys — Benchmarks Revisited (non-fiction)
Algis Budrys — Benchmarks Concluded (non-fiction)
Edgar Rice Burroughs — Carson of Venus (sff)
Wesley Chu — The Lives of Tao (sff)
Ernest Cline — Ready Player One (sff)
Larry Correia — Hard Magic (sff)
Larry Correia — Spellbound (sff)
Larry Correia — Warbound (sff)
Sigrid Ellis & Michael Damien Thomas (ed.) — Queer Chicks Dig Time Lords (non-fiction)
Neil Gaiman — The Ocean at the End of the Lane (sff)
Max Gladstone — Three Parts Dead (sff)
Max Gladstone — Two Serpents Rise (sff)
S.L. Huang — Zero Sum Game (sff)
Robert Jordan & Brandon Sanderson — The Wheel of Time (sff)
Drew Karpyshyn — Mass Effect: Revelation (sff)
Justin Landon & Jared Shurin (ed.) — Speculative Fiction 2012 (non-fiction)
John J. Lumpkin — Through Struggle, the Stars (sff)
L. David Marquet — Turn the Ship Around! (non-fiction)
George R.R. Martin & Raya Golden — Meathouse Man (graphic novel)
Ramez Naam — Nexus (sff)
Eiichiro Oda — One Piece Volume 1 (manga)
Eiichiro Oda — One Piece Volume 2 (manga)
Eiichiro Oda — One Piece Volume 3 (manga)
Eiichiro Oda — One Piece Volume 4 (manga)
Alexei Panshin — New Celebrations (sff)
K.J. Parker — Devices and Desires (sff)
K.J. Parker — Evil for Evil (sff)
Sofia Samatar — A Stranger in Olondria (sff)
John Scalzi — The Human Division (sff)
Jonathan Straham (ed.) — Fearsome Journeys (sff anthology)
Vernor Vinge — The Children of the Sky (sff)
Brian Wood & Becky Cloonan — Demo (graphic novel)
Charles Yu — How to Live Safely in a Science Fictional Universe (sff)
A whole bunch of this is from the Hugo voter's packet, and since the Hugos are over, much of that probably won't get prioritized. (I was very happy with the results of the voting, though.)
Other than that, it's a very random collection of stuff, including a few things that I picked up based on James Nicoll's reviews. Now that I have a daily train commute, I should pick up the pace of reading, and as long as I can find enough time in my schedule to also write reviews, hopefully there will be more content in this blog shortly.
The latest rage in the Content Management world is the idea of a “decoupled CMS.” That is, rather than having a single monolithic system that handles everything from content entry to management to display and theming in one program spread, that responsibility is assigned to different systems: one that is really really good at content storage, one that's really really good at content management, one that's really really good at display and theming, etc.
At the same time, there has been a huge push for web services in almost every market. If you want content to be available anywhere besides an HTML page, then your answer is web services.
Drupal 8 will make huge strides in this area, but alas it's not out yet. Fortunately the answer to the second problem is the first; it is entirely possible to build a solid, scalable, performant RESTful web service with Drupal 7 by decoupling Drupal from the web service.
Recently, Palantir.net did exactly that for a major media client, video hosting service Ooyala, and it really drove home both the power of web services and the potential of a decoupled architecture.The Problem
Ooyala wanted us to build a video curation service for one of their customers.
The first part of the problem was that the customer had data that was regularly updated, but this existing data source was incomplete, occasionally unreliable, and could be enriched with additional metadata, so human management was required before it could be used in the desired context (to describe video content in end-user-facing video-on-demand applications). The solution to this particular problem was the CMS.
The second part of the problem was getting the data in the desired context: highly interactive video-on-demand applications where users could purchase access to individual movies or episodes, collections of movies, seasons of a show, or other arbitrary groupings. The solution here was a REST API separated from the CMS.
Not complex enough? Add in a requirement to merge in data from a third-party video service to compensate for incomplete data.
I was given a problem: the (somewhat usual) error message showed up Warning: Invalid argument supplied for foreach() in element_children() (line 6396 of common.inc).. Trying to debug it with the usual print-and-see is entirely and totally hopeless. If you print just $elements from element_children? You get picture. If you try to print the backtrace? It's impossibly big. One hope is printing the backtrace with DEBUG_BACKTRACE_IGNORE_ARGS and then manually opening up every step in the rather big backtrace. Or you can set a conditional breakpoint on the problematic line with !is_array($elements) as a condition and immediately have access to the backtrace in a very nice structured/collapsed format where you can see the parent, grandparent etc render arrays, reach every caller with one click and eventually find this in a template:
<?php foreach ($content as $key => $item): ?>
<?php print render($item); ?>
I have worked for years without a debugger -- finding this without is really frustrating and slow. Finding it with one is a matter of minutes. And PhpStorm debugger is literally zero config.
You know how every box of LEGO® comes with that pretty picture on the front of what it’s supposed to look like at the end...and how you might build it that way once, just once, to see how it looks, before tearing it down and making a spaceship out of the oxcart? It’s the same with websites. We all start off with this great picture in our mind of what a website will look like. And yes, the website might actually make it to that glorious utopia...until someone decides, no, they don’t actually like that thing there. No, this should be bigger. Or smaller. “I know I asked for an oxcart, but please tear it down and make a spaceship out of it.”
At 4Site, when we go about ‘designing’ a website, we think of the website as a sum of parts--planning ahead to how the site’s going to look at the end, how it’s going to feel. It’s not just a set of fields that then get some css (or scss!) and js/php applied. It’s something that’s eventually going to be touched by dozens, hundreds, thousands of people, both as users and as content managers behind the scenes. It’s something that needs to be flexible. Something that can move on the fly, something that can be used on a wide-variety of platforms, in a variety of uses, by a variety of users. Something easy. Something modular.
That’s the beauty of Drupal and other modular CMS. You can take these pieces and make damn near anything out of them. So where is this metaphor leading? You need a great workflow to start, a great system to work within. You need your giant tub of pieces.
Once you have your basic “what do we need?” question answered, you can expand on what else you might want. The beauty of Drupal is that you have this extraordinarily flexible system--you can modify your content types on the fly. You can add taxonomies if you want to suggest related content to users. Your layouts are flexible, so you can use them to organize all types of content, albeit with a few minor tweaks. Add some fields to your content types and you can build a brand new view. Add some taxonomy terms and you can link your leaders together and allow them to connect with people that share the same interests.
The point of this is that you need the pieces first. To build a spaceship, you need to start with the 4x4 squares, the crystal cylinder things, and the LEGO® head with the 70s hair. It’s the same with websites. Karen McGrane says to use chunks, not blobs. So you break down your content into consistent and logical pieces. And that will give you the most flexibilty on the back end to organize and display that information, for different audiences, on different platforms, and over time as your needs evolve.
What don’t you want to do? You don’t cram every last bit of information you have into a WYSIWYG, because if you need it later, too bad, you’re writing it again. That would be akin to gluing your LEGO® together. If you ever want to use those pieces for anything else, too bad.
If you had a custom field or post type, you’ve got that piece already at your fingertips, ready for use wherever and whenever you want. You need that information later? No worries, it’s a custom post type. It’s a taxonomy reference. It’s right there in front of you. You decide you want your author on something else? It’s a term reference. An entity reference. A node reference.
So go build your castle or spaceship, your saloon or alien moon-base. Just make sure you have your big tub of pieces first, in case you decide later you want to add a mean laser cannon on the top. Or a Mars rover. I don’t know. You're the designer.
We just provide the pieces.
This blog post is an extrapolation of a session I presented at FuseCon 2014. Please let us know if you'd like any help sorting out your content into manageable, reuseable pieces.
The Drupal community's commitment to cooperation and sharing is one of its defining characteristics, and the Drupal Extension to Behat and Mink is a powerful example of that cooperation in action. It is not a Drupal module. Rather, it extends the functional testing framework of Behat and Mink in order to provide Drupal-specific functionality. You'll find its detailed documentation at Read the Docs.
The extension helps site builders automate tests for Drupal 6, 7, and 8 without having to write custom code for common Drupal features. It currently provides support in three major areas: setting up test data, mapping page regions, and auto-discovery of Behat tests provided by modules and themes.Setting Up Test Data
To test any Drupal site, at some point you'll need to set up test data. You can do this in a blackbox fashion, using pre-built steps to create a user – and log in via the interface – then fill out the appropriate form. This approach takes time to write, time to run, and becomes tedious to read. Adding data in this detailed way is warranted at times, but you're typically better off inserting data as a single step in the Given section of your scenario. The Drupal extension provides a driver system to help you.Blackbox
The default driver assumes you have no privileged access to the Drupal site. All your data setup has to take place through the normal user interface. The blackbox driver exists so you can benefit from other Drupal Extension features.Drupal API
When your tests run on the same machine as your Drupal installation, you can use the Drupal API directly to create users, nodes, taxonomy vocabularies, and taxonomy terms, without writing any supporting PHP code and without the tedium of blackbox steps. To do so, you configure your testing instance to point at the local path to the Drupal site, tag the scenario with @api, and then use pre-built steps.@api Scenario: Given I am viewing “article” node with the title “Drupal API”
Yesterday WordPress released version 4.0 or “Benny” of WordPress. I have now downloaded it and packed up for Debian users. The files just hit the ftp-master a few minutes ago and will then be distributed out to the various Debian mirrors.
The upgrade should go smoothly but you will probably need to upgrade the twentytwelve/twentyfourteen themes if you have them installed. It seems release 4.0 they also updated these themes.
My next Debian task for wordpress is to re-examine the permissions and locations of wp-content to see if we can have something that permits online updates of the plugins and themes but is still FHS compliant. I’ve also had some people report they have some installation problems, mainly around configuration and directories so let’s see if that can get fixed too.
You know you're doing a fun gig when you get to do things like the above on billable hours.
Full story: writing a test suite for reading data from eID cards. It makes sense to decode the JPEG data which you read from the card, so that you know there's no error in the lower-layer subroutines (which would result in corruption). And since we've decoded it anyway, why not show it in the test suite log? Right.
With the 2014 European Drupal conference fast approaching, the Ixis team members attending this year have scoured the schedule for their must see see sessions this year, and why.
For the Developers
Content Staging in Drupal 8 (Wednesday 10:45) - moving content about from dev to production has always been a huge pain in Drupal, so hopefully we'll get a chance to see how this might work in Drupal 8 and finally put an end to the question of when and where the client should start adding their conent during the development phase.
DrupalCon Amsterdam is less than one month away! I'm excited to meet up with all the Frontend developers who are coming to learn new things from each other.
Ruben and I have worked really hard as chairs of the Frontend track. We defined the track theme Futuristic Tools and Techniques. We aimed to select the right sessions with the best variety and balance that also flow together into one cohesive track.The State of Frontend
We wanted to kick off the track with a big keynote-style history lesson and insight into the future of Frontend development. Have you ever felt overwhelmed by the ever-changing evolution of front-end development? Me to. After David and Brian's excellent session at DrupalCon Austin, My brain is Full, we really wanted them to continue that theme and aim for something bigger.
David and Brian are also working really hard to create an introduction to the entire track, pointing signposts towards other sessions in that track that can fill in more in-depth knowledge about particular subjects. I would encourage everyone with an interest in Frontend development to attend the session if only to better understand which sessions in the Frontend track are right for them.
We also have a few session that compliment and feed in to each other. Here are a few sessions we think work really well together.Managing Complex Projects with Design Components & Layout Design Patterns & GSS - The CSS Layout System that's 2 Generations Ahead
John Albin led the initiative to bring OOCSS-style CSS standards into Drupal 8, so I'm inclined to say he knows a thing or two in this area. Managing Complex Projects With Design Components, is a great introduction to to whys, hows, and gotchas of writing better CSS.
After you know your component variants from your component modifiers (spoilers!), you can take a really deep dive into another color of the SMACSS rainbow with Layout Design Patterns. I really like the structure of this walk, that covers the foundations of CSS layouts, grid systems, and implementation in Drupal.
You think you know layouts? Maybe you think flexbox is cool? Prepare to get your *mind blown* by Alan Burke in GSS - The CSS Layout System that's 2 Generations Ahead. A grid system that is unlike any other.
*I've been informed that the Drupal Association™ does not encourage nor condone the projection or discharge of any grey matter. Goggles are not provided and any stain susceptible clothing is worn at the attendees own risk.Getting a Clue at the Command Line & Automated Frontend Testing
As a designer/front-end dev, I've never had a formal education on the command line, it's always been something I've picked up as I've needed it. It used to scare me. I'm so happy Emma Jane is talking on the command line in Getting a CLUE at the Command Line in the same vein as her introduction to Git at DrupalCon Prague last year. The command line is an immensely powerful and productive tool and I'm looking forward to picking up a few tips.
Now that you no longer fear the command line, you'll definitely be better equipped to take in Chris's session Automated Frontend Testing. He's already told me that he won't hold back, and I know he has little fear for live demos. This session is going to be jam packed with useful information on how to keep your Frontend looking good and loading fast, using some automated scripts.
We also have some great sessions on some really focused areas. I can't imagine walking out of any of these sessions without my brain sparkling with new knowledge and ideas.Getting Content to a Phone in less than 1000ms
1000ms. The holy grail of performance. Can it be done? Or is it just fantasy?
I'm really glad Ian submitted this talk. It's great to have a performance talk with a focused goal. Performance is still as important as ever.The future of Drupal and CSS
HTML5 and CSS3 is so last decade. No one wants your border radius any more. If you hate the idea of trawling through W3C specifications then this is a good talk for you. Preston presents another forward facing talk that we can also make use of today, a nice roundup of where browser technology is heading.
If you love the idea of trawling through W3C specifications then I can't help you.Building Modern Web Applications with Ember.js and Headless Drupal
Ember.js is an excellent framework with a vibrant community. There are many frameworks out there and Ember.js is only one of them, but we felt it's important for DrupalCon to be introducing new perspectives and ideas. I'm really glad Mikkel is covering both sides of an Ember.js project using Drupal 7 or 8.
Lewis Nyman (LewisNyman)
DrupalCon Amsterdam Frontend Track Chair
Plugins play an important role in Drupal 8, and understanding how the entire plugin system works will help us better understand how, when, where, and why we use plugins.
This is the second post in my Making A Drupalcamp Happen series. I've been involved in camps for about 7 years and recently was the main project manager for Colorado. The first post was around tools, coordination and management. This post is really focused on tasks and when they need to be done to not go crazy.
There are certain things that need to happen every year. The earlier you can sort them out, the easier things will be as you approach the deadline of your event. So, I've listed some tasks below along with some rough timing and notes on some of the items. This is by no means an exhaustive list and the timing might be a little off on tasks, but I think it does give a sense of task, scope, and order.drupaldrupalcampevent planningtasks