Feed aggregator

Tyler Frankenstein: Build a Pebble Application to Record a Geo Position in Drupal

Planet Drupal - Fri, 03/01/2014 - 02:32

This tutorial describes how to build a Pebble "smart watch" application for a Drupal website using the PebbleKit Javascript Framework.

The application itself will be fairly simple. It will wait for you to click the "Select" button on the Pebble watch. Once the button is clicked, the app will grab your current latitude and longitude coordinates. It will then use the Services module to create an Article node and save the coordinates onto a Geofield on your Drupal site.

Let's get started!

Categories: Elsewhere

Steinar H. Gunderson: Movit FOSDEM time slot

Planet Debian - Fri, 03/01/2014 - 02:17

Happy new year!

My FOSDEM talk about Movit, my high-quality, high-performance GPU video filter library, has been accepted and given a time slot. So if you are visiting, feel free to come at Sunday 11:00 in the graphics devroom (H.1301); supposedly, the room can take 200 visitors, but if half as many as that showed up (this isn't too early, right? right? :-) ), I'd be delighted.

More information on the schedule page. I'll be happy to chat with anyone interested before or after the talk, of course.

Categories: Elsewhere

Dirk Eddelbuettel: New BH release 1.51.1-4

Planet Debian - Fri, 03/01/2014 - 02:16
A new release of the BH package is now on CRAN and its mirrors. BH provides (a sizeable subset of) the Boost library for C++, particularly the (large) parts delivered as pure template headers not requiring linking. See the BH page for more details.

This release comes from a rewritten build script for the package. We no longer drive the initial set of Boost libraries by the requirements of the bigmemory (and synchronicity) packages, but rather explicitly enumerate an equivalent set of Boost libraries. This ensures that these libraries are included completely. We also move the project repository to this GitHub repo.

The complete list changes follows below. Changes in version 1.51.0-4 (2014-01-01)
  • Rewritten main package creation script to no longer scan for what bigmemory and synchronicity use, but rather explicitly copy over an (equivalent) list of explicitly-enumerated Boost libraries

  • Repository moved from R-Forge to GitHub, scripts and layout adjusted accordingly

  • Besides the implicitly expanded coverage by including the complete libraries, we also expanded from math/distributions to all of math.

Courtesy of CRANberries, there is also a diffstat report for the most recent release.

Comments and suggestions are welcome via the mailing list or issue tracker still available via the package page at R-Forge.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

Categories: Elsewhere

Drupal.org frontpage posts for the Drupal planet: Drupal 7.25 released

Planet Drupal - Fri, 03/01/2014 - 01:48

Drupal 7.25, a maintenance release with numerous bug fixes (no security fixes) is now available for download. See the Drupal 7.25 release notes for a full listing.

Download Drupal 7.25

Upgrading your existing Drupal 7 sites is recommended. There are no major new features in this release. For more information about the Drupal 7.x release series, consult the Drupal 7.0 release announcement.

Security information

We have a security announcement mailing list and a history of all security advisories, as well as an RSS feed with the most recent security advisories. We strongly advise Drupal administrators to sign up for the list.

Drupal 7 includes the built-in Update Manager module, which informs you about important updates to your modules and themes.

There are no security fixes in this release of Drupal core.

Bug reports

Drupal 7.x is being maintained, so given enough bug fixes (not just bug reports), more maintenance releases will be made available, according to our monthly release cycle.


Drupal 7.25 contains bug fixes and small API/feature improvements only. The full list of changes between the 7.24 and 7.25 releases can be found by reading the 7.25 release notes. A complete list of all bug fixes in the stable 7.x branch can be found in the git commit log.

Update notes

See the 7.25 release notes for details on important changes in this release.

Known issues


Front page news: Planet DrupalDrupal version: Drupal 7.x
Categories: Elsewhere

Tim Retout: OpenVPN and easy-rsa

Planet Debian - Thu, 02/01/2014 - 21:56

One of those enlightenment moments that I should have had sooner: every time I have seen someone set up an OpenVPN VPN, they have generated all the certificates on the VPN server as root using easy-rsa. This is kind of strange, because you end up with an incredibly sensitive directory on the VPN server containing every private key for every client.

Another angle is whether you trust the random number generators used to create all these keys - does your hosting provider use a weak RNG?

Instead, you could set up your CA using easy-rsa on a separate machine - perhaps even air-gapped. Then private keys can be generated on each machine that wants to join the VPN, and the certificates can get signed by the CA and returned. (The easy-rsa package has been split out of the openvpn package in Debian unstable, which makes this more understandable.)

Is there a security benefit? You could argue that if your VPN server has been compromised, then you are already in trouble. But I'm thinking about a setup where I could run multiple VPN servers for redundancy, signed by the same CA - then if one server gets broken into, you could kill it without having to revoke all the client keys.

By the way, the default RSA key size used by easy-rsa is 1024 bits at the time of writing (fixed upstream: Debian bug #733905). This is simple to change, but you need to know to do it. One of the 30c3 lightning talks was about bettercrypto.org - a guide to which cryptography settings to choose for commonly used software.

Categories: Elsewhere

Acquia: 2013 Greatest Hits – "PHP is as secure as any other major language" – Anthony Ferrara

Planet Drupal - Thu, 02/01/2014 - 16:14

I met Anthony, aka @ircmaxell, for the first time at the PHP BeNeLux conference in early 2013. He was among the first people I spoke with on mic about PHP. Our conversation about PHP being secure was one of the seeds that grew into the "Power of PHP" series on Acquia.com, though you'll notice we were still calling it "PHP Myths" at the time. The series will be continuing in 2014, stay tuned to the Acquia podcast and the Acquia blog for more!

Categories: Elsewhere

Luke Faraone: Unstandardized standards are the worst: sendmail

Planet Debian - Thu, 02/01/2014 - 06:25
Implementing software to replace legacy systems is always a challenge, especially when you're dealing with a system with as much legacy as sendmail, which was first introduced as delivermail in 1979.ref

Each UNIX vendor, it seems, rewrote or heavily customized sendmail. This has lead to sometimes conflicting implementations.
Case in point: -tNormally, you invoke sendmail(8) with a series of arguments indicating the subject of a message, the recipients, etc. When invoked this way, the command expects a message on standard input, waits for EOF, and then sends your message along.

However, sometimes you don't want to have to fiddle with command-line parameters; you've already written a perfectly fine message with headers.

-t is generally passed to sendmail when you want to build a message envelope from an already-formatted message, with headers, etc. For example, if you had a file foo.txt with a body like this:
From: Luke Faraone
To: John Smith
Subject: Hello, world!

Hi there.
you could send the message with a simple invocation of cat foo.txt | sendmail -t. The system would take care of ensuring a Message-id was appended if appropriate, and queue the message to be sent. However, it is when you do slightly more complex invocations of sendmail that things get ambiguous.

It turns out that implementations differ on what exactly it means when you use -t in combination with naming destination addresses after the arguments to sendmail. exim4's documentation describes the situation in greater detail:
extract_addresses_remove_   argumentsUse: mainType: booleanDefault: trueAccording to some Sendmail documentation (Sun, IRIX, HP-UX), if any addresses are present on the command line when the -t option is used to build an envelope from a message’s To:, Cc: and Bcc: headers, the command line addresses are removed from the recipients list. This is also how Smail behaves. However, other Sendmail documentation (the O’Reilly book) states that command line addresses are added to those obtained from the header lines. When extract_addresses_remove_arguments is true (the default), Exim subtracts argument headers. If it is set false, Exim adds rather than removes argument addresses.
Thus, there's basically no mechanism for a program to know which behaviour to expect. God forbid two programs are installed on a system that expect different behaviours!

It appears that the default behaviour of Ruby is the opposite of what exim4 (Debian's default mail client) expects. This has resulted in numerous bug reports. Some replies suggest changing exim4's defaults, while others advocate overriding ActionMailer and friends to use sendmail -i instead, without -t.

That said, its not really clear who's wrong here; at no point does there appear to have been a definitive specification for sendmail, and as such we can hope for defined behaviour by common custom at best, and a sea of incompatibility bugs at worst. Amusingly, POSIX standards have nothing to say on this subject of sendmail at all; it defines that a mailx command must exist, but says that its sending mode may be implementation-specific.

As Matthew Garrett writes, there's not enough gin in the world.
Categories: Elsewhere

David Norman: Cinder block development

Planet Drupal - Thu, 02/01/2014 - 06:19

Classic Graphics bet big on Drupal. Our largest customers get their orders on time because we have built systems for them based on Drupal. Even though we're up to 300 employees now, with layers of management, the non-technical management still is aware that we use Drupal for custom development in part because Bryan and I heavily evangelized Drupal within Classic.

Thinking ahead

One of the concerns we discuss at infrequent intervals is what Classic would do if Drupal ceased to exist or if Drupal is still the best choice for doing our custom development now and in the future for the types of accounts we're pursuing. Our considerations also have to include our guesses about how the community will adopt things like Symfony or what Drupal 9 might look like.

The recent acquisition of Classic by Imagine! Print Solutions raised the discussion again. The guys at Imagine! have largely bet their development platform on .NET. Should Classic now look to adopt .NET platforms, or vise versa. We pretty quickly concluded that was not likely, at least in the short term.

As a "printing company", the Classic and Imagine! sales teams obviously look for opportunities to put ink on paper, but companies who have failed to adopt computerized order management to match their customers' needs have been becoming extinct in the printing industry. A lot of big business still operate using spreadsheets that get emailed around between departments and edited by people instead of systems. The companies which are excelling in becoming service providers in addition to being a "print shop" can adapt their print manufacturing to a customized list of retail locations or to a particular grouping of kits.


You shouldn't hire a new accountant until your current accountant is unable to complete their work in a normal workday. You ask your accountant to work a couple extra late nights and start looking for another accountant. Wait until the pain has reached its peak, then relieve it. In the meantime, there's a waiting period to put a job posting out, wait for responses, interview people, do background checks, hire them, let them give 2 weeks notice at their current place, and then train them. From the date you decide to hire a new accountant, you may be putting extra stress on your existing team for another 5-6 months.

In my experience, nobody spends big money on custom software development to manage sophisticated data workflows until they're screaming in pain. That's probably the result of some prudent money management, but it draws parallels to adding to your accounting department. By the time a software development budget is approved and a business analyst has writtens some vague specifications, the customer is already impatient. They're living their peak of pain. They won't want to wait for prototyping, agile sprint reviews, automated testing, continuous integration platform builds, VM spin-ups. etc. The better you can streamline all the overhead of project ramp-up, the closer you are to just working on solving the customer's problems.

Insert: cinder block

In the situations where the project is already filled with hot, impatient people, the "when all you have is a hammer, everything looks like a nail" scenario applies. I think the best thing you can do in that case is use your hammer, but I prefer a slightly different view on the common analogy - using a cinder block; a hammer is much too elegant. A cinder block is a clumsy thing to carry around. If you've ever worked with cinder blocks for a long period of time, you'd also find they have fragile points that cause them to leave cinder block crumbs everywhere they go.

I also extend the analogy by introducing oak, the hard wood. Most construction projects for buildings take advantage of softer wood like pine. They're cheaper because soft wood trees grow quicker and are easy to work with. Even when you have the right tools, like a standard claw hammer and some hard-wood nails, driving a nail into oak is a tough task; you have to hit the nail harder, probably a few more times, but the nails are also much more likely to bend. Driving nails into oak simply requires more skill and patience than does pine.

Put it all together now. I think of development like driving a used nail into an oak board using a cinder block. Picture some skinny desk geek gently "tapping" a nail while awkwardly straddling a block. That's development. Even though he might know just where to put the nails, he's going to bend a lot of them.

Using the ideal tools

The problem with development is that developers can't just drive to Lowe's, buy a claw hammer or an air compressor with nail gun, and return to the job site. Professional development is the culmination of years of practice, trial-and-error, and research. For a developer to leave their cinder block behind, they essentially engage in a process of researching all devices that could be used for hitting a nail, types of screws and screw drivers, rivets, whether its appropriate to be using wood or if they should switch to aluminum, then narrow down to one with is most appropriate for a specified budget, go to meetings about how to hold the hammer in the right place, how to apply safety equipment, and on and on.

Since the customer always wants their solutions now, as cheaply as possible, when all the developer has is a cinder block, it's best that they use it. Drupal has been my cinder block since 2004 and I continue to use it because it's been able to solve most of the problems brought to me. It may not be always the most elegant, but I know how to hold the Drupal cinder block in just the right angle to bend the fewest nails. I've built up muscles for holding the Drupal block. Drupal has a lot of flexibility to change and hook in custom code and I've spent a lot of time already figuring out how to use Drupal in a way to minimize project startup overhead.

I think in Classic's case, since we've invested heavily in Drupal and staff that specializes in Drupal, it continues to be the bet for our development in the next 3-4 year window.

Preventing stale

One day sales is going to bring our development guys a project for which Drupal is clearly not appropriate and I would be foolish to use Drupal blinders and not prepare for such an eventuality. Merging with Imagine! makes another whole skill-set available for us to use for solving problems, but I encourage the developers at Classic to spend "community time." I've never really defined community time clearly, but if they were to test the boundaries, I think they'd find there really aren't many. I've even gone so far as to openly encourage non-Drupal after-hours private consulting. Mark is hosting a Meteor meetup this month, a javascript tool built on node.js. I've already tried to shove another developer into learning enough node.js to implement some new print automation on our internal sites, though we don't have any immediate customer-linked need for it. I even recently became certified as a Certified Secure Software Lifecycle Professional, having used some of Classic's business hours to study, because the studying alone made me think of how we could do development differently.


Using your cinder block to hit all your nail problems isn't really all so bad because it's probably still the shortest, cheapest path to driving the nails. Keep researching and learning about other tools so you can occasionally hit the nails with a sledge hammer, the back of an ax head, or even a rare, standard claw hammer. PHP developers should probably be able to read some .NET code, try to take on some bug bounties for a node.js server, and write their own devops scripts in bash instead of trying to get a server admin to do it.

Post categories Drupal
Categories: Elsewhere

Edison Wong: Announcing TWBS jQuery: Simple jQuery Update for Drupal 7

Planet Drupal - Thu, 02/01/2014 - 05:46

During TWBS development upgrade Drupal 7 core jQuery libraries into its latest version for Bootstrap is a must. BTW jQuery Update seems not my cup of tea because it give me too much trobule within previous site building experience: too complicated, bundle everything within its own archive (which I love to manage 3rd party libraries with drush make and Libraries API), and it is really too much for my use case. So why not just work out a simplified version?

After some research and development during Christmas holiday, I would like to introduce my helper module named "TWBS jQuery". The goal of TWBS jQuery is to provide a handy support for jQuery upgrade and act as the helper module for on going Drupal-Bootstrap-Remix development.

All replacement will be handled automatically. No additional configuration is required.

Key Features Getting Started

Download and install with drush manually:

drush -y dl --dev twbs_jquery drush -y make --no-core sites/all/modules/twbs_jquery/twbs_jquery.make

Package into your own drush .make file (e.g. drustack_core.make):

api = 2 core = 7.x projects[twbs_jquery][download][branch] = 7.x-3.x projects[twbs_jquery][download][type] = git projects[twbs_jquery][download][url] = http://git.drupal.org/project/twbs_jquery.git projects[twbs_jquery][subdir] = contrib Live Demo

TWBS jQuery is now integrated into DruStack distribution, so you can try it in a live sandbox with simplytest.me.

Why Another jQuery Module?

For general and generic jQuery update functionality, you should always consider another jQuery Update module which started since 2007-04-26.

On the other hand you should consider about using this module because of:

  • Purely design for assist TWBS, which means you will have the best compatibility when using both together
  • Fetch libraries directly from original repository and handle initialization with Libraries API; jQuery Update bundle all libraries into it's own code repository and initialize manually
  • Only support latest official version of libraries which result as no additional configuration required; jQuery Update support multiple version of jQuery
  • Much simple implementation which handle all upgrade and replacement automatically; jQuery Update provide more customization options

Please feel free to test it out and comment with your idea. Let's enjoy simplified jQuery update experience ;-)

Tags Drupal Development jQuery
Categories: Elsewhere

Keith Packard: Present-pixmap-lifetimes-part-deux

Planet Debian - Thu, 02/01/2014 - 05:20
Pixmap ID Lifetimes under Present Redirection (Part Deux)

I recently wrote about pixmap content and ID lifetimes. I think the pixmap content lifetime stuff was useful, but the pixmap ID stuff was not quite right. I’ve just copied the section from the previous post and will update it.

PresentRedirect pixmap ID lifetimes (reprise)

A compositing manager will want to know the lifetime of the pixmaps delivered in PresentRedirectNotify events to clean up whatever local data it has associated with it. For instance, GL compositing managers will construct textures for each pixmap that need to be destroyed when the pixmap disappears.

Present encourages pixmap destruction

The PresentPixmap request says:

PresentRegion holds a reference to ‘pixmap’ until the presentation occurs, so ‘pixmap’ may be immediately freed after the request executes, even if that is before the presentation occurs.

Breaking this when doing Present redirection seems like a bad idea; it’s a very common pattern for existing 2D applications.

New pixmap IDs for everyone

Because pixmap IDs for present contents are owned by the source application (and may be re-used immediately when freed), Present can’t use that ID in the PresentRedirectNotify event. Instead, it must allocate a new ID and send that instead. The server has it’s own XID space to use, and so it can allocate one of those and bind it to the same underlying pixmap; the pixmap will not actually be destroyed until both the application XID and the server XID are freed.

The compositing manager will receive this new XID, and is responsible for freeing it when it doesn’t need it any longer. Of course, if the compositing manager exits, all of the XIDs passed to it will automatically be freed.

I considered allocating client-specific XIDs for this purpose; the X server already has a mechanism for allocating internal IDs for various things that are to be destroyed at client shut-down time. Those XIDs have bit 30 set, and are technically invalid XIDs as X specifies that the top three bits of every XID will be zero. However, the cost of using a server ID instead (which is a valid XID) is small, and it’s always nice to not intentionally break the X protocol (even as we continue to take advantage of “accidental” breakages).

(Reserving the top three bits of XIDs and insisting that they always be zero was a nod to the common practice of weakly typed languages like Lisp. In these languages, 32-bit object references were typed by using few tag bits (2-3) within the value. Most of these were just pointers to data, but small integers, that fit in the remaining bits (29-30), could be constructed without allocating any memory. By making XIDs only 29 bits, these languages could be assured that all XIDs would be small integers.)

Pixmap Destroy Notify

The Compositing manager needs to know when the application is done with the pixmap so that it can clean up when it is also done; destroying the extra pixmap ID it was given and freeing any other local resources. When the application sends a FreePixmap request, that XID will become invalid, but of course the pixmap itself won’t be freed until the compositing manager sends a FreePixmap request with the extra XID it was given.

Because the pixmap ID known by the compositing manager is going to be different from the original application XID, we need an event delivered to the compositing manager with the new XID, which makes this event rather Present specific. We don’t need to select for this event; the compositing manager must handle it correctly, so we’ll just send it whenever the composting manager has received that custom XID.

PresentPixmapDestroyNotify ┌─── PresentPixmapDestroyNotify type: CARD8 XGE event type (35) extension: CARD8 Present extension opcode sequence-number: CARD16 length: CARD32 0 evtype: CARD16 Present_PixmapDestroyNotify eventID: XFIXESEVENTID event-window: WINDOW pixmap: pixmap └───

This event is delivered to the clients selecting for SubredirectNotify for pixmaps which were delivered in a PresentRedirectNotify event and for which the originating application Pixmap has been destroyed. Note that the pixmap may still be referenced by other objects within the X server, by a pending PresentPixmap request, as a window background, GC tile or stipple or Picture drawable (among others), but this event serves to notify the selecting client that the application is no longer able to access the underlying pixmap with it’s original Pixmap ID.

Categories: Elsewhere

Francois Marier: Running your own XMPP server on Debian or Ubuntu

Planet Debian - Thu, 02/01/2014 - 04:45

In order to get closer to my goal of reducing my dependence on centralized services, I decided to setup my own XMPP / Jabber server on a Linode VPS running Debian wheezy. I chose ejabberd since it was recommended by the RTC Quick Start website and here's how I put everything together.


My personal domain is fmarier.org and so I created the following DNS records:

jabber-gw CNAME fmarier.org _xmpp-client._tcp SRV 5 0 5222 fmarier.org _xmpp-server._tcp SRV 5 0 5269 fmarier.org

Then I went to get a free XMPP SSL certificate for jabber-gw.fmarier.org from StartSSL. This is how I generated the CSR (Certificate Signing Request) on a high-entropy machine:

openssl req -new -newkey rsa:2048 -nodes -out ssl.csr -keyout ssl.key -subj "/C=NZ/CN=jabber-gw.fmarier.org"

I downloaded the signed certificate as well as the StartSSL intermediate certificate and combined them this way:

cat ssl.crt ssl.key sub.class1.server.ca.pem > ejabberd.pem ejabberd installation

Installing ejabberd on Debian is pretty simple and I mostly followed the steps on the Ubuntu wiki with an additional customization to solve the Pidgin "Not authorized" connection problems.

  1. Install the package, using "admin" as the username for the administrative user:

    apt-get install ejabberd
  2. Set the following in /etc/ejabberd/ejabberd.cfg (don't forget the trailing dots!):

    {acl, admin, {user, "admin", "fmarier.org"}}. {hosts, ["fmarier.org"]}. {fqdn, "jabber-gw.fmarier.org"}.
  3. Copy the SSL certificate into the /etc/ejabberd/ directory and set the permissions correctly:

    chown root:ejabberd /etc/ejabberd/ejabberd.pem chmod 640 /etc/ejabberd/ejabberd.pem
  4. Restart the ejabberd daemon:

    /etc/init.d/ejabberd restart
  5. Create a new user account for yourself:

    ejabberdctl register me fmarier.org P@ssw0rd1!
  6. Open up the following ports on the server's firewall:

    iptables -A INPUT -p tcp --dport 5222 -j ACCEPT iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
Client setup

On the client side, if you use Pidgin, create a new account with the following settings in the "Basic" tab:

  • Protocol: XMPP
  • Username: me
  • Domain: fmarier.org
  • Password: P@ssw0rd1!

and the following setting in the "Advanced" tab:

  • Connection security: Require encryption

From this, I was able to connect to the server without clicking through any certificate warnings.

If you want to make sure that XMPP federation works, add your GMail address as a buddy to the account and send yourself a test message.

Categories: Elsewhere

Bryan Braun: There's more than one way to save a node

Planet Drupal - Thu, 02/01/2014 - 04:22

Every day, millions of nodes are saved. It happens every time content is created, migrated, or updated. It's probably the most common content management task in Drupal.

But there are lots of ways you can change the node-save experience for your users, and there are many contributed modules that offer alternative approaches to saving nodes. Here are a few that I like.

Add another

The Add Another module allows gives users the option to save a node while quickly creating a new one. You can choose to add the option to the admin form itself, or as part of the save confirmation message. It's great for those content types, like "Image" or "Video" for example, where your users find themselves creating a series of nodes in succession.

Hide Submit

Occasionally you'll see an issue where an end user clicks submit on a the node-edit form and, being ignorant of the fact that the request is being processed, clicks submit several more times to see  if it's broken. Sometimes this can lead to multiple form submissions, resulting in bad things like duplicate content. The Hide Submit module does one simple thing: Prevent forms from being submitted multiple times. It does this by disabling the submit button once it's been clicked, with settings to fade out the button, append text, or hide it all together. This prevents errors, but it also signals to the user that the submission is in progress, helping to alleviate a bit of the frustration.

Publish Button

"Does the word "Save" mean that I'm saving a draft or does it mean that I'm publishing the content live?" While it may be obvious for those familiar with Drupal, the intent of the button isn't always clear for new users. The Publish Button module aims to make it more explicit by splitting up the "Save" button into two buttons: "Save" and "Publish". If a node is published, the publish button is replaced with an "Unpublish" button.

Node Buttons Edit

What if you have your own idea on what button text should be used? You could use "string overrides" module for a universal approach to text customization, but the Node Buttons Edit module gives you a straightforward admin page for customizing the button text specifically. No need to incur the additional overhead if you don't have to.

More Buttons

The More Buttons module gives you the option of turning on more buttons (shocking, I know), to further customize your content saving experience. For example, you may want a "Save and Continue" button to save the status of the current input while continuing to make changes. Or maybe you'd like a cancel button, to close the form altogether. If so, this module makes these (and other options) available to you.

So next time you see users tripping over the node saving workflow, remember that you, as a sitebuilder, have a handful of options at your disposal to make things a bit more clear.

Categories: Elsewhere

netsperience 2.x: Building a Video Playlist for JW Player 6 with Drupal 7 Views

Planet Drupal - Thu, 02/01/2014 - 02:31

I took over a Drupal 7 project building a web application for college students to upload original videos about their school, and for schools to manage, group, and share the videos.

It's a startup privately funded by the principal, and we are literally working on a shoestring. My previous experience with media in Drupal led the principal to contact me via LinkedIn.

When it came time to build a video playlist in Drupal Views for JW Player version="6.7.4071" (formerly known as Longtail Video), I found very little useful documentation. In fact, someone suggested that those who know how are not interested in sharing their knowlege. -- but not me 

There are a couple of videos on YouTube by Bryan Ollendyke for Drupal 6. But a lot has changed in Drupal since then.

The Goal:

Back to the playlist: Site admins can mark a video featured by ticking a checkbox on the custom video content type. Now I want to display those featured videos as a playlist.

read more

Categories: Elsewhere

Russ Allbery: 2013 Book Reading in Review

Planet Debian - Thu, 02/01/2014 - 00:24

What a strange year.

2013 was marked by a whole sequence of entirely unexpected events, including multiple major work upheavals. For large chunks of the year, I had very little time or emotional energy for personal reading goals, and particularly for writing reviews. I declared personal amnesty on most of my intentions halfway through the year, and all the totals will reflect that. On the plus side (although not for reading and reviews), it was a great year for video games.

Next year, there will be no specific goals. Between continuing work fallout, a very busy project schedule, my intent to keep playing a lot of video games, and various other personal goals I want to take on, I'm going to take the pressure off of reading. Things will be read and reviews will be written (and I'm going to make more of an effort to write reviews shortly after reading books), but I'm not going to worry about how many.

The below statistics are confined to the books I reviewed in 2012. I read six more books that I've not yet reviewed, due to the chaos at the end of the year. Those will be counted in 2014.

There were no 10 out of 10 books this year, partly due to the much lower reading totals and partly due to my tendency this year to turn to safe comfort reading, which is reliably good but unlikely to be exceptional. There were, however, several near-misses that were worth calling out.

My favorite book of the year was Neal Stephenson's Anathem, which narrowly missed a 10 for me due to some fundamental problems with the plot premise. But this is still an excellent book: the best novel about the practice of science and philosophy that I've ever read. Also deserving mention are K.E. Lane's And Playing the Role of Herself, lovely and intelligent lesbian romance that's likely to appeal even to people who would not normally try that genre, and Guy Gavriel Kay's River of Stars. The latter isn't quite at the level of Kay's earlier Under Heaven, but it's still an excellent work of alternate historical fiction in a memorable setting.

A special honorable mention goes to Lisa O'Donnell's The Death of Bees. It requires a lot of warnings for very dark subject matter and a rather abrupt ending, but it's been a long time since I've cared that much about the characters of a book.

My favorite non-fiction book of the year was Gary J. Hudson's They Had to Go Out, a meticulously researched account of a tragic Coast Guard mission. The writing is choppy, the editing could have been better, and it's clear that the author is not a professional writer, but it's the sort of detailed non-fiction account that can only be written by someone who's been there and lived through similar experiences. Also worth mentioning is Mark Jason Dominus's Higher Order Perl, which was the best technical book I read all year and which I found quite inspiring for my own programming.

The full analysis includes some additional personal reading statistics, probably only of interest to me.

Categories: Elsewhere

Acquia: 2013 Greatest Hits – Meet Angie Byron: The Return of Webchick

Planet Drupal - Wed, 01/01/2014 - 21:50

Angie and I were at Acquia headquarters in Massachusetts at the same time in the spring of 2013. This gave us the chance to sit down and chat in front of the camera about all things Drupal. Highlights from our conversation became two podcasts with accompanying video. In this part of the conversation, Angie talks about how she got into Drupal and more.

Categories: Elsewhere

Tim Retout: 2014

Planet Debian - Wed, 01/01/2014 - 19:02

So, happy new year. :)

I watched many 30c3 talks via the streams over Christmas - they were awesome. I especially enjoyed finding out (in the Tor talk) that the Internet Watch Foundation need to use Tor when checking out particularly dodgy links online, else people just serve them up pictures of kittens.

Today's fail: deciding to set up OpenVPN, then realising the OpenVZ VPS I was planning to use would not support /dev/net/tun.

I'm back at work tomorrow, preparing for the January surge of people looking for jobs. Tonight, the first Southampton Perl Mongers meeting of the year.

Categories: Elsewhere


Subscribe to jfhovinne aggregator